使用google_ml_kit:^0.16.3的Flutter人脸检测报错修复求助
解决google_ml_kit 0.16.3版本人脸检测代码报错问题
报错原因及对应修正方案
- InputImageRotationMethods/InputImageFormatMethods未定义:0.16.x版本移除了这两个工具类,直接使用
InputImageRotation.fromRawValue()和InputImageFormat.fromRawValue()方法替代。 - InputImagePlaneMetadata/InputImageData无此方法:旧版本的
InputImageData在0.16.x中重命名为InputImageMetadata,确保正确导入google_ml_kit相关类即可。 - InputImage.fromBytes缺少必填参数metadata:该方法参数已从
inputImageData改为metadata,需传入InputImageMetadata类型对象。
修正后的_processCameraImage代码
import 'package:google_ml_kit/google_ml_kit.dart'; import 'dart:typed_data'; import 'dart:ui'; import 'package:camera/camera.dart'; Future<void> _processCameraImage(CameraImage image) async { final WriteBuffer allBytes = WriteBuffer(); for (Plane plane in image.planes) { allBytes.putUint8List(plane.bytes); } final Uint8List bytes = allBytes.done().buffer.asUint8List(); final Size imageSize = Size(image.width.toDouble(), image.height.toDouble()); // 替换旧工具类为InputImageRotation.fromRawValue final InputImageRotation imageRotation = InputImageRotation.fromRawValue( _cameraController!.description.sensorOrientation) ?? InputImageRotation.rotation0deg; // 替换旧工具类为InputImageFormat.fromRawValue final InputImageFormat inputImageFormat = InputImageFormat.fromRawValue(image.format.raw) ?? InputImageFormat.nv21; // 构造InputImagePlaneMetadata列表 final List<InputImagePlaneMetadata> planeData = image.planes.map( (Plane plane) { return InputImagePlaneMetadata( bytesPerRow: plane.bytesPerRow, height: plane.height, width: plane.width, ); }, ).toList(); // 使用新版本的InputImageMetadata替代旧的InputImageData final InputImageMetadata inputImageMetadata = InputImageMetadata( size: imageSize, rotation: imageRotation, format: inputImageFormat, planeData: planeData, ); // 传入metadata参数构建InputImage final InputImage inputImage = InputImage.fromBytes( bytes: bytes, metadata: inputImageMetadata, ); _detectFaces(inputImage); }
额外注意事项
- 确保
_cameraController已完成初始化并获取到有效相机实例。 - 确认
_detectFaces方法已正确实现,能够接收InputImage参数并执行人脸检测逻辑。
内容的提问来源于stack exchange,提问作者Aymen Boureghda
相关产品推荐
相关产品推荐

