Flutter机器学习插件google_ml_kit的使用

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

Flutter机器学习插件google_ml_kit的使用

Google’s ML Kit for Flutter

Pub Version analysis Star on Github License: MIT

Google’s ML Kit for Flutter 是一组Flutter插件,允许Flutter应用程序使用Google的独立ML Kit。

注意: google_ml_kit 是一个伞状插件,包含以下列出的所有功能。它将所有插件及其依赖项打包在一起,这会显著增加应用程序的大小。我们建议仅添加所需的特定功能插件,而不是在生产应用中使用 google_ml_kit

Features

Vision APIs

Feature Plugin Android iOS
Barcode Scanning google_mlkit_barcode_scanning
Face Detection google_mlkit_face_detection
Face Mesh Detection google_mlkit_face_mesh_detection
Text Recognition V2 google_mlkit_text_recognition
Image Labeling google_mlkit_image_labeling
Object Detection and Tracking google_mlkit_object_detection
Digital Ink Recognition google_mlkit_digital_ink_recognition
Pose Detection google_mlkit_pose_detection
Selfie Segmentation google_mlkit_selfie_segmentation
Subject Segmentation google_mlkit_subject_segemtation
Document Scanner google_mlkit_document_scanner

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 iosflutter 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

1 回复

更多关于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'),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

说明

  1. 依赖添加:我们在pubspec.yaml文件中添加了google_ml_kitimage_picker依赖。image_picker用于从相机或图库中选择图像。

  2. 选择图像_pickImage方法使用image_picker插件从相机或图库中选择图像。

  3. 文本识别_recognizeText方法使用google_ml_kitTextRecognizer对选择的图像进行文本识别。识别结果存储在_recognizedText字符串中。

  4. UI展示:UI部分展示了选择的图像和识别的文本。

确保在Android和iOS项目中配置了必要的权限,以便能够访问相机和图库。在Android的AndroidManifest.xml中添加相机和图库权限,同时在iOS的Info.plist中添加相应的描述。

这个示例展示了如何使用google_ml_kit进行基本的文本识别任务。根据需求,你可以进一步扩展这个示例来处理其他类型的机器学习任务,如物体检测、面部识别等。

回到顶部