我有这个简单的功能
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秒的时间。