Flutter文本识别插件google_mlkit_text_recognition的使用

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

Flutter文本识别插件google_mlkit_text_recognition的使用

Google’s ML Kit Text Recognition for Flutter

Pub Version analysis Star on Github License: MIT

Flutter插件,用于使用Google的ML Kit Text Recognition来识别中文、天城文(Devanagari)、日文、韩文和拉丁字符集中的文本。

重要提示

  1. 平台支持:Google的ML Kit仅适用于移动平台:iOS和Android应用。Web或其他平台不受支持。
  2. 维护者:此插件不由Google赞助或维护,作者是一群对机器学习充满热情的开发者。
  3. 平台通道:此插件使用Flutter Platform Channels与原生平台通信,所有机器学习处理都在原生平台上完成。

要求

iOS

  • 最低iOS部署目标:15.5.0
  • Xcode 15.3.0或更新版本
  • Swift 5
  • ML Kit不支持32位架构(i386和armv7),仅支持64位架构(x86_64和arm64)。

Podfile中排除32位架构:

platform :ios, '15.5.0'  # 或更新版本

$iOSVersion = '15.5.0'  # 或更新版本

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings["EXCLUDED_ARCHS[sdk=*]"] = "armv7"
    config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = $iOSVersion
  end

  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      if Gem::Version.new($iOSVersion) > Gem::Version.new(config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'])
        config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = $iOSVersion
      end
    end
  end
end

Android

  • minSdkVersion: 21
  • targetSdkVersion: 33
  • compileSdkVersion: 34

支持的语言

ML Kit Text Recognition API可以识别中文、天城文(Devanagari)、日文、韩文和拉丁字符集中的文本。更多信息请参阅官方文档

使用方法

文本识别

添加语言包依赖

默认情况下,此插件仅支持拉丁字符的识别。如果需要识别其他语言,请手动添加依赖。

对于iOS平台,在ios/Podfile文件中添加:

pod 'GoogleMLKit/TextRecognitionChinese', '~> 7.0.0'
pod 'GoogleMLKit/TextRecognitionDevanagari', '~> 7.0.0'
pod 'GoogleMLKit/TextRecognitionJapanese', '~> 7.0.0'
pod 'GoogleMLKit/TextRecognitionKorean', '~> 7.0.0'

对于Android平台,在android/app/build.gradle文件中添加:

dependencies {
    implementation 'com.google.mlkit:text-recognition-chinese:16.0.0'
    implementation 'com.google.mlkit:text-recognition-devanagari:16.0.0'
    implementation 'com.google.mlkit:text-recognition-japanese:16.0.0'
    implementation 'com.google.mlkit:text-recognition-korean:16.0.0'
}

创建InputImage实例

创建一个InputImage实例,具体方法请参考官方文档

final InputImage inputImage;

创建TextRecognizer实例

final textRecognizer = TextRecognizer(script: TextRecognitionScript.latin);

处理图像

final RecognizedText recognizedText = await textRecognizer.processImage(inputImage);

String text = recognizedText.text;
for (TextBlock block in recognizedText.blocks) {
  final Rect rect = block.boundingBox;
  final List<Point<int>> cornerPoints = block.cornerPoints;
  final String blockText = block.text;
  final List<String> languages = block.recognizedLanguages;

  for (TextLine line in block.lines) {
    // 同TextBlock的getter方法
    for (TextElement element in line.elements) {
      // 同TextBlock的getter方法
    }
  }
}

释放资源

textRecognizer.close();

示例应用

可以在这里找到示例应用。

完整示例代码

下面是一个完整的示例代码,展示了如何使用google_mlkit_text_recognition插件进行文本识别:

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

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

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

class TextRecognitionPage extends StatefulWidget {
  @override
  _TextRecognitionPageState createState() => _TextRecognitionPageState();
}

class _TextRecognitionPageState extends State<TextRecognitionPage> {
  final TextRecognizer textRecognizer = TextRecognizer(script: TextRecognitionScript.latin);
  String recognizedText = '';

  Future<void> processImage(InputImage inputImage) async {
    final RecognizedText result = await textRecognizer.processImage(inputImage);
    setState(() {
      recognizedText = result.text;
    });
  }

  @override
  void dispose() {
    textRecognizer.close();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Text Recognition'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('Recognized Text:'),
            Text(recognizedText),
            ElevatedButton(
              onPressed: () async {
                // 假设你有一个方法来获取InputImage
                final InputImage inputImage = await getImageFromSource(); 
                await processImage(inputImage);
              },
              child: Text('Process Image'),
            ),
          ],
        ),
      ),
    );
  }

  // 获取InputImage的方法,根据实际情况实现
  Future<InputImage> getImageFromSource() async {
    // 实现获取InputImage的逻辑,例如从相机或图库中选择图片
    // 这里只是一个占位符
    throw UnimplementedError();
  }
}

