【问题标题】:Using Google Mobile Vision FaceDetector to detect face on onPreviewFrame callback?使用 Google Mobile Vision FaceDetector 在 onPreviewFrame 回调上检测人脸?
【发布时间】:2018-03-24 00:43:47
【问题描述】:

我使用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。我该如何解决这个问题?

【问题讨论】:

    标签: android face-detection google-vision


    【解决方案1】:

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

    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);
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2017-07-30
      • 2014-08-09
      • 2017-11-29
      • 2017-12-24
      • 2012-11-29
      • 2021-11-10
      • 1970-01-01
      • 2017-07-01
      • 2019-08-04
      相关资源
      最近更新 更多