[英]How do i speed up face detection in OpenCV in Java
我正在嘗試制作一個實時面部檢測程序,以使用網絡攝像頭跟蹤房間中的面部。 但是,當我這樣做時,它每秒給我的幀不超過4幀(每267ms)。 我知道使用OpenCV的其他人使用TBB / OpenMP可以獲得的時間少於20毫秒。
我想每秒至少獲得10幀。 以下是我為加快流程執行的操作:
簡而言之,我的問題是:與其他代碼相比,我的代碼為什么這么慢? 我的代碼不使用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(Avans應用科學大學學生)
我不認為您的代碼沒有使用OpenMP或TBB。 要使用OpenMP,通常在循環之前添加“ #pragma omp ...”之類的內容。
就像是:
//#pragma omp parallel for private(j)
for(j = 0; j < _eyesVec.size(); j++ )
{
cv::rectangle(faceROIColor, Rect(_eyesVec[j].x,_eyesVec[j].y,_eyesVec[j].width,_eyesVec[j].height),
cv::Scalar(0,255,0),2,8,0);
}
您還必須確保使用的是啟用了OpenMP的opencv二進制文件(與WITH_OPENMP選項一起編譯)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.