希望这个示例能帮助你更好地理解和使用google_mlkit_text_recognition插件。如果你有任何问题,欢迎随时提问!


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用google_mlkit_text_recognition插件进行文本识别的代码示例。这个插件利用了Google的ML Kit库来实现文本识别功能。

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

dependencies:
  flutter:
    sdk: flutter
  google_mlkit_text_recognition: ^0.x.x  # 请检查最新版本号并替换

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

接下来,你可以在你的Flutter项目中按照以下步骤使用文本识别功能:

  1. 导入必要的包
import 'package:flutter/material.dart';
import 'package:google_mlkit_text_recognition/google_mlkit_text_recognition.dart';
  1. 定义一个函数来执行文本识别
Future<void> recognizeTextFromImage(Uint8List imageBytes) async {
    try {
      // 创建一个输入图像实例
      final inputImage = InputImage.fromBytes(
        imageBytes: imageBytes,
        size: Size(imageBytes.lengthInBytes ~/ 4, (imageBytes.lengthInBytes ~/ 4) ~/ 4),  // 这里需要根据你的图片实际大小来设置
        rotation: InputImageRotation.ROTATION_0,
        scaleFactor: 1.0,
      );

      // 获取文本识别器实例
      final textRecognizer = TextRecognizer();

      // 执行文本识别
      final result = await textRecognizer.process(inputImage);

      // 打印识别结果
      print('识别到的文本: ${result.text}');

      // 释放识别器资源
      textRecognizer.close();
    } catch (e) {
      print('文本识别失败: $e');
    }
}

注意:Sizerotation参数需要根据你实际的图片大小和旋转情况进行调整。这里只是提供了一个简单的示例。

  1. 在UI中调用该函数
void _onImageSelected(File imageFile) async {
    // 读取图片文件为Uint8List
    final imageBytes = await imageFile.readAsBytes();

    // 执行文本识别
    await recognizeTextFromImage(imageBytes);
}

@override
Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('文本识别示例'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              TextButton(
                onPressed: () async {
                  // 这里假设你有一个方法来选择图片,比如从文件选择器
                  final picker = ImagePicker();
                  final pickedFile = await picker.pickImage(source: ImageSource.camera);

                  if (pickedFile != null) {
                    _onImageSelected(File(pickedFile.path));
                  }
                },
                child: Text('选择图片进行识别'),
              ),
            ],
          ),
        ),
      ),
    );
}

在这个示例中,我们使用了image_picker插件来选择图片。你需要在pubspec.yaml中添加image_picker依赖,并运行flutter pub get来安装它。

dependencies:
  flutter:
    sdk: flutter
  google_mlkit_text_recognition: ^0.x.x  # 请检查最新版本号并替换
  image_picker: ^0.x.x  # 请检查最新版本号并替换

注意:在实际应用中,你可能需要处理更多的错误情况和边缘情况,比如图片格式不支持、文件读取失败等。

这样,你就可以在Flutter应用中使用Google ML Kit进行文本识别了。希望这个示例对你有帮助!

回到顶部