【问题标题】:slow face detection android慢人脸检测android
【发布时间】:2011-10-26 13:53:27
【问题描述】:

您好,我的面部检测线程工作太慢, 仅当线程不工作时,我才从 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) {

if (isThreadWorking) 返回;

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

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

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

【问题讨论】:

  • YUV 数组首先包含亮度数据,这将使您可以处理灰度图像。

标签: android multithreading face-detection


【解决方案1】:

FaceDetector API 并非真正用于处理实时预览中的帧。这是慢下来的方式。

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

【讨论】:

猜你喜欢
  • 2013-09-24
  • 1970-01-01
  • 2018-10-30
  • 2019-02-27
  • 2012-03-23
  • 2013-12-28
  • 2019-11-18
  • 2012-04-04
  • 2012-03-05
相关资源
最近更新 更多