Flutter ML Kit如何使用

我在Flutter项目中想集成Google的ML Kit,但不太清楚具体步骤。请问如何正确添加依赖并配置ML Kit?是否需要额外安装NDK或其他工具?官方文档提到的核心功能(如文字识别、人脸检测)在Flutter中该如何调用?有没有完整的示例代码可以参考?另外,这个插件在iOS和Android上的兼容性如何?

2 回复

Flutter ML Kit 通过 google_ml_kit 插件使用。安装后,导入包并调用相应 API,如文本识别、人脸检测等。支持图像和实时摄像头输入,需配置 Android 和 iOS 权限。

更多关于Flutter ML Kit如何使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


Flutter ML Kit 主要通过 google_ml_kit 这个第三方包实现,它封装了原生 Android 和 iOS 的 ML Kit 功能。以下是基本使用方法:

1. 安装配置

pubspec.yaml 中添加依赖:

dependencies:
  google_ml_kit: ^x.x.x

iOS 需要在 Info.plist 中添加相机权限:

<key>NSCameraUsageDescription</key>
<string>需要相机权限进行图像识别</string>

2. 常用功能示例

文本识别

import 'package:google_ml_kit/google_ml_kit.dart';

final textRecognizer = TextRecognizer();
final inputImage = InputImage.fromFilePath(imagePath);

try {
  final recognisedText = await textRecognizer.processImage(inputImage);
  String text = recognisedText.text;
  print('识别结果: $text');
} finally {
  textRecognizer.close();
}

人脸检测

final faceDetector = FaceDetector(
  options: FaceDetectorOptions(
    enableContours: true,
    enableLandmarks: true,
  )
);

final faces = await faceDetector.processImage(inputImage);
for (Face face in faces) {
  print('检测到人脸: ${face.boundingBox}');
}

条码扫描

final barcodeScanner = BarcodeScanner();
final barcodes = await barcodeScanner.processImage(inputImage);

for (Barcode barcode in barcodes) {
  print('条码内容: ${barcode.displayValue}');
}

3. 使用相机实时检测

结合 camera 包实现实时检测:

import 'package:camera/camera.dart';

// 初始化相机
final cameras = await availableCameras();
final cameraController = CameraController(
  cameras[0],
  ResolutionPreset.medium,
);

// 处理每一帧
cameraController.startImageStream((CameraImage image) async {
  final inputImage = InputImage.fromBytes(
    bytes: image.planes[0].bytes,
    inputImageData: InputImageData(
      size: Size(image.width.toDouble(), image.height.toDouble()),
      imageRotation: InputImageRotation.rotation0deg,
      format: InputImageFormat.nv21,
      planeData: image.planes.map((plane) {
        return InputImagePlaneMetadata(
          bytesPerRow: plane.bytesPerRow,
          height: plane.height,
          width: plane.width,
        );
      }).toList(),
    ),
  );
  
  // 进行识别处理
  final text = await textRecognizer.processImage(inputImage);
});

注意事项

  • 不同功能需要不同的模型,首次使用会自动下载
  • 考虑性能影响,及时关闭检测器
  • 测试不同设备的兼容性
  • 处理权限请求和用户拒绝的情况

建议查看官方文档获取最新 API 和完整功能列表。

回到顶部