You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Google-Ml-Kit-plugin中FaceDetector在iPhone相机场景下无法正常检测人脸的问题

解决iPhone相机照片ML Kit人脸检测返回空列表的问题

这个问题我之前在iOS开发时也碰到过,核心原因是iPhone相机拍摄的照片带有EXIF旋转信息,但默认的InputImage.fromFilePath没有正确解析这个方向,导致ML Kit实际上在检测一张旋转后的图片(比如人脸可能是倒置或侧转的),自然就检测不到人脸了。而图库选择的图片,image_picker通常已经自动处理了旋转,所以检测正常。

下面是具体的解决步骤:

1. 正确获取并设置图片的方向信息

使用image_picker返回的XFile的metadata来获取照片的EXIF方向,然后创建InputImage时明确指定这个方向:

final XFile? image = await picker.pickImage( 
  source: ImageSource.camera, 
  maxWidth: 300, 
  maxHeight: 300, 
  preferredCameraDevice: CameraDevice.front, 
); 

if (image != null) {
  // 获取图片元数据,包含EXIF方向信息
  final imageMetadata = await image.getMetadata();
  
  final FaceDetector faceDetector = FaceDetector( 
    options: FaceDetectorOptions( 
      enableTracking: false, // 单张照片检测不需要开启tracking,建议关闭
      enableContours: true, 
      enableClassification: true, 
      enableLandmarks: true, 
      performanceMode: FaceDetectorMode.accurate
  )); 

  // 创建带有正确方向信息的InputImage
  final inputImage = InputImage.fromFilePath(
    image.path,
    inputImageData: InputImageData(
      size: Size(
        image.width.toDouble(), 
        image.height.toDouble()
      ),
      // 根据EXIF方向设置InputImage的旋转角度
      imageRotation: InputImageRotationValue.fromRawValue(
        imageMetadata.exifOrientation!
      ) ?? InputImageRotation.rotation0deg,
      inputImageFormat: InputImageFormat.jpeg,
    ),
  ); 

  final List faces = await faceDetector.processImage(inputImage); 
  print(faces.length); // 现在应该能正常返回人脸数量了
}

2. 额外注意事项

  • 关闭enableTracking:如果你是检测单张照片,enableTracking: true完全没必要,这个参数是针对视频流中的人脸追踪设计的,单张检测开启可能会影响性能或干扰结果。
  • 更新image_picker插件:确保你使用的是最新版本的image_picker,旧版本在iOS上获取EXIF metadata可能存在bug。
  • 验证方向问题:可以把相机拍摄的照片保存到图库,再用ImageSource.gallery选择检测,如果能正常识别,就确认是方向解析问题导致的。

为什么图库的图片能正常检测?

当你从图库选择图片时,image_picker会自动根据EXIF信息调整图片的实际显示方向,传入ML Kit的图片已经是正确朝向的,自然能检测到人脸。而相机拍摄的原始图片没有经过这个调整,ML Kit默认按原始像素方向检测,就会出现检测失败的情况。

内容的提问来源于stack exchange,提问作者Angel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 17:34:04