Flutter机器学习插件google_ml_kit的使用
Flutter机器学习插件google_ml_kit的使用
Google’s ML Kit for Flutter
Google’s ML Kit for Flutter 是一组Flutter插件,允许Flutter应用程序使用Google的独立ML Kit。
注意:
google_ml_kit
是一个伞状插件,包含以下列出的所有功能。它将所有插件及其依赖项打包在一起,这会显著增加应用程序的大小。我们建议仅添加所需的特定功能插件,而不是在生产应用中使用google_ml_kit
。
Features
Vision APIs
Natural Language APIs
Feature | Plugin | Android | iOS |
---|---|---|---|
Language Identification | google_mlkit_language_id | ✅ | ✅ |
On-Device Translation | google_mlkit_translation | ✅ | ✅ |
Smart Reply | google_mlkit_smart_reply | ✅ | ✅ |
Entity Extraction | google_mlkit_entity_extraction | ✅ | ✅ |
Requirements
iOS
- Minimum iOS Deployment Target: 15.5.0
- Xcode 15.3.0 or newer
- Swift 5
- ML Kit 不支持 32 位架构(i386 和 armv7)。ML Kit 支持 64 位架构(x86_64 和 arm64)。请参考此列表以查看您的设备是否具有所需的功能。更多信息请参阅这里。
由于 ML Kit 不支持 32 位架构(i386 和 armv7),您需要在 Xcode 中排除 armv7 架构以运行 flutter build ios
或 flutter build ipa
。更多信息请参阅这里。
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
注意:最低 IPHONEOS_DEPLOYMENT_TARGET
是 15.5.0,您可以设置为更新版本但不能更旧。
Android
- minSdkVersion: 21
- targetSdkVersion: 33
- compileSdkVersion: 34
Example App
您可以在这里找到示例应用程序:example app
Contributing
欢迎贡献。如果您遇到问题,请先查看现有问题,如果找不到与您问题相关的内容,则可以打开一个新问题。对于非微小修复,请先创建一个问题,然后再提交pull request。对于微小修复,可以直接提交pull request。
示例代码
以下是使用 google_mlkit_text_recognition
插件进行文本识别的完整示例:
1. 添加依赖
在 pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
google_mlkit_text_recognition: ^1.0.0
2. 创建 Dart 文件
创建一个新的 Dart 文件 text_recognition.dart
并添加以下代码:
import 'package:flutter/material.dart';
import 'package:google_mlkit_text_recognition/google_mlkit_text_recognition.dart';
class TextRecognitionScreen extends StatefulWidget {
@override
_TextRecognitionScreenState createState() => _TextRecognitionScreenState();
}
class _TextRecognitionScreenState extends State<TextRecognitionScreen> {
final TextRecognizer _textRecognizer = TextRecognizer();
String _recognizedText = '';
Future<void> _recognizeText(String imagePath) async {
final inputImage = InputImage.fromFilePath(imagePath);
final RecognizedText recognizedText = await _textRecognizer.processImage(inputImage);
setState(() {
_recognizedText = recognizedText.text;
});
_textRecognizer.close();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Text Recognition'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
// 假设您有一个方法来选择图像文件路径
final String imagePath = await selectImagePath();
await _recognizeText(imagePath);
},
child: Text('Select Image'),
),
SizedBox(height: 20),
Text(
'Recognized Text:',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
SizedBox(height: 10),
Text(
_recognizedText,
style: TextStyle(fontSize: 16),
),
],
),
),
);
}
}
3. 运行应用程序
确保您已经配置了相机权限,并且可以在应用程序中选择图像文件路径。然后运行应用程序并选择一张包含文本的图像,您将看到识别出的文本显示在屏幕上。
希望这个示例能帮助您更好地理解如何使用 google_ml_kit
插件进行文本识别。如果有任何问题或需要进一步的帮助,请随时提问!
更多关于Flutter机器学习插件google_ml_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter机器学习插件google_ml_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用google_ml_kit
插件进行机器学习任务的示例代码。这个示例将演示如何使用google_ml_kit
进行文本识别(Optical Character Recognition, OCR)。
首先,确保你的Flutter项目已经设置好,并且已经在pubspec.yaml
文件中添加了google_ml_kit
依赖:
dependencies:
flutter:
sdk: flutter
google_ml_kit: ^0.x.x # 请替换为最新的版本号
然后,运行flutter pub get
来安装依赖。
接下来,是具体的代码实现。我们将创建一个简单的Flutter应用,该应用将从图像中识别文本。
main.dart
import 'package:flutter/material.dart';
import 'package:google_ml_kit/google_ml_kit.dart';
import 'package:image_picker/image_picker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: TextRecognitionScreen(),
);
}
}
class TextRecognitionScreen extends StatefulWidget {
@override
_TextRecognitionScreenState createState() => _TextRecognitionScreenState();
}
class _TextRecognitionScreenState extends State<TextRecognitionScreen> {
final ImagePicker _picker = ImagePicker();
File? _imageFile;
String _recognizedText = '';
Future<void> _pickImage(ImageSource source) async {
final XFile? image = await _picker.pickImage(source: source);
if (image != null) {
final File imageFile = File(image.path);
setState(() {
_imageFile = imageFile;
});
_recognizeText(imageFile);
}
}
Future<void> _recognizeText(File imageFile) async {
try {
final InputImage inputImage = InputImage.fromFile(imageFile);
final List<TextRecognitionResult> results =
await TextRecognizer().processImage(inputImage);
String resultText = '';
for (final TextRecognitionResult result in results) {
for (final TextBlock block in result.blocks) {
for (final TextLine line in block.lines) {
for (final TextElement element in line.elements) {
resultText += element.text + ' ';
}
resultText += '\n';
}
resultText += '\n';
}
}
setState(() {
_recognizedText = resultText;
});
} catch (e) {
print('Failed to recognize text: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Text Recognition with ML Kit'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_imageFile == null
? Text('No image selected.')
: Image.file(_imageFile!),
if (_imageFile != null)
SizedBox(height: 16),
Text(
'Recognized Text:',
style: TextStyle(fontWeight: FontWeight.bold),
),
Text(_recognizedText),
SizedBox(height: 16),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
ElevatedButton(
onPressed: () => _pickImage(ImageSource.camera),
child: Text('Capture Image'),
),
ElevatedButton(
onPressed: () => _pickImage(ImageSource.gallery),
child: Text('Choose from Gallery'),
),
],
),
],
),
),
);
}
}
说明
-
依赖添加:我们在
pubspec.yaml
文件中添加了google_ml_kit
和image_picker
依赖。image_picker
用于从相机或图库中选择图像。 -
选择图像:
_pickImage
方法使用image_picker
插件从相机或图库中选择图像。 -
文本识别:
_recognizeText
方法使用google_ml_kit
的TextRecognizer
对选择的图像进行文本识别。识别结果存储在_recognizedText
字符串中。 -
UI展示:UI部分展示了选择的图像和识别的文本。
确保在Android和iOS项目中配置了必要的权限,以便能够访问相机和图库。在Android的AndroidManifest.xml
中添加相机和图库权限,同时在iOS的Info.plist
中添加相应的描述。
这个示例展示了如何使用google_ml_kit
进行基本的文本识别任务。根据需求,你可以进一步扩展这个示例来处理其他类型的机器学习任务,如物体检测、面部识别等。