1

我得到了这个简单的功能

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 分析

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

有什么我做错了吗?

任何解决方法?

4

1 回答 1

1

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

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

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

编辑:

我刚刚在 Galaxy S3 上检查了这一点 - 对于后置摄像头拍摄的照片,分析照片大约需要 16 秒。

于 2013-07-03T15:42:58.347 回答