我有这个简单的功能
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都变得很慢..
我开始分析:
我看到mFaceDetector.findFaces
需要100%的CPU时间!!
我删除了面部检测代码,我的应用程序开始超级快速运行。
我做错了什么?
有任何解决方法吗?
答案 0 :(得分:1)
你在主线程上这样做。与处理UI事件的线程相同。 这就是UI阻止的原因。尝试使用传递线程进行计算。 (参见AsyncTask android文档)
至于cpu使用 - 它必须处理大量数据(特别是如果你有10MPics相机:))所以这是正常的。
下一个陷阱是当前的实现仅适用于RGB_565(同样是android文档)所以可能值得检查位图配置
编辑:
我刚刚在Galaxy S3上检查了这一点 - 对于后置摄像头制作的照片,需要花费16秒来分析图片。