繁体   English   中英

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

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

我使用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);
    }
});

但是,输出始终为Num faces = 0 我怎样才能解决这个问题?

你犯了一个错误。 您的代码必须如下所示:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM