FirebaseMLVision не распознает лицо из CameraImage

#flutter #dart #firebase-mlkit

# #трепетание #dart #firebase-mlkit

Вопрос:

Я использую firebase_ml_vision для обнаружения лиц в потоке изображений с камеры. Для этого я использую

 controller.startImageStream((CameraImage image) => detectFace(image)))

void detectFace(CameraImage image) {
   final firebaseImage = FirebaseVisionImage.fromBytes(
    _concatenatePlanes(cameraImage.planes), // Convert from YUV_420_888 to NV21
    _buildMetaData(cameraImage, rotation),
  );
} 
 

_concatenatePlanes, _buildMetaData, _rotation взяты из примера плагина Flutter (ссылка).

Но, к сожалению, он не обнаруживает никакого подобного лица. Но если я сделаю снимок того же изображения с помощью опции камеры, а затем обнаружу на нем лицо, оно будет работать правильно. Я предполагаю, что есть какая-то проблема в преобразовании формата.

Что здесь может быть не так и как я могу это исправить?

Редактировать — я уже пробовал использовать разные значения для поворота и использовать еще одно устройство (пробовал только на обеих платформах Android).

— Спасибо

Ответ №1:

Существует некоторая проблема с последней версией плагина камеры. Когда я переключил его 0.5.8 1 , он работал гладко как с моим приложением, так и с примером.

Я направил запрос владельцам, чтобы определить причину и устранить ее в будущем — https://github.com/FirebaseExtended/flutterfire/issues/4549#issuecomment-753448995

Ответ №2:

Я столкнулся с теми же проблемами в своем проекте.

В моем случае я забыл установить модель лица, как описано в readme firebase_ml_vision:

iOS Если вы используете один из встроенных API-интерфейсов, включите соответствующую модель библиотеки ML Kit в свой Podfile. Затем запустите pod update в терминале в том же каталоге, что и ваш Podfile.

 pod 'Firebase/MLVisionBarcodeModel'
pod 'Firebase/MLVisionFaceModel'
pod 'Firebase/MLVisionLabelModel'
pod 'Firebase/MLVisionTextModel'
 

Android
Если вы используете распознавание контуров лица на устройстве, включите в свой файл build.gradle на уровне приложения новейший соответствующий ML Kit: зависимость модели распознавания лиц.

 android {
    dependencies {
        // ...

        api 'com.google.firebase:firebase-ml-vision-face-model:17.0.2'
    }
}
 

Я также нашел подключаемый модуль, в котором уже реализован весь шаблон, я только что попробовал и работает нормально flutter_camera_ml_vision:
https://pub.dev/packages/flutter_camera_ml_vision

И, если вам нужен код в классе, я также нашел этот проект, который также отлично работает (проект нуждается в обновлениях, но класс FaceDetection вы можете скопировать и вставить в свой проект, который очень похож на код, который у вас есть, это работает просто отлично: https://github.com/giandifra/Flutter-Smile-Face-Detection/blob/master/lib/face_detection_camera.dart