go-cqhttp

智能防疫系统

✨ 基于 Python + MysQL 实现 ✨

AI epidemic prevention access control system - upper and lower computers include identification, health code detection, real-time monitoring, temperature monitoring, mask detection and other functions.

内容摘要 】:本项目主要是基于Python和MariaDB开发了一款低成本的智能防疫门禁系统,包含了三个部分:上位机监控管理软件、下位机检测实体机、人脸信息训练录入小助手。本项目该使用机器学习、视觉处理、爬虫技术来实现身份识别与健康数据检测,并使用网络通信技术通过上位机实时监控门禁签入签出人脸图像数据。本项目目的设计一款能够实现自助登记、自动比对、自动测温、无人值守且低成本的防疫快速登记智能门禁终端系统,最大限度避免交叉感染,并为疫情科学管理与精准决策提供数据支撑。

【关键词】: 机器视觉    机器学习    物联网    爬虫技术    健康医疗


官方文档 | Document
Github 开源地址 | Open source

一、项目规划概览

在项目制作分为了5个步骤:

首先,完成并实现人脸样本收集训练且识别、口罩识别以及健康码识别等功能。

其次,构建上位机软件的UI界面。

之后,将人脸识别等一系列机器视觉的功能封装入下位机并且利用MariaDB搭建人员管理数据库服务器并将之对接上位机后端实现实时网络传输监控。

然后,将人脸识别训练工具、上位机监控软件封装成图形化程序进行部署。

最后,完成项目的说明文档的编写。

二 、调研报告

对于国内而言,目前国内研究此项目的人较少,山东威尔数据股份有限公司以”为用户提供身份识别整体解决方案及落地服务”的发展战略,聚焦校园及政企用户,主导产品有:智慧校园协同教育云平台、校园身份识别应用解决方案、智慧企业管理平台、身份识别智能终端,广泛应用于门禁、考勤、消费、班牌、会议、访客等需要验证人员身份的场所管理。在国外,意大利实施”绿色通行证”计划,要求12岁以上民众进入健身房、博物馆、电影院等室内活动场所或参加比赛、考试等公众活动时提供相关证明,教师和大学生进入教室时,以及人们在乘火车、飞机、轮船、城际长途汽车等长途交通工具时提供”绿色通行证”。澳大利亚数字疫苗证书政策,已经接种过两剂疫苗的澳大利亚人将自动获得一份疫苗接种证书,并可以下载到他们的手机上。两个国家目前实施的方式与国内大不相同,只有中国采取了健康码通行的方式,能有效且快速的完成健康证明。

三、可行性分析

该产品有以下几个优点:

1.低投入:首先,我们要知道国内的大部分安全门禁和数字哨兵的费用是十分高昂的少

则几千多则上万,大部分应该是接入的地区健康码的租用价格所致价格不一的问题。但该项目所使用的检测健康码的技术,使用OpenCV加爬虫技术通过读取健康码二维码地址在通过网络爬虫去分析JS源码和动态生成接口返回的数据来识别健康码的状态。这样就能不需要获取官方接口,也能有效识别扫描者的健康码实际状态了。加上硬件如一些micropython核心的单片机甚至一些微型X86主板Z3735F这种等都可直接移植Open CV环境,且价格远远在300元以下,有效降低了成本。

无接触:减少人员之间的接触机会,降低交叉感染的风险;可追溯:数据真实、清晰、不可作假,出现异常可及时预警、追本溯源;

大数据:所有数据可统一汇总、查询、分析,为决策提供依据,为责任界定提供参照; 超便利:产品使用方式灵活、操作简单、无需安装,为用户带来极大便利性;

能复用:终端硬件产品可移动、可固定,软件系统可升级,疫情结束后仍可作为员工考勤、人脸门禁、访客身份认证等功能使用,持续发挥价值。

四、设计或实施报告

4.1 人脸识别

提前准备:1,让每个人上交一段/或者直接站在系统面前拍摄一段高质量的正脸照视频。2,通过OpenCV自带的人脸分类器检测出人脸边框并截取 视频帧 成指定区域大小的图片按名字序号保存(将记录者信息保存本地/云端)。3,搭建学习环境,通过LBPH算法挨个对着名字Label监督训练并保存训练好的模型。

现场执行:通过训练好的模型设置置信度,对比数据库内的人名核实检测人员信息。

4.2 口罩识别

方案1:通过OpenCV处理后 的人脸口罩覆盖度判别是否佩戴口罩(误检情况非常多,因为原理是通过处理图片后二值化后检测二值化后的颜色在整个脸部的覆盖度;因此比如手覆盖遮住嘴巴或者光线问题导致误检几率很大)

方案2:直接使用paddlehub库的预训练模型。

最终选择:方案2

4.3 健康码识别

方案1:使用pyzbar库+requests库 通过二维码解码+爬虫形式对接Ajax异步加载的数据接口(页面动态生成没法直接爬HTML源码,需要专门写算法取地址对接到官方的xhr 接口上)然后解析官方API 的 JS源码返回的code状态值来判断健康状态。(可用性高,需要联网)

