Android 慢速人脸检测

Android 慢速人脸检测,android,multithreading,face-detection,Android,Multithreading,Face Detection,嗨,我的人脸检测线程运行得太慢了, 只有当线程不工作时,我才从onPreviewFrame调用此线程,否则我只跳过调用,在线程检测面之后,我在视图中调用onDraw来绘制矩形 public void run() { FaceDetector faceDetector = new FaceDetector(bitmapImg.getWidth(), bitmapImg.getHeight(), 1); numOfFacesDetected = faceDet

嗨,我的人脸检测线程运行得太慢了, 只有当线程不工作时,我才从onPreviewFrame调用此线程,否则我只跳过调用,在线程检测面之后,我在视图中调用onDraw来绘制矩形

    public void run() {
        FaceDetector faceDetector = new FaceDetector(bitmapImg.getWidth(), bitmapImg.getHeight(), 1);
        numOfFacesDetected = faceDetector.findFaces(bitmapImg, detectedFaces);

        if (numOfFacesDetected != 0) {
            detectedFaces.getMidPoint(eyesMidPoint);
            eyesDistance = detectedFaces.eyesDistance();

            handler.post(new Runnable() {
                public void run() {
                    mPrev.invalidate();
                    // turn off thread lock
                }
            });

            mPrev.setEyesDistance(eyesDistance);
            mPrev.setEyesMidPoint(eyesMidPoint);
        }

        isThreadWorking = false;
    }


public void onPreviewFrame(byte[] yuv, Camera camera) {
如果(正在工作) 返回

    isThreadWorking = true;
    ByteBuffer bbuffer = ByteBuffer.wrap(yuv);
    bbuffer.get(grayBuff_, 0, bufflen_);

    detectThread = new FaceDetectThread(handler);
    detectThread.setBuffer(grayBuff_);
    detectThread.start();

我的问题可能是因为我使用的是位图,而不是灰度,这花的时间太长了?如何提高速度?

FaceDetector API并不是真正用来在实时预览中处理帧的。这是一种放慢速度的方法


如果您运行的是全新设备,更好的选择是在Android 14+中使用API。它速度非常快,可用于在预览表面上创建覆盖层。YUV阵列首先具有亮度数据,这将允许您处理灰度图像。另请参阅新的Android人脸检测API,该API支持在实时预览中处理帧: