在Firebase ml视觉颤动中,Face对象的属性始终为null

时间:2019-03-14 08:12:58

标签: firebase dart flutter firebase-mlkit mlvision

我遵循了README中关于人脸检测的所有说明,当我尝试访问face.leftEyeOpenProbabilityface.rightEyeOpenProbabilityface.smilingProbability之类的人脸属性时null,虽然检测到人脸

我尝试用两种方法来解决这个问题,
1.使用旧的firebase_ml_vision插件进行颤动(与AndroidX不兼容)
firebase_ml_vision: ^0.2.1,其中使用了功能detectInImage()

2.使用新的firebase_ml_vision插件(与AndroidX兼容)
firebase_ml_vision: ^0.6.0+2是使用processImage()函数的地方。

在这两种方法中,属性值均为空

这是使用最新插件检测人脸的代码段。

void _getImageAndDetectFace() async {
  final imageFile = await ImagePicker.pickImage(source: ImageSource.camera);
  final image = FirebaseVisionImage.fromFile(imageFile);
  final faceDetector = FirebaseVision.instance.faceDetector(FaceDetectorOptions(
    mode: FaceDetectorMode.accurate,
    enableLandmarks: true,
  ));
  final faces = await faceDetector.detectInImage(image); //this is not null
  setState(() {
    if (mounted) {
      _imageFile = imageFile;
      _faces = faces;
      for (Face face in faces) { //face is detected here, but...
        print('left eye : ${face.leftEyeOpenProbability}'); //prints null
        print('right eye : ${face.rightEyeOpenProbability}'); //prints null
        print('smiling : ${face.smilingProbability}'); //prints null
      }
    }
  });
}

请帮助我解决这个问题。

1 个答案:

答案 0 :(得分:0)

我有完全相同的错误。

阅读文档后,我在类FaceDetector中发现了变量enableClassification。 此变量的默认值为False。为了使用眼睛和微笑,必须启用此变量。

您的情况将是这样的:

     ... 
     final faceDetector = FirebaseVision.instance.faceDetector(FaceDetectorOptions(
        mode: FaceDetectorMode.accurate,
        enableLandmarks: true,
        enableClassification: true
        ));
    ...

希望这会有所帮助。