Flutter光学字符识别插件tesseract_latest的使用

发布于 1周前 作者 h691938207 来自 Flutter

Flutter光学字符识别插件tesseract_latest的使用

本项目是一个用于Tesseract OCR引擎的Flutter插件。它支持空安全。

开始使用

此项目是Flutter插件包的一个起点,它包括针对Android和/或iOS平台的特定实现代码。

对于如何开始Flutter开发的帮助,请参阅在线文档,其中包含教程、示例、移动开发指南以及完整的API参考。


以下是一个使用tesseract_latest插件的完整示例代码:

import 'package:flutter/material.dart';
//import 'dart:async';

//import 'package:flutter/services.dart';
import 'package:tesseract_latest/tesseract_latest.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool _scanning = false; // 控制扫描状态
  String _extractText = ''; // 存储提取的文本
  int _scanTime = 0; // 扫描时间

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Tesseract Implementation'), // 应用程序标题
        ),
        body: Container(
          padding: const EdgeInsets.all(16), // 内边距
          child: ListView(
            children: <Widget>[
              Column(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly, // 垂直布局
                children: [
                  ElevatedButton(
                    child: const Text('Select image'), // 按钮文本
                    onPressed: () async { // 按钮点击事件
                      var result = await FilePicker.platform.pickFiles(
                        type: FileType.image, // 选择图像文件类型
                      );
                      setState(() {
                        _scanning = true; // 设置扫描状态为true
                      });

                      var watch = Stopwatch()..start(); // 启动计时器
                      _extractText = await TesseractLatest.extractText(
                          result!.files.single.path!); // 提取文本
                      _scanTime = watch.elapsedMilliseconds; // 计算扫描时间

                      setState(() {
                        _scanning = false; // 设置扫描状态为false
                      });
                    },
                  ),
                  // 它不旋转,因为扫描会挂起线程
                  _scanning
                      ? const SpinKitCircle(
                          color: Colors.green, // 加载指示器颜色
                        )
                      : const Icon(Icons.done), // 扫描完成图标

                  const SizedBox(height: 16), // 空白高度
                  Text(
                    'Scanning took $_scanTime ms', // 显示扫描时间
                    style: const TextStyle(color: Colors.red), // 文本颜色
                  ),
                  const SizedBox(height: 16), // 空白高度
                  Center(child: SelectableText(_extractText)), // 可选文本
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter光学字符识别插件tesseract_latest的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter光学字符识别插件tesseract_latest的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter项目中,你可以使用tesseract_latest插件来实现光学字符识别(OCR)。以下是一个简单的示例,展示了如何集成和使用该插件。

首先,确保你已经在pubspec.yaml文件中添加了tesseract_latest依赖:

dependencies:
  flutter:
    sdk: flutter
  tesseract_latest: ^x.y.z  # 请将x.y.z替换为最新版本号

然后,运行flutter pub get来安装依赖。

接下来,你需要编写Flutter代码来使用OCR功能。以下是一个完整的示例,包括如何从图像中提取文本:

  1. 创建一个新的Flutter项目(如果你还没有的话):
flutter create ocr_app
cd ocr_app
  1. pubspec.yaml中添加tesseract_latest依赖(如上所述)。

  2. 更新lib/main.dart文件

import 'package:flutter/material.dart';
import 'dart:typed_data';
import 'dart:ui' as ui;
import 'package:tesseract_latest/tesseract_latest.dart';
import 'package:image_picker/image_picker.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: OcrScreen(),
    );
  }
}

class OcrScreen extends StatefulWidget {
  @override
  _OcrScreenState createState() => _OcrScreenState();
}

class _OcrScreenState extends State<OcrScreen> {
  String? ocrResult;
  final ImagePicker _picker = ImagePicker();

  Future<Uint8List?> pickImage() async {
    final XFile? image = await _picker.pickImage(source: ImagePicker.sourceType.camera);

    if (image == null) return null;

    final Uint8List imageBytes = await image.readAsBytes();
    return imageBytes;
  }

  Future<void> performOCR(Uint8List imageBytes) async {
    try {
      final String result = await TesseractOcr.recognizeText(
        image: imageBytes,
        language: 'eng',  // 可选参数,指定识别语言
      );
      setState(() {
        ocrResult = result;
      });
    } catch (e) {
      print("OCR Error: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('OCR Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TextButton(
              onPressed: () async {
                Uint8List? imageBytes = await pickImage();
                if (imageBytes != null) {
                  performOCR(imageBytes);
                }
              },
              child: Text('Pick Image for OCR'),
            ),
            if (ocrResult != null)
              Text(
                'OCR Result:\n$ocrResult',
                style: TextStyle(fontSize: 18),
              ),
          ],
        ),
      ),
    );
  }
}
  1. 添加image_picker依赖(因为我们需要从设备中选择或拍摄图像):

pubspec.yaml文件中添加:

dependencies:
  image_picker: ^x.y.z  # 请将x.y.z替换为最新版本号

然后运行flutter pub get

  1. 配置iOS和Android权限

    • iOS:在ios/Runner/Info.plist中添加相机和照片库的权限请求。
    • Android:在android/app/src/main/AndroidManifest.xml中添加相机和读写外部存储的权限。

    这些权限通常在使用image_picker插件时会自动提示你添加。

  2. 运行应用

flutter run

现在,你应该能够看到一个简单的Flutter应用,允许你选择或拍摄图像,并使用tesseract_latest插件执行OCR。识别结果将显示在屏幕上。

请注意,由于tesseract_latest插件依赖于Tesseract OCR引擎,因此在实际应用中可能需要考虑性能和准确性问题,特别是对于复杂或低质量的图像。

回到顶部