android - 慢人脸检测android

标签 android multithreading face-detection

嗨,我的面部检测线程工作得太慢了, 只有当线程不工作时,我才从 onPreviewFrame 调用这个线程,否则我只是跳过调用,在线程检测到人脸后,我在 View 内调用 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) 返回;

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

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

我的问题可能是因为我使用的是位图而不是灰度图,所以花费的时间太长了?我怎样才能提高速度?

最佳答案

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

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

关于android - 慢人脸检测android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7053490/

相关文章:

android - 自定义 ListView 和 Adapter 以及 Listview 选择变得疯狂?

android - 如何在 Android 登录/注销中管理 session ?

java - 导入 com.amazonaws.services.dynamodbv2.document.DynamoDB;无法解析导入的文档部分

opencv - 使用 OpenCV 2.4.2 + Visual Studio 2012 + Windows 7(64 位)异常(exception)的人脸检测示例

android - Galaxy Nexus 人脸检测问题

android - 如何在android中调用setListAdapter

java - 同步 map 内的集合

python - 从服务器上运行的 python 线程将数据推送到远程客户端

c# - Form.show() 从另一个线程中的事件开始

c - C/C++ 中的鲁棒人脸检测?