opencv联合dlib人脸检测例子二(加快检测)
本篇博客是在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人脸检测例子二(加快检测)相关推荐
- opencv联合dlib视频人脸识别例子
本篇文章是在上一篇文章opencv联合dlib人脸识别例子 的基础上做了一个实时视频人脸识别功能. 原理是利用opencv实时提取视频中的视频流,然后进入人脸检测步骤,步骤类似上篇文章. 本篇文章中的 ...
- OpenCV vs Dlib 人脸检测比较分析
点击我爱计算机视觉标星,更快获取CVML新技术 人脸检测是计算机视觉最典型的应用之一,早期OpenCV的logo就是Haar人脸检测的示意图. 很多人的第一个OpenCV学习目标就是跑通Haar级联人 ...
- 使用 Python +OpenCV+Deepface实现人脸、情感和种族检测
我们使用 OpenCV.deepface 库和 haarcascade_frontalface_default.xml 文件来检测图像中的人脸.面部表情和人种. 从 https://unsplash. ...
- opencv python考勤_基于opencv和dlib人脸识别的员工考勤系统
已打包生成可执行文件exe,可直接下载运行,exe文件及代码均已上传到我的github,点击传送门,打包的具体过程及教程可见pyinstaller简明教程 WorkAttendanceSystem 一 ...
- 人脸识别系统——Dlib人脸检测
EduCoder平台:人脸识别系统--Dlib人脸检测 第1关:HOG特征描述方法 编程要求: 请在右侧编辑器中的BEGIN-END之间编写代码,完成如下要求: 声明OpenCV中的HOG特征描述方法 ...
- Opencv与dlib联合进行人脸关键点检测与识别
前言 依赖库:opencv 2.4.9 /dlib 19.0/libfacedetection 本篇不记录如何配置,重点在实现上.使用libfacedetection实现人脸区域检测,联合dlib标记 ...
- 人脸识别系列二 | FisherFace,LBPH算法及Dlib人脸检测
前言 前面介绍了使用特征脸法进行人脸识别,这里介绍一下OpenCV人脸识别的另外两种算法,一种是FisherFace算法,一种是LBPH算法. FisherFace算法 FisherFace是基于线性 ...
- [Python图像处理] 二十八.OpenCV快速实现人脸检测及视频中的人脸
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- python dlib人脸检测_使用Python+OpenCV+Dlib实现人脸检测与人脸特征关键点识别
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 今天,我们将学习如何检测图像中的人脸并提取面部特征,如眼睛.鼻子. ...
最新文章
- 浏览器中Javascript的加载和执行
- 推荐一套开源通用后台管理系统(附源码)
- C#中的delegate的 Invoke 、BeginInvoke的区别
- angularjs 缓存详解
- 百练4148:生理周期
- how to render AET extension field as code list
- 前端学习(1955)vue之电商管理系统电商系统之完成添加分类功能
- CVE-2013-3346Adobe Reader和Acrobat 内存损坏漏洞分析
- python 直线过滤掉不在边缘上的点_不存在所谓的机器学习平台
- 脚本方式添加全文索引
- Illustrator2020中文版教程,如何在AI中使用蒙版来裁剪内容?
- Hi3518ev200使用HiTool下载程序
- jquery ajax提交form表单,jquery+ajax提交form表单方法总结
- QMT量化交易网格交易 源码
- 一树桃红,在生命的枝头葱茏
- 死亡时间推断MATLAB,AGU 本周精选文章:火星陨石坑;气候敏感性;水资源压力;洪水灾害建模...
- 乓乓响再次冲刺香港上市,黄建义、张卫平夫妇套现约2130万元
- python微软雅黑字体_win10+python3.7下matplotlib显示中文,可使用微软雅黑.md
- 宇宙只是一个幻象,世界是意识的投影
- 魔兽发信息给其他服务器的人,魔兽世界怎么跨服密人(魔兽怀旧服可以跨服组队吗)...
热门文章
- java的四种访问权限_Java四种访问权限
- 论文笔记-Understanding Convolution for Semantic Segmentation
- ubuntu上打开markdown文件
- php网站怎么给文件设置颜色,配置区块和文件颜色
- 自媒体娱乐热点素材怎么找?-即时热榜
- 解决YOLOv5算法中的中文标签显示问题
- 应用系统安全规范-自己想到和网络搜索到的点子记录整合一下
- 平板如何下载鸿蒙系统,鸿蒙系统2.0
- 信息化系统要如何选型?
- Ubuntu 16.04+CUDA8.0+Caffe+OpenCV3.1