【发布时间】:2015-02-20 06:20:55
【问题描述】:
我正在开发一个 android 项目,在该项目中我使用 OpenCV 从图库中的所有图像中检测人脸。从图像中获取人脸的过程在服务中执行。服务持续工作,直到处理完所有图像。它将检测到的人脸存储在内部存储中,如果活动打开,也会显示在网格视图中。
我的代码是:
CascadeClassifier mJavaDetector=null;
public void getFaces()
{
for (int i=0 ; i<size ; i++)
{
File file=new File(urls.get(i));
imagepath=urls.get(i);
defaultBitmap=BitmapFactory.decodeFile(file, bitmapFatoryOptions);
mJavaDetector = new CascadeClassifier(FaceDetector.class.getResource("lbpcascade_frontalface").getPath());
Mat image = new Mat (defaultBitmap.getWidth(), defaultBitmap.getHeight(), CvType.CV_8UC1);
Utils.bitmapToMat(defaultBitmap,image);
MatOfRect faceDetections = new MatOfRect();
try
{
mJavaDetector.detectMultiScale(image,faceDetections,1.1, 10, 0, new Size(20,20), new Size(image.width(), image.height()));
}
catch(Exception e)
{
e.printStackTrace();
}
if(faceDetections.toArray().length>0)
{
}
}
}
一切都很好,但是检测面孔非常慢。性能非常缓慢。当我调试代码时,我发现需要时间的行是:
mJavaDetector.detectMultiScale(image,faceDetections,1.1, 10, 0, new Size(20,20), new Size(image.width(), image.height()));
我已经检查了多个帖子来解决这个问题,但我没有得到任何解决方案。 请告诉我应该怎么做才能解决这个问题。
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
我会从减小 maxSize 开始。你真的需要整个图像吗?例如看看你自己的个人资料照片。
-
是的,我需要整张图片,因为可能有一张集体照片,可以在整张图片的任何地方找到人脸。如果我减小尺寸,那么它会丢失一些面孔。
-
还是单个检测的大小,iirc
-
我通过减小 maxSize 进行了检查,但性能没有提高。