从CameraSource裁剪面部

And*_*dro 6 android android-camera android-vision

我正在实施google-vision人脸跟踪器中给出的示例. MyFaceDetector类:

public class MyFaceDetector extends Detector<Face> {
    private Detector<Face> mDelegate;

    MyFaceDetector(Detector<Face> delegate) {
        mDelegate = delegate;
    }

    public SparseArray<Face> detect(Frame frame) {
        return mDelegate.detect(frame);
    }

    public boolean isOperational() {
        return mDelegate.isOperational();
    }

    public boolean setFocus(int id) {
        return mDelegate.setFocus(id);
    }

}
Run Code Online (Sandbox Code Playgroud)

FaceTrackerActivity 类:

private void createCameraSource() {

    imageView = (ImageView) findViewById(R.id.face);

    FaceDetector faceDetector = new FaceDetector.Builder(this).build();
    myFaceDetector = new MyFaceDetector(faceDetector);
    myFaceDetector.setProcessor(new MultiProcessor.Builder<>(new GraphicFaceTrackerFactory())
            .build());
    mCameraSource = new CameraSource.Builder(this, myFaceDetector)
            .setRequestedPreviewSize(640, 480)
            .setFacing(CameraSource.CAMERA_FACING_FRONT)
            .setRequestedFps(60.0f)
            .build();

    if (!myFaceDetector.isOperational()) {
        Log.w(TAG, "Face detector dependencies are not yet available.");
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要裁剪脸部并将其设置为开启ImageView.我无法Frame在这里实现自定义.frame.getBitmap()总是返回nulldetect(Frame frame).我该如何实现这一目标?

pm0*_*464 2

如果框架最初是从位图创建的,frame.getBitmap() 只会返回一个值。CameraSource 将图像信息作为 ByteBuffer 而不是位图提供,因此这是可用的图像信息。

frame.getGrayscaleImageData() 将返回图像数据。

frame.getMetadata() 将返回元数据,例如图像尺寸和图像格式。