C++ dlib实现人脸识别-精品文档资料整理.docx
《C++ dlib实现人脸识别-精品文档资料整理.docx》由会员分享,可在线阅读,更多相关《C++ dlib实现人脸识别-精品文档资料整理.docx(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+ dlib实现人脸识别void line_one_face_detections(cv:Mat img, std:vector dlib:full_object_detection fs) int i, j; for(j j fs.size(); j ) cv:Point p1, p2; for(i i i ) / 下巴到脸颊 0 16 /左边眉毛 17 21 /右边眉毛 21 26 /鼻梁 27 30 /鼻孔 31 35 /左眼 36 41 /右眼 42 47 /嘴唇外圈 48 59 /嘴唇内圈 59 67 switch(i) case 16: case 21: case 26: cas
2、e 30: case 35: case 41: case 47: case 59: break; default: break; p1.x fsj.part(i).x(); p1.y fsj.part(i).y(); p2.x fsj.part(i 1).x(); p2.y fsj.part(i 1).y(); cv:line(img, p1, p2, cv:Scalar(0,0,255), 1); 使用方式 在build建立faces文件夹 放入人名图像。 CMakeLists.txt 同理修改 会报错。 修改CMakeLists.txt 解决。 #链接库TARGET_LINK_LIBRAR
3、IES(dlib_detector2 dlib $OpenCV_LIBS -lpthread) 三、视频人脸识别并保存 image3.cpp #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
4、dlib/dnn.h #include dlib/data_io.h #include dlib/clustering.h #include dlib/string.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 #include string #include map #inc
5、lude sstream #ifdef _cplusplus extern C #endif #include stdlib.h #include string.h #include unistd.h #include dirent.h #ifdef _cplusplus #endif /由于dlib以及opencv中有相当一局部类同名 故不能同时对它们使用using namespace 否那么会出现一些莫名其妙的问题 /且dlib库以及标准std库中的类发生冲突 如map,string 类等等 using namespace std; using namespace cv; /using n
6、amespace dlib; void getFiles(std:string path, std:map std:string, std:string files); void line_one_face_detections(cv:Mat img, std:vector dlib:full_object_detection fs); /定义好一堆模板别名 以供后续方便使用 template template int,template typename class,int,typename class block, int N, template typename class BN, typ
7、ename SUBNET using residual dlib:add_prev1 block N,BN,1,dlib:tag1 SUBNET template template int,template typename class,int,typename class block, int N, template typename class BN, typename SUBNET using residual_down dlib:add_prev2 dlib:avg_pool 2,2,2,2,dlib:skip1 dlib:tag2 block N,BN,2,dlib:tag1 SUB
8、NET ; template int N, template typename class BN, int stride, typename SUBNET using block BN dlib:con N,3,3,1,1,dlib:relu BN dlib:con N,3,3,stride,stride,SUBNET template int N, typename SUBNET using ares dlib:relu residual block,N,dlib:affine,SUBNET ; template int N, typename SUBNET using ares_down
9、dlib:relu residual_down block,N,dlib:affine,SUBNET ; template typename SUBNET using alevel0 ares_down 256,SUBNET template typename SUBNET using alevel1 ares 256,ares 256,ares_down 256,SUBNET template typename SUBNET using alevel2 ares 128,ares 128,ares_down 128,SUBNET template typename SUBNET using
10、alevel3 ares 64,ares 64,ares 64,ares_down 64,SUBNET ; template typename SUBNET using alevel4 ares 32,ares 32,ares 32,SUBNET using anet_type dlib:loss_metric dlib:fc_no_bias 128,dlib:avg_pool_everything alevel0 alevel1 alevel2 alevel3 alevel4 dlib:max_pool 3,3,2,2,dlib:relu dlib:affine dlib:con 32,7,
11、7,2,2, dlib:input_rgb_image_sized 150 ; /* 识别视频中的某一帧图像中是不是有库里的某个人 方法 统计出库文件夹中所有人的图片的face_descriptors 然后计算出当前图片中的人脸face_descriptors 二者之间间隔 小于0.6那么视为同一个人 ./t11 hls_faces huanlesong.mp4 */ int main(int argc, char *argv) time_t start_t, end_t; if(argc ! 3) std:cout you should specified a dir and a video
12、 stream! std:endl; return 0; time( start_t); std:map string, string files; getFiles(argv1, files); if(files.empty() std:cout No pic files found in argv1 std:endl; return 0; /加载训练好的级联分类器 利用haar级联分类器快速找出人脸区域 然后交给dlib检测人脸部位 cv:CascadeClassifier faceDetector( haarcascade_frontalface_alt2.xml /cv:Cascade
13、Classifier faceDetector( ./output/cascade.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; /加载负责人脸识别的DNN anet_type net; dlib:deserialize( dlib_face_recognition_resnet_m
14、odel_v1.dat ) net; /人脸描绘符库, face_descriptor - name map dlib:matrix float,0,1 , string fdlib; for(map string, string :iterator it files.begin(); it ! files.end(); it ) std:cout filename: it- second filepath: it- first std:endl; cv:Mat frame cv:imread(it- first); cv:Mat src; cv:cvtColor(frame, src, CV
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ dlib实现人脸识别-精品文档资料整理 dlib 实现 识别 精品 文档 资料 整理
限制150内