如何在Java中的OpenCV中加速人脸检测

如何在Java中的OpenCV中加速人脸检测,java,performance,opencv,face-detection,Java,Performance,Opencv,Face Detection,我想做一个实时人脸检测程序,用摄像头在房间里跟踪人脸。然而,当我这样做时,它不会给我超过每秒4帧(每267ms)。我知道其他使用OpenCV的人可以得到我不认为您的代码没有使用OpenMP或TBB。要使用OpenMP,您通常会在循环之前添加类似“#pragma omp…”的内容 比如: //#pragma omp parallel for private(j) for(j = 0; j < _eyesVec.size(); j++ ) { cv::rectangle(faceROI

我想做一个实时人脸检测程序,用摄像头在房间里跟踪人脸。然而,当我这样做时,它不会给我超过每秒4帧(每267ms)。我知道其他使用OpenCV的人可以得到我不认为您的代码没有使用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);
}
/#pragma omp parallel for private(j)
对于(j=0;j<_eyesVec.size();j++)
{
cv::矩形(面色,矩形(_-eyesVec[j].x,_-eyesVec[j].y,_-eyesVec[j].width,_-eyesVec[j].height),
cv::标量(0255,0),2,8,0);
}

您还必须确保使用OpenMP启用的OpenCV二进制文件(用WOR-OpenMP选项编译)

切换到C++(?);除了笑话,任何“严肃”的密集处理任务都不会像java C++那样快,你可以尝试只在子图像上计算面部检测:首先找到人脸可能的区域(例如背景减法),然后只在这些区域上计算面部检测。
//#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);
}