Мой список<FirebaseVisionFace> лица всегда пуст
Я реализую библиотеку распознавания лиц MLKit с помощью простого приложения. Приложение представляет собой систему мониторинга лица, поэтому я настраиваю предварительный просмотр с фронтальной камеры и пытаюсь определить лицо. Я использую camera2Api. В моем ImageReader.onImageAvailableListener я хочу реализовать обнаружение лица с помощью firebase при каждом считывании изображения. После создания FirebaseVisionImage и запуска FirebaseVisionFaceDetector я получаю пустой список лиц, который должен содержать обнаруженные лица, но я всегда получаю лицо размером 0, даже если лицо находится на изображении.
Я пробовал другие формы создания моего FirebaseVisionImage. В настоящее время я создаю его с помощью byteArray, который я создал, следуя документам MlKit. Я также пытался создать FirebaseVisionImage, используя объект изображения Media.
private final ImageReader.OnImageAvailableListener onPreviewImageAvailableListener = new ImageReader.OnImageAvailableListener() {
/**Get Image convert to Byte Array **/
@Override
public void onImageAvailable(ImageReader reader) {
//Get latest image
Image mImage = reader.acquireNextImage();
if(mImage == null){
return;
}
else {
byte[] newImg = convertYUV420888ToNV21(mImage);
FirebaseApp.initializeApp(MonitoringFeedActivity.this);
FirebaseVisionFaceDetectorOptions highAccuracyOpts =
new FirebaseVisionFaceDetectorOptions.Builder()
.setPerformanceMode(FirebaseVisionFaceDetectorOptions.ACCURATE)
.setLandmarkMode(FirebaseVisionFaceDetectorOptions.ALL_LANDMARKS)
.setClassificationMode(FirebaseVisionFaceDetectorOptions.ALL_CLASSIFICATIONS)
.build();
int rotation = getRotationCompensation(frontCameraId,MonitoringFeedActivity.this, getApplicationContext() );
FirebaseVisionImageMetadata metadata = new FirebaseVisionImageMetadata.Builder()
.setWidth(480) // 480x360 is typically sufficient for
.setHeight(360) // image recognition
.setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_NV21)
.setRotation(rotation)
.build();
FirebaseVisionImage image = FirebaseVisionImage.fromByteArray(newImg, metadata);
FirebaseVisionFaceDetector detector = FirebaseVision.getInstance()
.getVisionFaceDetector(highAccuracyOpts);
Task<List<FirebaseVisionFace>> result =
detector.detectInImage(image)
.addOnSuccessListener(
new OnSuccessListener<List<FirebaseVisionFace>>() {
@Override
public void onSuccess(List<FirebaseVisionFace> faces) {
// Task completed successfully
if (faces.size() != 0) {
Log.i(TAG, String.valueOf(faces.get(0).getSmilingProbability()));
}
}
})
.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Task failed with an exception
// ...
}
});
mImage.close();
Цель состоит в том, чтобы результирующий список лиц содержал обнаруженные лица в каждом обработанном изображении.
0 ответов
byte[] newImg = convertYUV420888ToNV21(mImage); FirebaseVisionImage image = FirebaseVisionImage.fromByteArray(newImg, метаданные);
Эти две строки важны. убедитесь, что это создает правильный VisionImage.
Оформить заказ на мой проект для всех функций