android自定义facedetector捕获帧仅在检测到face时

问题描述 投票:0回答:1

我正在使用新的视觉api来检测相机流中的面部。如果检测到新面部我正在通过自定义FaceDetector类捕获图像(如此线程中所述:Mobile Vision API - concatenate new detector object to continue frame processing

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

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

    public SparseArray<Face> detect(Frame frame) {
        int width = frame.getMetadata().getWidth();
        int height = frame.getMetadata().getHeight();

        YuvImage yuvImage = new YuvImage(frame.getGrayscaleImageData().array(), ImageFormat.NV21, width, height, null);
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        yuvImage.compressToJpeg(new Rect(0, 0, width, height), 100, byteArrayOutputStream);
        byte[] jpegArray = byteArrayOutputStream.toByteArray();
        Bitmap bitmap = BitmapFactory.decodeByteArray(jpegArray, 0, jpegArray.length);
        GraphicHolder.faceImage = bitmap;

        return mDelegate.detect(frame);
    }

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

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

我遇到的问题是每次调用detect函数时都会创建一个位图。这不仅是在识别新面孔时。在我的情况下,这是不需要的,并将使用我想避免的不必要的资源。

有没有办法改变它,所以只有在检测到面部时才会创建一个位图?

java android vision google-vision
1个回答
0
投票

我会使用相同的方法,但我不确定我使用正确的代码:

FaceDetector faceDetector = new FaceDetector.Builder(context)
        .build();
MyFaceDetector myFaceDetector = new MyFaceDetector(faceDetector);

myFaceDetector.setProcessor(/* include your processor here */);

mCameraSource = new CameraSource.Builder(context, myFaceDetector)
        .build();

你在里面写了什么:/ *包括你的处理器* /?提前致谢

© www.soinside.com 2019 - 2024. All rights reserved.