## 基于机器学习/深度学习框架 Dlib、OpenCV 库实现人脸签到系统。
实验平台:基于 Visual Studio2015,Cuda9。
本项目采用 MFC 基于 VC++/C++ 进行模块化设计。
### **主要功能如下:**
- 基于 Opencv,打开摄像头,实时图像采集功能。
- 实时人脸抓拍功能。
- 基于 Dlib 中的特征点标注模型实现,人脸检测功能。
- 基于 Dlib 中的特征点标注模型实现,人脸特征点标定功能。
- 基于 Dlib 中的特征点标注模型实现,人脸对齐功能。
- 基于 Resnet 实现人脸特征向量 embedding,并且实现人脸比对功能。
- 目标跟踪功能。
- 活体检测之眨眼识别功能。
- 活体检测之张嘴识别功能。
### 基本流程
##### 1,实时视频采集程序设计:(打开摄像头,关闭摄像头)
就是实时读取视频每一帧,再挂到左侧图像控件上面显示。
##### 2,实时图像抓拍程序设计:(抓拍人脸)
将 m_dst 全局变量的图片,存储在给定路径
再将其挂到右侧图像控件上显示
这里面有个坑,展示图像这个函数要重新定义
即定义了一个 ShowImage(pDC, picpath, 0, 0);是在社区找的
##### 3,人脸检测程序设计:(实时检测,人脸检测)
实时检测:基于实时视频流检测人脸
按钮事件就是保证 m_bdetect 标志一直打开
人脸检测:检测,并且画矩形框,按钮事件仅仅是标识符声明的 01 置换 ,如 m_detect 以及 m_brectangle;具体代码在打开摄像头里面,if(m_bdetect)
总体来讲就是读取每一帧,存到 cimg,再用 detector 检测,绘制矩形框,再显示出来。
##### 4,特征点标定程序设计:(特征点标定)
按钮事件只是控制了 m_bdetect 标识符
总体来讲:首先 m_capture 获得每一帧写入 frame,然后基于 68 个点的位姿模型(集成了检测与特征点标注)进行人脸检测,存到 face 对象里面(矩形),再将 68 个点存入到 shapes,然后对于 shapes 进行特征点绘制 cv::circle 并且打上序号 putText。
##### 5,实时特征点对齐程序设计:(人脸对齐)(将歪的人脸矫正)
两种实现方式:一种是单张图片对齐,一种是基于视频流实时对齐。
总的来说:读取抓拍到的图片,初始化环境即 68 个点的位姿模型,人脸检测,68 个特征点存入 shapes,特征点标定,再进行人脸对齐的操作,用 dlib::extract_image_chips 对齐,存在 face_chips 并且保存为图片,最后显示在控件上面。
##### 6,实时目标跟踪程序设计:(目标跟踪)
首先一个坑是实时目标跟踪,m_tracker,这个要为 public 全局变量,不能放在函数里,否则可能被释放掉,还有一个全局变量是一个窗口有 m_win。
按钮事件只是控制了 m_btrack 标识符
总的来说,标识位 m_track,首先开始跟踪,要确定第一帧当前的对象是谁,确定目标区域要跟踪的对象 centerd_rect,然后 m_tracker.update(cimg),最后显示在窗口 m_win 上面,更新 overlay 就是再绘制跟踪的矩形框。
程序调试时候,在打开摄像头代码里的目标跟踪代码,将 m_win 注释掉,并且在.h 文件里,将 m_win 设置为全局变量。
##### 7,实时人脸比对程序设计:(人脸比对)(一般阀值取 0.6???)
![](https://www.writebug.com/myres/static/uploads/2022/1/3/c6e91a85bafec2c1936f148d583751e9.writebug)
实时的按钮事件只是控制了 m_brecognition 标识符
离线比对,总的来说,第一步初始化检测器和图片,导入 68 特征点标注模型与人脸特征表达模型;第二步,读取两张图片(可以一张是视频流的,一张是人脸库的)并且显示;第三步,人脸对齐(综合第二步,第三步可以理解为用 “68 特征点模型”来人脸检测 + 对齐);第四步,用“resnet 模型”提取人脸特征;第五步,进行欧式距离计算,并显示在文本静态区及弹框显示,这里欧式距离为 0.25 可以理解为 75% 的相似度,工程上一般取 70% 就是同一个人。
##### 7,活体检测之眨眼识别:(眨眼检测)
按钮事件只是控制了 m_beye 标识符
总的来说,眨眼识别算法是根据 EAR 算法原理,即纵横比。公式就是
![](https://www.writebug.com/myres/static/uploads/2022/1/3/878eab542e8cc03ea85cb614a5902112.writebug)
- 第一步,取 shapes 的 37,38,40,41,36,39 六个点
- 第二步,计算纵横比
- 第三步,正则表达显示方式 str.format,再显示在静态文本区。
调试流程:打开摄像头-----特征点标定----眨眼识别
##### 9,活体检测之张嘴程序设计:(张嘴识别)
按钮事件只是控制了 m_bmouth 标识符
总的来说,眨眼识别算法是根据 EAR 算法原理,即纵横比。公式就是
![](https://www.writebug.com/myres/static/uploads/2022/1/3/4c00566d594f4ac70f59f72e5b6a5504.writebug)
- 第一步,取 shapes 的共计六个点,纵向:50,52,58,56,横向:48,54
- 第二步,计算纵横比
- 第三步,正则表达显示方式 str.format,再显示在静态文本区。
调试流程:打开摄像头-----特征点标定----张嘴识别
## 环境配置总结:
### 1.dlib
**编译 dlib**
- 新建 build
- cmake .. -G"Visual Studio 14 2015 Win64" -T host=x64(在 build 文件夹生成 vs 工程)
- cmake --build . --config Debug(编译,同时可编译 release 版本)
cmake --build . --config Release
- 新建一个 lib 文件夹,将 build 好的 dubug 与 release 的 lib 文件分别拷贝过来
![](https://www.writebug.com/myres/static/uploads/2022/1/3/9c2ba35d8cd95867579746a127db57a6.writebug)
在 build/x64 可以看到两个版本
其中模型文件在 [http://dlib.net/files/](http://dlib.net/files/)下载
### 2.创建工程
打开 vs2015
C++ MFC
基于对话框
### 3.vs 工程文件夹操作
**选 debug x64**
在资源文件/XXX.rc2/Dialog/DIALOG 文件
**工具箱 pin 下**
先拉一个 picture control 其中在杂项 ID 最重要
### 4.配置 cuda
**头文件配置**:在工程属性里面 vc++ 包含 cuda 的 include 目录
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include
C++ 预处理器:DLIB_USE_CUDA DLIB_HAVE_SSE2
**库文件配置**:
连接器---常规—附加库目录
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\x64
连接器---输入---附加依赖项 cuda.lib
### 5.opencv 配置
**头文件配置**: c++---常规-----包含 opencv 的 include 目录
**库文件配置**:
连接器---常规—附加库目录
D:\opencv3.2\build\x64\vc14\lib(vc14 就是 vs2015)
连接器---输入---附加依赖项 opencv_world341d.lib
### 6.dlib 配置
**头文件配置**: c++---常规----- D:\dlib19.17\dlib-19.17
C++ 预处理器:
DLIB_JPEG_SUPPORT
DLIB_PNG_SUPPORT
**库文件配置**:
连接器---常规—附加库目录
D:\dlib19.17\dlib-19.17\lib
连接器---输入---附加依赖项
dlib19.17.0_debug_64bit_msvc1900
dlib19.17.0_release_64bit_msvc1900
这里面注意,属性配置的时候注意是 debug 还是 release
全部:
![](https://www.writebug.com/myres/static/uploads/2022/1/3/6f462df1086fc465acda497050fbf6ad.writebug)
- _WINDOWS
- NDEBUG
- DLIB_JPEG_SUPPORT
- DLIB_HAVE_SSE2
- DLIB_USE_CUDA
- DLIB_PNG_SUPPORT
![](https://www.writebug.com/myres/static/uploads/2022/1/3/64b003cb280c610813962561aa699029.writebug)
- dlib19.16.0_release_64bit_msvc1900.lib
- cublas.lib
- cublas_device.lib
- cuda.lib
- cudadevrt.lib
- cudart.lib
- cudart_static.lib
- cudnn.lib
- cufft.lib
- cufftw.lib
- curand.lib
- cusolver.lib
- cusparse.lib
- nppc.lib
- nppial.lib
- nppicc.lib
- nppicom.lib
- nppidei.lib
- nppif.lib
- nppig.lib
- nppim.lib
- nppist.lib
- opencv_world341.lib
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
实验平台:基于 Visual Studio2015,Cuda9。 本项目采用 MFC 基于 VC++/C++ 进行模块化设计。 主要功能如下: 基于 Opencv,打开摄像头,实时图像采集功能。 实时人脸抓拍功能。 基于 Dlib 中的特征点标注模型实现,人脸检测功能。 基于 Dlib 中的特征点标注模型实现,人脸特征点标定功能。 基于 Dlib 中的特征点标注模型实现,人脸对齐功能。 基于 Resnet 实现人脸特征向量 embedding,并且实现人脸比对功能。 目标跟踪功能。 活体检测之眨眼识别功能。 活体检测之张嘴识别功能。
资源推荐
资源详情
资源评论
收起资源包目录
100012284-基于C++ Dlib框架Dlib、OpenCV库实现人脸签到系统.zip (21个子文件)
facesigninv1
stdafx.h 1KB
程序设计总结.docx 60KB
resource.h 3KB
LICENSE 1KB
FaceSignIn.aps 91KB
演示图片,这里涉及隐私不演示.png 19KB
Sort_method.h 11KB
FaceSignIn.cpp 2KB
ReadMe.txt 4KB
FaceSignIn.vcxproj.filters 2KB
环境配置总结.docx 155KB
FaceSignIn.h 437B
FaceSignIn.vcxproj.user 640B
FaceSignIn.vcxproj 13KB
FaceSignInDlg.h 2KB
face_recognition_lib.h 3KB
README.md 8KB
stdafx.cpp 135B
FaceSignInDlg.cpp 21KB
targetver.h 232B
FaceSignIn.rc 13KB
共 21 条
- 1
资源评论
- 2401_825077732024-01-15实在是宝藏资源、宝藏分享者!感谢大佬~
神仙别闹
- 粉丝: 2667
- 资源: 7640
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- IMG_5905.PNG
- Cyclone Version 9.51
- 高性能量化回测工具 hikyuu 2.0.3 python 3.12 windows 安装包
- 省级城乡居民基本养老保险情况数据集(2010-2022年).xlsx
- 舞队填写版.cpp
- 基于BP神经网络的多输入单输出回归预测.zip
- 高性能量化回测工具 hikyuu 2.0.3 python 3.9 windows 安装包
- 省级城镇职工基本养老保险情况2000-2022年.xlsx
- 高性能量化回测工具 hikyuu 2.0.3 python 3.10 windows 安装包
- 算法部署-使用OpenVINO+C#部署PaddleOCR字符识别算法-项目源码-优质项目实战.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功