01 资源
OpenCV自带的DPM测试用例,opencv_contrib\modules\dpm\samples\cascade_detect_sequence.cpp。cascade_detect_sequence.cpp可以检测图像中的人物,用矩形标出。
该测试用例需要模型文件inriaperson.xml
opencv_contrib/modules/dpm/samples/data/inriaperson.xml
需要检测的图片集。这里图片文件使用dlib库的测试图片,不太合适,仅做代码通过性测试。
D:/git/dlib/examples/faces/2007_007763.jpg
D:/git/dlib/examples/faces/2008_001009.jpg
D:/git/dlib/examples/faces/2008_001322.jpg
D:/git/dlib/examples/faces/2008_002079.jpg
D:/git/dlib/examples/faces/2008_002470.jpg
D:/git/dlib/examples/faces/2008_002506.jpg
D:/git/dlib/examples/faces/2008_004176.jpg
D:/git/dlib/examples/faces/2008_007676.jpg
D:/git/dlib/examples/faces/2009_004587.jpg
files.txt文件自己编写,存放在D:/git/dlib/examples/faces目录下。
D:/git/dlib/examples/faces/files.txt
2007_007763.jpg
2008_001009.jpg
2008_001322.jpg
2008_002079.jpg
2008_002470.jpg
2008_002506.jpg
2008_004176.jpg
2008_007676.jpg
2009_004587.jpg
02 编译cascade_detect_sequence
参考opencv01 相对完整的编译opencv3.3.0 win版本,编译opencv3.3.0 vs2015版本。
修改cascade_detect_sequence.cpp中readImageLists函数;添加一句line.erase(line.find_last_not_of('\r') + 1);
,去除读取文件时,每行末尾的换行符。
static bool readImageLists( const string &file, vector<string> &imgFileList)
{
ifstream in(file.c_str(), ios::binary);
if (in.is_open())
{
while (in)
{
string line;
getline(in, line);
line.erase(line.find_last_not_of('\r') + 1); // 添加这句,去除读取行尾的换行符
imgFileList.push_back(line);
}
return true;
}
else
{
cerr << "Invalid image index file: " << file << endl;
return false;
}
}
生成文件:D:\git\opencv\build\v3.3.0\x64\bin\Debug\dpm-example-cascade_detect_sequence.exe
03 cascade_detect_sequence项目配置
设置cascade_detect_sequence项目为启动项。
# 如果路径中有空格,需要使用双引号
配置属性==>调试==>命令参数=../../../../../../opencv_contrib/modules/dpm/samples/data/inriaperson.xml D:/git/dlib/examples/faces
配置属性==>调试==>工作目录=$(OutDir)
04 运行结果
05 DPM使用摄像头实时监测的测试用例(cascade_detect_camera)
这个demo蛮好的,推荐研究下。
设置cascade_detect_camera项目为启动项。
# 如果路径中有空格,需要使用双引号
配置属性==>调试==>命令参数=../../../../../../opencv_contrib/modules/dpm/samples/data/inriaperson.xml
配置属性==>调试==>工作目录=$(OutDir)
测试时,任务距离摄像头稍微远些,让整个人全部进入摄像头视野,正面、45°角都能够识别出来。