Детектор лица Flutter Firebase ML никогда не завершается

Я использую пакет flutter Firebase ML Visionдля обнаружения лиц (плюс контуры) в моем приложении. В большинстве случаев это работает отлично. Однако, когда ему дается изображение неоптимального лица с плохим освещением, скрытого волосами, в шляпе, очках и т. Д., Он непрерывно обрабатывает изображение и никогда не завершает работу.

Я ищу возможное решение этого.

Мой код (где pickedImage это File содержащий изображение с камеры устройства или галереи устройств):

 Future _processImage() async {

   //detector options
   FaceDetectorOptions options = FaceDetectorOptions(
       enableContours: true,
       enableLandmarks: true,
       mode: FaceDetectorMode.accurate);

   //vison object
   FirebaseVisionImage visionImage = FirebaseVisionImage.fromFile(pickedImage);
   //Face detector object
   FaceDetector faceDetector = FirebaseVision.instance.faceDetector(options);

   List<Face> faces = await faceDetector.processImage(visionImage);

   print('facedector completed');

   }

Если изображение хорошее, оно печатается, если изображение является чем-то совершенно случайным (без лиц), оно печатается, однако, если изображение является лицом, но с некоторым несоответствием, оно никогда не печатается и просто ожидает в processImage().

Мое решение заключалось в том, чтобы добавить тайм-аут для processImage() следующим образом:

Future _processImage() async {

   //detector options
   FaceDetectorOptions options = FaceDetectorOptions(
       enableContours: true,
       enableLandmarks: true,
       mode: FaceDetectorMode.accurate);

   //vison object
   FirebaseVisionImage visionImage = FirebaseVisionImage.fromFile(pickedImage);
   //Face dector object
   FaceDetector faceDetector = FirebaseVision.instance.faceDetector(options);

   try {

     //Get our faces from the image
     List<Face> faces = await faceDetector
         .processImage(visionImage)
         .timeout(Duration(seconds: 30));

     print('facedector completed');

   } on TimeoutException catch (exception) {
     print(exception.message);
     faceDetector.close();
   }
}

Однако это сработает, если я позвоню _processImage()снова, используя изображение, которое, как я знаю, работает, он будет продолжать анализ вечно, пока все приложение не будет закрыто и перезапущено. Я не совсем уверен, почему это происходит, но если кто-нибудь знает, как заставить это работать или какую-либо работу, я был бы очень благодарен.

0 ответов

Другие вопросы по тегам