Android上的面部识别速度较慢

3

嗨,我的人脸检测线程运行速度太慢了。我只在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();

我的问题可能是因为我正在使用位图而不是灰度图像,这导致速度太慢?我该如何提高速度?


YUV数组的第一个位置包含亮度数据,这将使您能够处理灰度图像。 - yeyeyerman
1个回答

1

FaceDetector API并不适合在实时预览中处理帧。它的速度太慢了。

如果您正在运行一个相当新的设备,更好的选择是使用Android 14+中的FaceDetectionListener API。它非常快速,并且可以用于在预览SurfaceHolder上创建叠加层。


请参阅新的Android人脸检测API,支持在实时预览中处理帧:https://developers.google.com/vision/ - pm0733464

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接