我有这个简单的功能

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上,但是每次称为UI的onMeasure仍然很慢。

我开始分析:



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

我做错了什么吗?

任何解决方法?

最佳答案

您正在主线程上执行此操作。与处理UI事件相同的线程。
这就是UI阻塞的原因。尝试使用不同的线程进行计算。 (请参阅AsyncTask android文档)

至于cpu的使用-它必须处理大量数据(特别是如果您有10MPics摄像头:)),所以这很正常。

下一个陷阱是当前实现仅适用于RGB_565(再次针对android docs),因此可能值得检查位图配置

编辑:

我刚刚在Galaxy S3上进行了检查-对于后置摄像头拍摄的图片,分析图片需要大约16秒的时间。

10-01 09:52