Android FaceDetector.findFaces 100%CPU时间

时间:2013-05-17 13:08:04

标签: android graphics bitmap face-detection

我有这个简单的功能

private PointF getFaceCenter(Bitmap faceBitmap){
        PointF faceCenter = new PointF(faceBitmap.getWidth() / 2, faceBitmap.getHeight() / 2);

        Face[] faces = new Face[1];
        mFaceDetector = new FaceDetector(
                faceBitmap.getWidth(), faceBitmap.getHeight(), 1);
        int detected = mFaceDetector.findFaces(faceBitmap, faces);

        if (detected > 0) {
            faces[0].getMidPoint(faceCenter);
        }

        return faceCenter;
    }

我用它来获得面部中心所以我可以知道在哪里画我的照片。我注意到我的UI线程在重新绘制时总是卡住..

所以我把这个计算放在onMeasure上,但每次onMeasure调用的UI都变得很慢..

我开始分析:

DDMS Profiling

我看到mFaceDetector.findFaces需要100%的CPU时间!! 我删除了面部检测代码,我的应用程序开始超级快速运行。

我做错了什么?

有任何解决方法吗?

1 个答案:

答案 0 :(得分:1)

你在主线程上这样做。与处理UI事件的线程相同。 这就是UI阻止的原因。尝试使用传递线程进行计算。 (参见AsyncTask android文档)

至于cpu使用 - 它必须处理大量数据(特别是如果你有10MPics相机:))所以这是正常的。

下一个陷阱是当前的实现仅适用于RGB_565(同样是android文档)所以可能值得检查位图配置

编辑:

我刚刚在Galaxy S3上检查了这一点 - 对于后置摄像头制作的照片,需要花费16秒来分析图片。