簡體   English   中英

如何在Java中的OpenCV中加快人臉檢測

[英]How do i speed up face detection in OpenCV in Java

我正在嘗試制作一個實時面部檢測程序,以使用網絡攝像頭跟蹤房間中的面部。 但是,當我這樣做時,它每秒給我的幀不超過4幀(每267ms)。 我知道使用OpenCV的其他人使用TBB / OpenMP可以獲得的時間少於20毫秒。

我想每秒至少獲得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(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM