Dlib+OpenCV深度学习人脸识别

本文介绍了一个基于Dlib和OpenCV的人脸识别系统,通过预存的明星面部特征,实现实时摄像头人脸比对。系统加载人脸数据库,进行人脸检测、图像处理,然后利用深度学习模型进行人脸识别。在异常处理方面,通过try-catch结构处理可能出现的异常,确保程序稳定运行。
摘要由CSDN通过智能技术生成

目录(?)[+]

  1. DlibOpenCV深度学习人脸识别
  2. 前言
  3. 人脸数据库导入
  4. 人脸检测
  5. 人脸识别
  6. 异常处理
 

 

Dlib+OpenCV深度学习人脸识别

 

 

 

  1. 前言

人脸识别在LWF(Labeled Faces in the Wild)数据集上人脸识别率现在已经99.7%以上,这个识别率确实非常高了,但是真实的环境中的准确率有多少呢?我没有这方面的数据,但是可以确信的是真实环境中的识别率并没有那么乐观。现在虽然有一些商业应用如员工人脸识别管理系统、海关身份验证系统、甚至是银行人脸识别功能,但是我们可以仔细想想员工人脸识别管理,海关身份证系统的应用场景对身份的验证功能其实并没有商家吹嘘的那么重要,打个比方说员工上班的时候刷脸如果失败了会怎样,是不是重新识别一下,如果还是误识别,或是识别不出,是不是就干脆刷卡或是其他方式登记上班,然后骂一句他娘的,本人那么帅居然没识别出来!那银行柜员机上人脸识别系统呢,你看它敢不敢让你连密码也不输直接刷脸转账,是不是关掉了人脸识别、指纹识别机器还可以正常运作。所以说真实环境中在各种光照因素、年龄因素、网红因素(化妆)、甚至是作弊因素等各种因素条件下的识别率有多少只有产品厂家自己知道,我相信每个厂家针对这些情况都有做优化,比如外围硬件的辅助,针对特定场景的各种约束等等,通过各个厂家自己在各个方面对系统的优化,是可以提升自身产品的综合体验的。

前面扯远了,本文的目的是实现一个人脸识别的最简单实际应用,即用摄像头捕捉动态人脸,然后和已经存储在数据库中的128D人脸特征进行比较识别出相应的人脸信息(名字等)。工程是基于VS2015+简单的MFC对话框实现的,代码存放在:http://git.oschina.net/wjiang/face_recognition

在这个系统中我预先存储了下面几位明星的正面头像的128D人脸特征,当然你可以存储和导入更多的人脸。

然后经过人脸检测、人脸图像处理,和人脸识别等步骤识别出相应的人脸信息,识别效果如下(怕大家被丑到所以用了明星的图片,没有用真实的人脸 – 没有做活体检测):

 

 

当然这只是一个简单的应用,真正用到生产的系统,还需运用活体检测等技术,防止运用照片或是手机视频等方式欺骗过人脸识别系统,安全级别要求更高的应用领域例如支付、转账等系统活体检测可能仍不够安全,这时还可以通过人脸识别+验证密码等方式加强安全性能。

  1. 人脸数据库导入

人脸数据导入,也就是说我在系统启动之初,需要导入我的人脸数据库,也就是前面的那些明星的正面照。装载的开始阶段,因为要检测静态人脸图片的人脸部位,首先需要用dlib的人脸检测器,用get_frontal_face_detector()获得。然后需要将68点人脸标记模型导入shape_predictor sp,目的就是要对其人脸到一个标准的姿势,接着就是装载DNN模型。然后取每张人脸照片的特征,并将特征和姓名等相关的信息放入FACE_DESC结构中,最后将每张人脸信息结构放入face_desc_vec容器中,这里我只装载了9个明星的人脸信息。

 

  1. int FACE_RECOGNITION::load_db_faces(void)  
  2. {  
  3.     intrc = -1;  
  4.     longhFile = 0;  
  5.     struct_finddata_tfileinfo;  
  6.    
  7.     frontal_face_detectordetector =get_frontal_face_detector();  
  8.     // We will also use a face landmarking model to align faces to a standard pose: (see face_landmark_detection_ex.cpp for an introduction)  
  9.     deserialize("shape_predictor_68_face_landmarks.dat") >>sp;  
  10.    
  11.     // And finally we load the DNN responsible for face recognition.  
  12.     deserialize("dlib_face_recognition_resnet_model_v1.dat") >>net;  
  13.    
  14.     if ((hFile =_findfirst(".\\faces\\*.jpg", &fileinfo)) != -1)  
  15.     {  
  16.         do  
  17.         {  
  18.             if ((fileinfo.attrib &_A_ARCH))  
  19.             {  
  20.                 if (strcmp(fileinfo.name,".") != 0 && strcmp(fileinfo.name,"..") != 0)  
  21.                 {  
  22.                     if (!strcmp(strstr(fileinfo.name,".") + 1 , "jpg"))  
  23.                     {  
  24.                         cout <<"This file is an image file!" <<fileinfo.name <<endl;  
  25.                         matrix<rgb_pixel>img;  
  26.                         charpath[260];  
  27.                         sprintf_s(path,".\\faces\\%s",fileinfo.name);  
  28.                         load_image(img,path);  
  29.                         image_windowwin(img);  
  30.    
  31.                         for (autoface :detector(img))  
  32.                         {  
  33.                             autoshape =sp(img,face);  
  34.                             m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值