简体   繁体   English

使用Google Mobile Vision FaceDetector在onPreviewFrame回调中检测人脸?

[英]Using Google Mobile Vision FaceDetector to detect face on onPreviewFrame callback?

I used com.google.android.gms.vision.face.FaceDetector to detect faces in the camera preview callback shown below: 我使用com.google.android.gms.vision.face.FaceDetector在如下所示的相机预览回调中检测面部:

faceDetector = new FaceDetector.Builder(this)
                .setTrackingEnabled(false)
                .setMode(FaceDetector.FAST_MODE)
                .setLandmarkType(FaceDetector.ALL_LANDMARKS)
                .build();

mCamera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {
    @Override
    public void onPreviewFrame(final byte[] data, Camera camera) {
        if (faceDetector.isOperational()) {
            int format = camera.getParameters().getPreviewFormat();
            int width = camera.getParameters().getPreviewSize().width;
            int height = camera.getParameters().getPreviewSize().height;

            Frame frame = new Frame.Builder().setImageData(ByteBuffer.wrap(data), width, height, format).build();
            SparseArray<Face> faces = faceDetector.detect(frame);
            Log.d("TEST", "Num faces = " + faces.size());
        }

        mSurfaceView.requestRender();

        camera.addCallbackBuffer(mImageBuffer);
    }
});

However, the output is always Num faces = 0 . 但是,输出始终为Num faces = 0 How can I fix this? 我怎样才能解决这个问题?

You made one mistake. 你犯了一个错误。 Your code must look like this: 您的代码必须如下所示:

faceDetector = new FaceDetector.Builder(this)
                .setTrackingEnabled(false)
                .setMode(FaceDetector.FAST_MODE)
                .setLandmarkType(FaceDetector.ALL_LANDMARKS)
                .build();

mCamera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {
    @Override
    public void onPreviewFrame(final byte[] data, Camera camera) {
        if(!faceDetector.isOperational()){
            Log.e("TEST", "Could not set up the face detector!");
        } else {
            int format = camera.getParameters().getPreviewFormat();
            int width = camera.getParameters().getPreviewSize().width;
            int height = camera.getParameters().getPreviewSize().height;

            Frame frame = new Frame.Builder().setImageData(ByteBuffer.wrap(data), width, height, format).build();
            SparseArray<Face> faces = faceDetector.detect(frame);
            Log.d("TEST", "Num faces = " + faces.size());
        }

        mSurfaceView.requestRender();

        camera.addCallbackBuffer(mImageBuffer);
    }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用FaceDetector Google-vision检测到脸部时拍照 - take picture when face detected using FaceDetector google-vision 无法在Android中使用FaceDetector检测到脸部 - Unable to detect face using FaceDetector in android 单元测试FaceDetector Google移动视觉java.lang.UnsupportedOperationException - unit testing FaceDetector Google mobile vision java.lang.UnsupportedOperationException 在单个CameraSource(Google Mobile Vision)中实现FaceDetector和TextRecognizer - Implement FaceDetector and TextRecognizer in single CameraSource (Google Mobile Vision) Google Mobile Vision:没有CameraSource的FaceDetector性能不佳 - Google Mobile Vision: Poor FaceDetector performance without CameraSource 如何使用谷歌视觉面部检测保存框架 - How to save a frame using google vision face detect java.lang.NoClassDefFoundError:无法解决以下问题:Lcom / google / android / gms / vision / face / FaceDetector; - java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/vision/face/FaceDetector; Google Vision Face检测需要很长时间 - Google Vision Face detect takes a long time 从Google Vision API和裁切脸部检测脸部 - detect face from google vision API and crop face 无法检测用于人脸检测的不同图像Mobile Vision API - Unable to detect different images for face detection Mobile Vision API
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM