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

Android 13下基于Google ML Kit的人脸识别功能失效问题求助

排查建议与代码问题分析

核心排查方向

  • 权限验证
    Android 13 对权限管控更严格,需确认:

    • AndroidManifest.xml 中已声明 <uses-permission android:name="android.permission.CAMERA" />
    • 动态权限申请逻辑覆盖 Android 13 规则(targetSdkVersion 33+ 时,相机权限仍需主动申请,且需确保用户已授权)
  • 图像格式与元数据匹配
    代码中硬编码 InputImageFormat.yuv420,但 Android 13 设备相机可能输出非标准 YUV 格式(如 yuv420_888 变种)。可通过打印 image.format 确认实际格式,再对应调整 InputImageFormat 参数。
    另外,bytesPerRow 参数需确保是 Y 平面的实际字节行长度(即 image.planes[0].bytesPerRow),部分 Android 13 设备的字节行对齐规则与 Android 10 不同,错误取值会导致图像解析错乱。

  • 旋转参数准确性
    检查 _cameraService.cameraRotation 的取值是否正确。Android 13 上相机传感器方向的处理逻辑可能有变化,可对比 Android 10/13 设备的旋转参数输出,确认是否因旋转角度错误导致 ML Kit 识别的图像方向偏移,进而无法检测人脸。

  • ML Kit 版本兼容性
    确认使用的 ML Kit 依赖为最新版本(如 Flutter 项目的 google_mlkit_face_detection),旧版本可能存在 Android 13 适配缺陷。

代码优化建议

你当前手动拼接图像字节的逻辑容易因设备差异出错,推荐直接使用 ML Kit 提供的 fromCameraImage 方法,自动处理图像格式、旋转和字节顺序:

Future<void> detectFacesFromImage(CameraImage image) async {
    final InputImageRotation imageRotation = _cameraService.cameraRotation ?? InputImageRotation.rotation0deg;
    // 直接从 CameraImage 创建 InputImage,避免手动拼接字节的错误
    final InputImage inputImage = InputImage.fromCameraImage(image, imageRotation);

    _faces = await _faceDetector.processImage(inputImage);
}

若必须保留手动拼接逻辑,需额外验证:

  1. 确认相机输出的 YUV 平面顺序(Y、U、V 或 Y、V、U),不同设备顺序可能不同
  2. 图像宽高是否与实际显示一致(部分竖屏设备会交换 CameraImage 的 width/height)

调试技巧

  • 在 Android 13 设备上打印 _faces.length,确认检测结果是否为空
  • 输出输入图像的元数据(宽高、旋转角度、格式),对比 Android 10 设备的参数差异
  • 用静态图片测试 ML Kit 人脸检测功能,排除相机流处理之外的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:05:18