【发布时间】:2014-06-09 11:27:41
【问题描述】:
我正在尝试制作一个实时人脸检测程序,用于在带有网络摄像头的房间中跟踪人脸。但是,当我这样做时,它给我的速度不超过每秒 4 帧(每 267 毫秒)。我知道使用 OpenCV 的其他人使用 TBB/OpenMP 可以获得
我希望每秒至少获得 10 帧。以下是我已经采取的加快流程的措施:
- 我在图像的灰度上检测人脸。
- 我使用的比例因子为 1.1
- 我设置了最小值和最大值。
简而言之,我的问题是: 与其他代码相比,我的代码为什么这么慢?我的代码不使用 OpenMP 或 TBB 吗?我如何让我的代码使用它?在 java 中甚至可以使用 OpenMP 或 TBB 吗?
我在安装了 windows 的 2012 年末 MacBook(Core i7,4Gb RAM)上运行该程序。
这是我当前的代码:
public class FaceDetector {
CascadeClassifier faceDetector;
public FaceDetector(){
faceDetector = new CascadeClassifier(new File("haarcascade_frontalface_alt.xml").getPath());
}
/** Image will be overwritten by an image with detected faces on it **/
public Rect[] getFaces(Mat image){
MatOfRect faceDetections = new MatOfRect();
Mat mGray = image;
Imgproc.cvtColor(image, mGray, Imgproc.COLOR_RGBA2GRAY); // Convert to grayscale
faceDetector.detectMultiScale(image, faceDetections, 1.1, 2, 2,new Size(40, 40), new Size(400, 400));
for (Rect rect : faceDetections.toArray()) {
Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
new Scalar(0, 255, 0));
}
return faceDetections.toArray();
}
}
提前致谢!
Milan van Dijck(埃文斯应用科技大学学生)
【问题讨论】:
-
切换到 C++ ? ;-) 除了玩笑之外,Java 中任何“严重”的密集处理工作都不会像 C++ 那样快。
-
您可以尝试仅在子图像上计算人脸检测:首先找到可能存在人脸的区域(例如,使用背景减法),然后仅在这些区域上计算人脸检测。
标签: java performance opencv face-detection