Flutter文本识别插件google_mlkit_text_recognition的使用
Flutter文本识别插件google_mlkit_text_recognition的使用
Google’s ML Kit Text Recognition for Flutter
Flutter插件,用于使用Google的ML Kit Text Recognition来识别中文、天城文(Devanagari)、日文、韩文和拉丁字符集中的文本。
重要提示
- 平台支持:Google的ML Kit仅适用于移动平台:iOS和Android应用。Web或其他平台不受支持。
- 维护者:此插件不由Google赞助或维护,作者是一群对机器学习充满热情的开发者。
- 平台通道:此插件使用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
: 21targetSdkVersion
: 33compileSdkVersion
: 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
更多关于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项目中按照以下步骤使用文本识别功能:
- 导入必要的包:
import 'package:flutter/material.dart';
import 'package:google_mlkit_text_recognition/google_mlkit_text_recognition.dart';
- 定义一个函数来执行文本识别:
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');
}
}
注意:Size
和rotation
参数需要根据你实际的图片大小和旋转情况进行调整。这里只是提供了一个简单的示例。
- 在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进行文本识别了。希望这个示例对你有帮助!