手把手教你开发基于深度学习的人脸识别【考勤/签到】系统

来源:互联网 发布:python 函数自动补全 编辑:程序博客网 时间:2024/05/05 03:41

    • 人脸识别介绍
    • 平台环境需求
    • 技术点
    • 系统流程
    • 细节设计
      • 人脸检测
      • 人脸关键点定位
      • 人脸特征提取
        • 模型的训练
        • 模型的部署
      • MySQL数据库的使用
      • MFC工程的搭建
    • 软件使用

人脸识别介绍

人脸识别技术是一项非接触式、用户友好、非配合型的计算机视觉识别技术。随着机器学习、深度学习等技术的发展,人脸识别的应用正日趋完善和成熟。本文将介绍人脸识别技术如何用于考勤/签到系统。

本文将主要从以下几个方面阐述:

  • 平台环境需求
  • 涉及的技术点
  • 人脸识别系统流程
  • 细节设计

平台环境需求

  • 操作系统:Windows 64位
  • 第三方库:OpenCV,Caffe,boost
  • 开发语言:C++
  • 数据库:MySQL

技术点

adaboost算法和CNN用于人脸检测与定位; 
随机森林算法/CNN用于人脸关键点标定; 
卷积神经网络用于人脸特征提取; 
MFC用于设计系统操作界面; 
MySQL数据库用于管理人物-人脸特征数据库; 
Caffe框架用于上述环节中CNN模型的训练; 
使用Caffe的C++接口进模型行部署和使用; 
使用connector C++进行MySQL数据库的连接。

系统流程

考勤系统主要包含两个操作:注册和实时识别记录。

注册是指管理员通过软件界面将需考勤人员登记入库。 这里要输入待考勤人员的信息。 
实时识别记录是系统自动对来往人群进行人脸识别,并记录通行者的身份。

进行注册的流程如下:

开始注册?人脸检测特征提取插入数据库yes

实时识别的流程如下:

开始实时识别?人脸检测特征提取搜索数据库并记录身份yes

细节设计

人脸检测

使用OpenCV的人脸检测器进行人脸的初步检测,使用Caffe训练CNN网络进行人脸的二分类判定,将两部分合在一起完成人脸检测。此环节需注意根据应用场景调整参数,做到性能与召回率的平衡。

也可使用Python+OpenCV进行视频中的人脸检测,参考这篇文章。

人脸关键点定位

关键点定位的目标是在确知人脸位置的基础上,精确定位面部的关键点,如下图示意:

获得面部关键点的目的是进行人脸的对齐和标准化。标准化的人脸输入可以获得更高的人脸识别精度。

人脸特征提取

人脸特征提取是根据上述标准化的人脸区域图块,提取出数字化的特征。即完成从RGB信息到数值特征的变换。此环节需要尽量使得同一个人物的不同人脸所提取到的特征尽可能相似,而不同人物的人脸所提取的特征尽可能相异。

模型的训练

人脸识别的CNN网络模型的训练采用CASIA-Webface数据库,具体训练方式参见我的这篇文章。训练模型的流程参考我的github项目。

本模型在LFW评测集上达到了接近97%的准确率。具备一定的实用性。

模型的部署

部署主要考虑Caffe在Windows平台的移植,官方的Caffe对Windows系统并不支持,为了使用Caffe的C++接口,我们需要使用Windows版本的Caffe,微软出了一个版本的Caffe,参考这里。

MySQL数据库的使用

MySQL的安装和配置详见这里。 
我们使用默认的3306端口,配置好账户密码后,即可创建数据表。

MFC工程的搭建

使用Visual Studio 2013创建MFC工程,设计本软件的界面。详细的配置流程参考这里。

本软件设计界面如下 
界面

主要包括注册和搜索两个功能。点击注册时,按钮下方出现输入框,用于输入待考察人物的信息。

软件使用

注册,点击注册按钮,并选定需要注册的人脸。 
注册 
输入人物信息,并提交到数据库。 
输入信息 
搜索,点击搜索,界面中实时识别人物,并将识别到的信息展示在人脸上。 
搜索

0 0