基于Opencv和pytorch的人脸识别系统

Author Avatar
NENEIIII Apr 25, 2021
  • Read this article on other devices

前驱知识

Opencv

pytroch

pyqt5

系统功能

以使用者在人脸识别设备上的数据比对作为基础,以计算机为后台处理工具,通过单片机终端实施对宿舍门锁的物理控制。同时在用户端可以生成图形化界面便于人员面部信息的录入和修改,以及记录开门时刻。在前期计划中,会利用外部设备进行信息的采集,以及实施相应控制操作,但设计过程中发现缺乏硬件条件,因此硬件部分的设计更改为利用电脑摄像头采集数据并进行实时检测反馈,将检测结果发送到单片机,并用对应信号灯亮起代替相应控制信号输出。

系统组成

  1. 人员信息管理模块(更新与删除)

  2. 人脸检测与识别模块

  3. UI交互模块

  4. 终端控制模块

模块设计

交互界面

  1. 绑定验证界面:
image-20210907180943586
  1. 管理员登陆界面:
image-20210907200135391
  1. 用户人脸信息录入:
image-20210907200212652

数据存储

由于数据量较小,采用本地存储的方式,原始图像和预处理图像等数据集合方式如下:

image-20210907181019898
  1. 通过界面录入的原始数据放在ClientData下,以”ori+编号”格式命名;

  2. 经过图像处理->人脸检测分割后的用户人脸图放在同级目录下,以”s+编号”格式命名;

  3. 如果需要将用户纳入关联住户里,需要加入到Database/ORL/下,参与模型的训练.

识别模块

流程图:

image-20210907173700789

信息管理

  1. 产品绑定:产品购买后提供邀请码,与序列号唯一绑定,当用户正确绑定产品后才能进行信息录入。

  2. 管理员登陆:管理员的账号与密码由卖方提供,一个账号可以管理最多三台设备(家里安装多个锁的情况),一台设备只能由一个账号登陆管理。

  3. 采集与删除:管理员有权限进行信息的录入与删除,用户数据只提供删除接口,不能单独修改和查看。

串口通信

  1. 在检测到已知用户时,通过python提供的serial库,可以进行串口通信。将COM3口初始化,波特率设置成4800,发送字符”1”

  2. 单片机上电后进行串口初始化,设置对应的波特率,IO端口初始化,进行待机状态,利用TX中断,当接收到字符后核对内容,如果是”1”就闪烁二极管,复位键模拟解锁操作,即释放本次捕获,等待下一个人。

系统改进(后续研究)

用户数据上云

当数据量增多时,存储在本地显然是不可行的,百度公司有提供云人脸识别库,通过api可以将数据上传至人脸库中存储,并且在阿里云的PolarDB中只存储用户标签与识别结果和时间。

项目部署到云服务器

通过Tomcat 可以让项目以网址的形式进行运行,因此还可以开发成在线识别系统,目前我使用的阿里云ESC是linux系统,如果进行代码部署上云可能还需要进行一些移植工作。

硬件进行联网通信

实际应用中串口通信显然是不可行的,其它无线通信方式比如蓝牙,WIFI等更实用,不过既然项目将部署到云服务器,选用网络通信更佳。

系统演示

  1. 身份认证image-20210907174246756
  2. 信息录入image-20210907175009617
  3. 人脸检测image-20210907180745837