Gon*_*dil 4 c++ opencv webcam-capture dlib
我正在开发一个C++程序,该程序应该检测来自网络摄像头流的面部,而不是使用面部标记裁剪它们并交换它们.
我使用OpenCV和Viola-Jones人脸检测编程了人脸检测.工作良好.比我搜索如何从ROI分割面部.我尝试了很少的皮肤检测实现,但没有一个成功.
比我发现dlib面临的地标.我决定尝试一下.刚开始时我遇到了问题,因为我必须转换cv::Mat为cv_image,Rect转矩形等等.所以我试着用dlib做.我只是使用流cv::VideoCapture而不是我想显示使用dlib捕获的内容image_window.但这是问题,它是reeeealy慢.Down是使用代码.注释行是使用OpenCV执行相同操作的行.OpenCV比没有评论的代码更快,更平滑,更连续,低于5 FPS.那太糟了.我无法想象当我应用面部检测和面部地标时会有多慢.
难道我做错了什么?我怎样才能让它更快?或者我应该使用OpenCV进行视频捕获和显示?
cv::VideoCapture cap;
image_window output_frame;
if (!cap.open(0))
{
cout << "ERROR: Opening video device 0 FAILED." << endl;
return -1;
}
cv::Mat cap_frame;
//HWND hwnd;
do
{
cap >> cap_frame;
if (!cap_frame.empty())
{
cv_image<bgr_pixel> dlib_frame(cap_frame);
output_frame.set_image(dlib_frame);
//cv::imshow("output",dlib::toMat(dlib_frame));
}
//if (27 == char(cv::waitKey(10)))
//{
// return 0;
//}
//hwnd = FindWindowA(NULL, "output");
} while(!output_frame.is_closed())//while (hwnd != NULL);
Run Code Online (Sandbox Code Playgroud)
编辑: 切换到释放模式后显示捕获的帧变得正常.但我继续尝试使用dlib进行面部检测和形状预测,就像这里的示例http://dlib.net/face_landmark_detection_ex.cpp.html一样.这是相当迟钝的.所以我关闭了形状预测.仍然"滞后.
所以我假设面部检测正在减慢速度.所以我尝试使用OpenCV进行面部检测,因为它明显优于dlib检测器.我需要将检测到的cv :: Rect转换为dlib :: rectangle.我用过这个.
std::vector<dlib::rectangle> dlib_rois;
long l, t, r, b;
for (int i = cv_rois.size() - 1; i >= 0; i--)
{
l = cv_rois[i].x;
t = cv_rois[i].y;
r = cv_rois[i].x + cv_rois[i].width;
b = cv_rois[i].y + cv_rois[i].height;
dlib_rois.push_back(dlib::rectangle(l, t, r, b));
}
Run Code Online (Sandbox Code Playgroud)
但OpenCV人脸检测和dlib形状预测的这种组合变得残酷滞后.处理单帧需要大约4秒.
我无法弄清楚为什么.OpenCV人脸检测绝对精细,dlib形状预测似乎并不难处理.有人可以帮助我吗?
Eze*_*ian 13
在假设Dlib运行缓慢之前,您可以采取多种措施使Dlib运行得更快.您只需阅读更多文档并尝试.
Dlib能够在非常小的区域(80x80像素)中检测面部.您可能以大约1280x720的分辨率发送原始WebCam帧,这是不必要的.根据我的经验,我建议将帧减少大约原始分辨率的四分之一.是的,320x180适用于Dlib.结果你将获得4倍的速度.
正如评论中所提到的,通过在构建Dlib时启用编译优化,您将获得显着的速度提升.
Dlib可以更快地处理灰度图像.您不需要网络摄像头框架上的颜色.您可以使用OpenCV将之前缩小的帧大小转换为灰度.
Dlib花时间寻找面孔但是在面部非常快速地找到地标.只有当您的网络摄像头提供高帧率(24-30fps)时,您才可以跳过一些帧,因为脸部通常不会移动太多.
鉴于优化,我相信你的检测速度至少要快12倍.
| 归档时间: |
|
| 查看次数: |
6357 次 |
| 最近记录: |