Мой список<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.

Оформить заказ на мой проект для всех функций

MLKIT демо

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