Атрибуты объекта Face всегда равны нулю в огненной базе.
Я следовал всем инструкциям этого README для распознавания лиц и когда я пытаюсь получить доступ к таким атрибутам лица, как face.leftEyeOpenProbability
, face.rightEyeOpenProbability
или же face.smilingProbability
это бросает меня в ноль, хотя лица обнаружены.
Я пытался подойти к этому двумя способами,
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 ответ
У меня точно такая же ошибка.
Прочитав документацию, я нашел в классе FaceDetector
переменная enableClassification
, Эта переменная имеет значение по умолчанию False. Для использования сглаживания глаз и улыбки необходимо включить эту переменную.
В вашем случае будет что-то вроде этого:
...
final faceDetector = FirebaseVision.instance.faceDetector(FaceDetectorOptions(
mode: FaceDetectorMode.accurate,
enableLandmarks: true,
enableClassification: true
));
...
Надеюсь это поможет.