Детектор лица 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()
снова, используя изображение, которое, как я знаю, работает, он будет продолжать анализ вечно, пока все приложение не будет закрыто и перезапущено. Я не совсем уверен, почему это происходит, но если кто-нибудь знает, как заставить это работать или какую-либо работу, я был бы очень благодарен.