方案2:使用Open CV 库,通过通过适当滤波后 用HSV范围锁定健康码颜色区间然后 判别状态(安全性低 图片可伪造 但可脱机运行)

方案3:直接拿政府给的后台,但是需要钱租用。

最终选择:方案1

4.4 网络通信 (上下位机):

方案1:使用socket通信技术让上下位机双方建立UDP/TCP连接,实现数据传输。(这里给的是UDP连接的测试图)

方案2:使用HC-05等蓝牙模块简单匹配好波特率后,可直接实现数据传输。(蓝牙传输距离有限,且非常容易烧坏)

方案3:固定设备可直接通过有线串口通信或者I2C通信 进行稳定的设备连接

最终选择:方案1的TCP协议。

4.5 软件图形化设计:

项目中,我选择了使用PyQT5进行软件图形化开发。在开发过程中需要特别注重软件的多线程信号量的设置,以防死锁问题。其次在软件进行可执行程序打包过程中,也出现了许多依赖库缺失问题。通过检查发现是因为开发时应用了自建的隔离虚拟环境,所以电脑并没有检查到依赖库的具体地址,解决方案:手动打包依赖库进根目录。

4.6 人体测温:

在人体测温上,我们使用的是串口MLX90614人体测温模块,因此可在有效距离30cm处进行准确测温。然后通过串口返回给我们的下位机处理器,并实时录入进我们的人员管理数据库中。

4.7 文档网站设计:

使用Github+docsify 进行搭建文档。通过markdown 来编写文档。这样不仅方便检查同时也有效减少了网站开发时间。

五、发布或推广

官方文档地址:https://docs.ai-ep-system.panzer-jack.cn/

项目开源及其发布地址:https://github.com/Panzer-Jack/AI\_EP\_System

六、项目总体设计

本项目总共分为3个部分:包含了三个部分:上位机监控管理软件、下位机检测实体机、人脸信息训练录入小助手。

第一部分:上位机监控管理软件

在第一部分上位机监控管理软件里,我使用了PyQT5 来进行软件的图形化开发设计,在上位机设计中,或者说整个项目中,比起人脸识别这种机器视觉训练的部分,如何实现不丢数据的实时二进制图片流的网络传输更是一个大坑,通过多次实验结论是需要提前发送一个统计好的字节流长度,然后以这个字节流长度为基础进行循环叠加直到数据接收完成。不然接收的数据流在解析后会出现明显的丢数据,并且在统计字节流长度时候也验证了这一点。

在上位机软件的开发过程中需要特别注重软件的多线程信号量的设置,以防死锁问题。

使用注意事项:

  1. 你需要在上位机部分同时配置好服务端和客户端的IP地址端。并且你需要配置好远程的数据库连接。
  2. 上位机使用:开启main.exe后会开启服务器端口,然后打开建立连接后,即可对下位机数据库建立连接。这时候你打开下位机时,下位机就会搜寻上位机然后发现并建立TCP连接。

第二部分:下位机检测实体机

在第二部分下位机检测实体机里,我使用了Raspberry Pi 开发板作为下位机的处理器,并且使用了tjc3224t128_011 串口屏 和 H200S工业摄像头作为检测设备。人脸识别使用的是Open CV库内的LBPH算法模型进行监督训练。健康码解析使用的是pyzbar+requests使用爬虫对健康码二维码的动态接口返回值进行分析。在下位机中,搭建的数据库是MariaDB数据库,该数据库是MySQL数据库的一个分支,语法可以完美兼容后者。通信协议采用的是TCP协议。

使用注意事项:

  1. 你需要在下位机部分配置好服务端的IP地址端。并且在当地的数据库内配置好连接 并且加入相应的人员信息,并且你需要配置好本地数据库连接。
  2. 注意请把训练好的人脸数据放到下位机项目相关的根目录地区,并且在相应的personData.py依次填入你之前挨个训练的人脸数据的人名。
  3. 请注意:人脸数据的人名一定要和数据库参数的name相等。
  4. 本项目已经在下位机部分分装好了人脸识别训练用的软件。因此,你可以直接使用本项目的人脸训练实测软件进行企业/学校等内部的人员人脸数据的录入。

第三部分:人脸信息训练录入小助手

在第三部分人脸信息训练录入小助手里,使用了PyQT5 开发图形化界面,将录制样本、训练模型以及实时检测效果三个功能封装进了该软件里头,方便非技术人员进行使用操作。不过唯一需要注意一点,如果用该软件训练多个人脸数据,需要手动用本项目提供的函数进行分割赋予标签来监督训练。然后就是阈值设定,这个需要多比对环境因素,特别是白天和夜晚的阈值差别相对而言会比较大。

最后总结一下

本项目总共包含了以下几个功能:1.身份识别。2.口罩识别。3.健康码识别。4.实时更新签入签出时间、健康信息数据。5.实时签入签出监控图像传输。6.检测体温。

软件使用需要注意以下几个问题:1.上下位机必须处于同一个网络中。2.先开启 下位机, 在打开 上位机。3.使用前一定要记住配置好上下位机的IP地址。4.注意!!!本软件使用的端口号为1919,如果没法使用,请优先考虑防火墙问题。最好使用前确保你的电脑已经开启了1919端口号的使用权。