疫情下的门禁系统软件部分的设计与实现——系统软件设计
目录
基于Python+OpenCV+树莓派设计开发了疫情下的门禁系统,主要实现:GUI交互界面、人脸识别、口罩检测、无接触体温测量、电机开关门和语音提醒等多功能智能门禁软硬件系统。本系统包含硬件和软件两部分内容较多,初步预计3~4篇文章完成全部内容介绍。
本文是该系统设计的第3篇文章,主要介绍各个功能软件部分的实现。
硬件部分,请阅读:
https://blog.youkuaiyun.com/meenr/article/details/124227789
1. 人脸识别功能的设计与实现
在识别之前首先需要采集一定量的人脸数据作为模型训练的样本,本系统需中采集一定数量的人脸样本。人脸采集模块的工作流程图如图1所示,当采集完毕后给出语音和弹窗提示,自动退出并返回主页。
图1 人脸采集流程图
人体面部图像采集程序设计主要使用opencv-python模块,利用其内置的人脸检测分类器来捕捉人脸并写入保存到本地。采集开始后需要通过鼠标和键盘或者触摸屏来输入被采集者姓名,用户按照提示内容进行操作即可。
成功采集面部照片后,对采集到的人脸原图进行预处理,包括裁剪尺寸调整和灰度转换,完成后采集镜头会自动关闭,系统将由采集界面自动返回到主界面(Home)。
人脸验证的身份识别程序设计流程图如图2所示。
图2 人脸识别流程图
2. 口罩检测功能的设计与实现
2.1 分类器的训练
这一部分的内容已经独立写在另一篇文章中,请移步阅读:
分类器的训练
https://blog.youkuaiyun.com/meenr/article/details/115825671
如图3的所示的训练分类器的步骤框图。
图3 训练步骤框图
图4 格式化后的正负样本数据
图5 预处理后的样本
图6是训练口罩级联分类器的所有文件,包括正负样本文件夹、分类器文件保存文件夹、样本路径文本文件、样本描述文件、训练分类器的应用程序和训练参数批处理.bat文件。
图6 训练口罩分类器的文件结构
2.2 口罩检测功能的程序设计
口罩检测程序和人脸识别程序原理与程序流程基本一致,将OpenCV训练完成后的口罩检测分类器和人脸检测的分类器加载到程序中。调用摄像头录像并将实时图像按帧读取,判断是否检测到戴口罩的人脸,如果检测到将在图像上框出绿色框并提示“have mask”,如果只检测到人脸没有戴口罩将在图像上框出红色框并提示“no mask”。
图7 口罩检测
3. 温度测量功能的设计与实现
MLX90614传感器的数据手册中描述的是通过SMBus协议与上位机即本课题的树莓派4B进行通信,SMBus协议是I2C协议的一个子集。在树莓派上Python语言使用I2C接口与模块通信使用的是smbus库函数,其测温软件流程图如图8所示。
图8 温度测量程序流程图
IR传感器内部由多个串行连接的热电偶组成,热电偶的冷接头置于MLX90614芯片的衬底上,热接头置于薄膜上。薄膜通过吸收或是辐射使自身温度增加达到加热或者温度降低实现冷却。热电堆的输出信号为:
V_ir (T_a,T_o )=A.(〖T_o〗4-〖T_a〗4) (1)
公式1中的 T_o 表示的是物体的绝对温度,Ta是传感器芯片的绝对温度,A是敏感度。计算好的温度输出分辨率为0.02˚C。16位的数据保存在地址0x07H位置,测量范围从0x27AD到0x7FFF(-70.01℃ ~ 382.19℃)。但是传感器的出厂校准范围为-40~+125˚C[25]。通过下式将RAM内容转换为实际的Ta温度:
T_a [°K]=T_areg×0.02 (2)
物体温度To输出结果分辨率为0.02˚C,并存于RAM,To的实际温度为:
T_o [°K]=T_oreg×0.02 (3)
温度测量结果的计算步骤:
进制转换,由地址位取出的16进制数转换为10进制,例:3AF7h=15095d
乘以分辨率0.02,例:15095/50=301.9K(结果是开尔文为单位)
单位转换,以上公式计算的温度单位均为开尔文(K),需要转换为更加通用的摄氏度(˚C),例:301.9-273,15=28.75˚C
温度测量计算结果将由显示器输出,保留小数点后两位,单位是摄氏度(℃)。
4. 语音提示功能的设计与实现
根据语音提示的方案设计首先需要提前录制语音提示文件,而后在程序中进行调用该文件,以播放音频文件的形式实现语音提示的功能。
4.1 语音合成
本系统中通过Python语言程序设计,分别采用在线和离线的两种方式合成了音频文件。对比音频效果,择优选择了在线的方式合成的.mp3音频文件。
第一种是离线的方式通过调用Python下的pyttsx3语音库来合成语音,可直接将文本转换成语音音频的,再保存为mp3文件。
第二种是在线的方式,通过百度API语音合成接口来将文本转换为音频文件。
4.2 语音提示
语音提示流程图如图9所示。通过Python游戏库Pygame在树莓派上播放音频,Pygame不仅能够用来开发游戏软件,还可以在 Python 程序中创建功能丰富的多媒体程序,可以插入各种图像和音视频,而在本课题中应用Pygame的主要原因是,其拥有较高的可移植性和良好的兼容性可以支持多种操作系统,而不像playsound这种兼容性较差的模块。
图9 语音提示流程图
5. 门禁执行功能的设计与实现
本课题门禁执行使用SG90舵机的转动来驱动。SG90舵机的时序基准脉冲信号周期是20ms(50Hz)。对应的占空比与角度的关系如表1所示。
表1 SG90占空比与角度对应关系表
时间(ms) 占空比 角度
0.5 2.5% 0°
1.0 5.0% 45°
1.5 7.5% 90°
2.0 10.0% 135°
2.5 12.5% 180°
其软件流程图如图10所示,Python语言使用RPi.GPIO库对树莓派的GPIO进行操作。SG90的信号线连接树莓派4B的GPIO引脚。
图10 舵机转动流程图
6. 交互界面的设计与实现
人机交互界面可以用户减少对程序编辑器控制台的依赖性,避免由用户误改程序代码造成的问题,提升用户使用的舒适度。本文设计图形用户界面的框架图,如图11所示。
图11 界面框架图
该部分设计使用了Python的内置库Tkinter,Tkinter是Python的标准GUI(图形用户界面)库。Python使用Tkinter能够以较快的速度的开发GUI应用程序。
7. 系统调试
软件部分的大部分功能可以在电脑上完成,少量的需要搭配硬件的测试,只能在树莓派上完成。
所有软硬件资料(设计代码、电路模块资料、设计报告等),有需要的可私信
在努力持续更新中。
可以一键三连催更哦。
更多内容
硬件设计部分:
https://blog.youkuaiyun.com/meenr/article/details/124227789
简书地址:
https://www.jianshu.com/p/738e13966425
帮助信息文章地址:
https://blog.youkuaiyun.com/meenr/article/details/121452685