簡體   English   中英

android自定義facedetector捕獲幀僅在檢測到面部時

[英]android custom facedetector capture frame only if face is detected

我正在使用新的視覺API來檢測相機流中的面部。 如果檢測到新面孔,我將通過自定義FaceDetector類捕獲圖像(如該線程中所述: Mobile Vision API-連接新的檢測器對象以繼續進行幀處理

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

我的問題是,每次檢測函數被調用時,這都會創建一個位圖。 這不僅是在識別出新面孔時。 就我而言,這是不需要的,它將使用不必要的資源,我希望避免這些資源。

有什么方法可以更改此設置,以便僅在檢測到面部時才創建位圖?

我將使用相同的方法,但不確定使用的代碼是否正確:

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

您在其中寫了什么:/ *在此處包括處理器* /? 提前致謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM