Flutter文字识别插件ml_kit_ocr的使用
Flutter文字识别插件ml_kit_ocr的使用
要求
Android
- 在
android/app/build.gradle
中设置minSdkVersion 21
- 在
android/build.gradle
中设置ext.kotlin_version = '1.6.10'
- 在
android/src/main/AndroidManifest.xml
中添加<meta-data android:name="com.google.mlkit.vision.DEPENDENCIES" android:value="ocr" />
- 如果使用多个模型,请用逗号分隔,例如
<meta-data android:name="com.google.mlkit.vision.DEPENDENCIES" android:value="ocr,ica" />
- Android应用大小影响约为260KB
iOS
- 最低iOS部署目标为10.0
- 使用Xcode 12.5.1或更高版本
- ML Kit仅支持64位架构(x86_64 和 arm64)。请检查此列表以确认您的设备是否具有所需的功能。
- 由于ML Kit不支持32位架构(i386 和 armv7),因此需要在Xcode中排除armv7架构以构建iOS应用
- iOS应用大小影响约为20MB
使用
// 创建一个 [MlKitOcr] 实例
final ocr = MlKitOcr();
// 选择图像(使用image_picker)
// ...
// 调用 `processImage()` 并传递参数为 `InputImage`(参见示例获取更多信息)
final result = await ocr
.processImage(InputImage.fromFilePath(image.path));
// 初始化识别结果字符串
recognitions = '';
// 遍历文本块
for (var blocks in result.blocks) {
for (var lines in blocks.lines) {
for (var words in lines.elements) {
// 将每个单词的文本添加到识别结果中
recognitions += words.text + ' ';
}
}
}
该插件是 google_ml_kit
的简化版。由于 google_ml_kit
包含所有NLP和Vision API,应用大小会显著增加。因此,创建了这个插件,使得示例应用的完整APK大小为17MB,而分割后的APK大小为6MB。
完整示例代码
以下是完整的示例代码,展示了如何使用 ml_kit_ocr
插件进行文字识别。
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:ml_kit_ocr/ml_kit_ocr.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
XFile? image;
String recognitions = '';
String timeElapsed = '';
bool isProcessing = false;
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('MlKit OCR 示例应用'),
),
body: ListView(
physics: const ClampingScrollPhysics(),
children: [
const SizedBox(height: 20),
if (image != null)
SizedBox(
height: 200,
width: 200,
child: InteractiveViewer(
child: Image.file(
File(image!.path),
fit: BoxFit.contain,
),
),
),
const SizedBox(height: 20),
if (recognitions.isNotEmpty)
Padding(
padding: const EdgeInsets.all(8.0),
child: SelectableText('识别的文本: $recognitions'),
),
if (timeElapsed.isNotEmpty)
Padding(
padding: const EdgeInsets.all(8.0),
child: Text('耗时: $timeElapsed 毫秒'),
),
const SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
ElevatedButton(
onPressed: () async {
image = await ImagePicker().pickImage(source: ImageSource.gallery);
recognitions = '';
timeElapsed = '';
setState(() {});
},
child: const Text('选择图片'),
),
if (image != null)
isProcessing
? const Center(
child: CircularProgressIndicator.adaptive(),
)
: ElevatedButton(
onPressed: () async {
recognitions = '';
final ocr = MlKitOcr();
final stopwatch = Stopwatch()..start();
isProcessing = true;
setState(() {});
final result = await ocr.processImage(InputImage.fromFilePath(image!.path));
timeElapsed = stopwatch.elapsedMilliseconds.toString();
isProcessing = false;
stopwatch.reset();
stopwatch.stop();
for (var blocks in result.blocks) {
for (var lines in blocks.lines) {
recognitions += '\n';
for (var words in lines.elements) {
recognitions += words.text + ' ';
}
}
}
setState(() {});
},
child: const Text('从图片预测'),
),
],
),
],
),
),
);
}
}
更多关于Flutter文字识别插件ml_kit_ocr的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter文字识别插件ml_kit_ocr的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
ml_kit_ocr
是一个用于Flutter的文字识别插件,它基于Google的ML Kit OCR(光学字符识别)技术。通过这个插件,你可以在Flutter应用中轻松地实现文字识别功能。以下是如何使用ml_kit_ocr
插件的详细步骤:
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加ml_kit_ocr
插件的依赖。
dependencies:
flutter:
sdk: flutter
ml_kit_ocr: ^0.0.1 # 请检查最新版本
然后运行 flutter pub get
来获取依赖。
2. 导入包
在你的Dart文件中导入ml_kit_ocr
包。
import 'package:ml_kit_ocr/ml_kit_ocr.dart';
3. 初始化OCR
在使用OCR功能之前,你需要初始化MLKitOcr
实例。
final MLKitOcr _mlKitOcr = MLKitOcr();
4. 处理图像并识别文字
你可以通过processImage
方法来处理图像并识别文字。你可以使用ImagePicker
来选择图像,或者在应用中使用相机拍摄图像。
import 'package:image_picker/image_picker.dart';
Future<void> recognizeTextFromImage() async {
final picker = ImagePicker();
final pickedFile = await picker.getImage(source: ImageSource.gallery);
if (pickedFile != null) {
final filePath = pickedFile.path;
final recognizedText = await _mlKitOcr.processImage(filePath);
print('Recognized Text: $recognizedText');
} else {
print('No image selected.');
}
}
5. 释放资源
当不再需要使用OCR功能时,记得释放资源。
[@override](/user/override)
void dispose() {
_mlKitOcr.dispose();
super.dispose();
}
6. 处理结果
processImage
方法返回一个字符串,包含了识别出的文字。你可以根据需要对这个字符串进行处理,比如显示在UI中、保存到数据库等。
完整示例
以下是一个完整的示例,展示了如何使用ml_kit_ocr
插件从图像中识别文字:
import 'package:flutter/material.dart';
import 'package:ml_kit_ocr/ml_kit_ocr.dart';
import 'package:image_picker/image_picker.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: OcrScreen(),
);
}
}
class OcrScreen extends StatefulWidget {
[@override](/user/override)
_OcrScreenState createState() => _OcrScreenState();
}
class _OcrScreenState extends State<OcrScreen> {
final MLKitOcr _mlKitOcr = MLKitOcr();
String _recognizedText = '';
Future<void> recognizeTextFromImage() async {
final picker = ImagePicker();
final pickedFile = await picker.getImage(source: ImageSource.gallery);
if (pickedFile != null) {
final filePath = pickedFile.path;
final recognizedText = await _mlKitOcr.processImage(filePath);
setState(() {
_recognizedText = recognizedText;
});
} else {
setState(() {
_recognizedText = 'No image selected.';
});
}
}
[@override](/user/override)
void dispose() {
_mlKitOcr.dispose();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('ML Kit OCR Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: recognizeTextFromImage,
child: Text('Select Image'),
),
SizedBox(height: 20),
Text('Recognized Text:'),
Text(_recognizedText),
],
),
),
);
}
}