本篇博客是在opencv联合dlib人脸检测例子的基础上改进了下,加快检测流程

观察了下,opencv利用haar级联分类器检测人脸区域的速度要稍快于dlib的frontal_face_detector检测人脸区域的速度。所以这篇博客是利用opencv先检测出人脸区域,然后交给dlib检测人脸各个部位,最后由opencv画出部位点。haar级联分类器是采用opencv自带训练好的分类器

缺点:opencv的haar级联分类器识别人脸区域的正确率以及检出率可能没有dlib高(这个测试不一定)
优点:haar级联分类器的检测速度较dlib的frontal_face_detector快些

下面给出源代码以及对应解释,各位同学可以测试一下代码,看看是不是比上一个人脸检测的例子快些

#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/image_processing/render_face_detections.h>
#include <dlib/image_processing.h>
#include <dlib/gui_widgets.h>
#include <dlib/image_io.h>
#include <dlib/opencv.h>#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>#include <iostream>
#include <vector>
#include <ctime>//由于dlib和opencv中有相当一部分类同名,故不能同时对它们使用using namespace,否则会出现一些莫名其妙的问题//using namespace dlib;
using namespace std;
//using namespace cv;void line_one_face_detections(cv::Mat img, std::vector<dlib::full_object_detection> fs)
{int i, j;for(j=0; j<fs.size(); j++){cv::Point p1, p2;for(i = 0; i<67; i++){// 下巴到脸颊 0 ~ 16//左边眉毛 17 ~ 21//右边眉毛 21 ~ 26//鼻梁     27 ~ 30//鼻孔        31 ~ 35//左眼        36 ~ 41//右眼        42 ~ 47//嘴唇外圈  48 ~ 59//嘴唇内圈  59 ~ 67switch(i){case 16:case 21:case 26:case 30:case 35:case 41:case 47:case 59:i++;break;default:break;}p1.x = fs[j].part(i).x();p1.y = fs[j].part(i).y();p2.x = fs[j].part(i+1).x();p2.y = fs[j].part(i+1).y();cv::line(img, p1, p2, cv::Scalar(0,0,255), 1);}}
}int main(int argc, char *argv[])
{time_t start_t, end_t;if(argc != 2){std::cout<< "you should specified a picture!"<<std::endl;return 0;}cv::Mat frame = cv::imread(argv[1]);cv::Mat src;cv::imshow("srcframe", frame);//提取灰度图cv::cvtColor(frame, src, CV_BGR2GRAY);//Mat转化为dlib的matrixdlib::array2d<dlib::bgr_pixel> dimg;dlib::assign_image(dimg, dlib::cv_image<uchar>(src)); //加载训练好的级联分类器,利用haar级联分类器快速找出人脸区域,然后交给dlib检测人脸部位cv::CascadeClassifier faceDetector("haarcascade_frontalface_alt2.xml");if(faceDetector.empty()){std::cout << "face detector is empty!" <<std::endl;return 0;}//加载人脸形状探测器dlib::shape_predictor sp;dlib::deserialize("./shape_predictor_68_face_landmarks.dat") >> sp;//haar级联分类器探测人脸区域,获取一系列人脸所在区域std::vector<cv::Rect> objects;std::vector<dlib::rectangle> dets;faceDetector.detectMultiScale(src, objects);for (int i = 0; i < objects.size(); i++){cv::rectangle(frame, objects[i], CV_RGB(200,0,0));dlib::rectangle r(objects[i].x, objects[i].y, objects[i].x + objects[i].width, objects[i].y + objects[i].height);dets.push_back(r);}if (dets.size() == 0)return 0;//获取人脸68个特征点部位分布std::vector<dlib::full_object_detection> shapes;for(int i = 0; i < dets.size(); i++){dlib::full_object_detection shape = sp(dimg, dets[i]); shapes.push_back(shape); }line_one_face_detections(frame, shapes);cv::imshow("frame", frame);cv::waitKey(0);return 0;
}

效果:

在检测这张图片的情况下,上一个人脸检测的例子不仅速度上慢,人脸区域检出率也较低,下面是上一个人脸检测的例子检测的效果,童鞋们自己试试

opencv联合dlib人脸检测例子二(加快检测)相关推荐

  1. opencv联合dlib视频人脸识别例子

    本篇文章是在上一篇文章opencv联合dlib人脸识别例子 的基础上做了一个实时视频人脸识别功能. 原理是利用opencv实时提取视频中的视频流,然后进入人脸检测步骤,步骤类似上篇文章. 本篇文章中的 ...

  2. OpenCV vs Dlib 人脸检测比较分析

    点击我爱计算机视觉标星,更快获取CVML新技术 人脸检测是计算机视觉最典型的应用之一,早期OpenCV的logo就是Haar人脸检测的示意图. 很多人的第一个OpenCV学习目标就是跑通Haar级联人 ...

  3. 使用 Python +OpenCV+Deepface实现人脸、情感和种族检测

    我们使用 OpenCV.deepface 库和 haarcascade_frontalface_default.xml 文件来检测图像中的人脸.面部表情和人种. 从 https://unsplash. ...

  4. opencv python考勤_基于opencv和dlib人脸识别的员工考勤系统

    已打包生成可执行文件exe,可直接下载运行,exe文件及代码均已上传到我的github,点击传送门,打包的具体过程及教程可见pyinstaller简明教程 WorkAttendanceSystem 一 ...

  5. 人脸识别系统——Dlib人脸检测

    EduCoder平台:人脸识别系统--Dlib人脸检测 第1关:HOG特征描述方法 编程要求: 请在右侧编辑器中的BEGIN-END之间编写代码,完成如下要求: 声明OpenCV中的HOG特征描述方法 ...

  6. Opencv与dlib联合进行人脸关键点检测与识别

    前言 依赖库:opencv 2.4.9 /dlib 19.0/libfacedetection 本篇不记录如何配置,重点在实现上.使用libfacedetection实现人脸区域检测,联合dlib标记 ...

  7. 人脸识别系列二 | FisherFace,LBPH算法及Dlib人脸检测

    前言 前面介绍了使用特征脸法进行人脸识别,这里介绍一下OpenCV人脸识别的另外两种算法,一种是FisherFace算法,一种是LBPH算法. FisherFace算法 FisherFace是基于线性 ...

  8. [Python图像处理] 二十八.OpenCV快速实现人脸检测及视频中的人脸

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  9. python dlib人脸检测_使用Python+OpenCV+Dlib实现人脸检测与人脸特征关键点识别

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 今天,我们将学习如何检测图像中的人脸并提取面部特征,如眼睛.鼻子. ...

最新文章

  1. 浏览器中Javascript的加载和执行
  2. 推荐一套开源通用后台管理系统(附源码)
  3. C#中的delegate的 Invoke 、BeginInvoke的区别
  4. angularjs 缓存详解
  5. 百练4148:生理周期
  6. how to render AET extension field as code list
  7. 前端学习(1955)vue之电商管理系统电商系统之完成添加分类功能
  8. CVE-2013-3346Adobe Reader和Acrobat 内存损坏漏洞分析
  9. python 直线过滤掉不在边缘上的点_不存在所谓的机器学习平台
  10. 脚本方式添加全文索引
  11. Illustrator2020中文版教程,如何在AI中使用蒙版来裁剪内容?
  12. Hi3518ev200使用HiTool下载程序
  13. jquery ajax提交form表单,jquery+ajax提交form表单方法总结
  14. QMT量化交易网格交易 源码
  15. 一树桃红,在生命的枝头葱茏
  16. 死亡时间推断MATLAB,AGU 本周精选文章:火星陨石坑;气候敏感性;水资源压力;洪水灾害建模...
  17. 乓乓响再次冲刺香港上市,黄建义、张卫平夫妇套现约2130万元
  18. python微软雅黑字体_win10+python3.7下matplotlib显示中文,可使用微软雅黑.md
  19. 宇宙只是一个幻象,世界是意识的投影
  20. 魔兽发信息给其他服务器的人,魔兽世界怎么跨服密人(魔兽怀旧服可以跨服组队吗)...

热门文章

  1. java的四种访问权限_Java四种访问权限
  2. 论文笔记-Understanding Convolution for Semantic Segmentation
  3. ubuntu上打开markdown文件
  4. php网站怎么给文件设置颜色,配置区块和文件颜色
  5. 自媒体娱乐热点素材怎么找?-即时热榜
  6. 解决YOLOv5算法中的中文标签显示问题
  7. 应用系统安全规范-自己想到和网络搜索到的点子记录整合一下
  8. 平板如何下载鸿蒙系统,鸿蒙系统2.0
  9. 信息化系统要如何选型?
  10. Ubuntu 16.04+CUDA8.0+Caffe+OpenCV3.1