基于MQTT 协议的嵌入式联网报备考勤系统
2023-10-24高亮海于世龙赵少坤廖通海乔建华
高亮海,于世龙,赵少坤,廖通海,乔建华
(太原科技大学 电子信息工程学院,山西 太原 030024)
0 引 言
日常考勤是组织管理的基本方式,人脸识别的考勤方式因具有直观、方便、无接触的优点已被广泛应用[1-3]。现有的人脸识别考勤设备存在成本高、体积大、仅本地查看、录入复杂等问题。随着深度学习基本理论的发展,以及专门为嵌入式设备和深度神经网络加速而设计的新型片上系统的发布,通过小型廉价设备实现实时图像识别成为可能[4-5]。同时,应用物联网技术还可以将边缘节点的感知数据通过通信模块发送至云端服务器,利用终端设备即可实现数据的集中管理和远程监测[6-8]。本文在基于MQTT(Message Queuing Telemetry Transport)的物联网架构下设计了基于K210 和ESP32 的嵌入式人脸识别考勤和远程报备系统,通过K210实时识别人脸,配合ESP32 将信息上传至物联网云端服务器;通过手机APP 可联网查看签到消息、进行录入和修改,还具有云端信息保存、历史分析、消息交互传输等功能,适用于绝大多数的人脸识别考勤场景。
1 系统总体方案
1.1 人脸识别方案
本文采用的主芯片K210 是RISC-V 架构的高性能微控制器,配备了神经网络处理器(KPU),KPU 内置卷积、批归一化、激活和池化运算单元,可用于加速卷积神经网络算法。
在执行人脸识别任务前,先将人脸模型烧录至FLASH存储器,以便于KPU 进行调用。人脸识别的总体流程是先获取当前的摄像头图像,KPU 加载人脸模型后推理当前的图像中有无人脸,若有人脸则对两眼、鼻子、嘴巴的位置进行定位,并且采集当前人脸的特征值。比对当前人脸特征和已记录的人脸特征,若相似度超过一定比率,则判定为同一个人,若相似度比率低则无法判定。人脸识别流程如图1 所示。
图1 人脸识别流程
1.2 网络通信方案
1.2.1 网络通信总体结构
网络通信总体结构由ESP32、巴法云服务器、手机APP端及网络数据库四部分构成。其中的数据通信均采用JSON格式,方便不同模块的信息传递和解析。总体结构如图2所示。
图2 网络通信总体结构
1.2.2 MQTT 协议
MQTT 是一个采用发布/订阅(Publish/Subscribe)模型的轻量级通信协定,构建于TCP/IP 协议之上。MQTT 的主要优点是能够以很少的代码和有限的带宽,为远程终端带来及时可靠的消息服务质量[9]。作为一个低费用、低带宽需求的即时通信协议,MQTT 在物联网、小型终端、移动应用等领域有着广泛的应用。因此,本系统采用MQTT 协议进行网络通信。
MQTT 分为broker(代理)和client(客户端)。client从角色上可以分为publisher(发布者)和subscriber(订阅者),client 之间通过中间媒介broker 通信。client 要订阅的消息类型由topic(主题)来决定。当一个publisher发布了一个消息时,broker就把这条消息通知给订阅了这个topic的subscriber[10]。在本系统中,巴法云服务器作为MQTT 的broker,ESP32和手机APP 均作为client。ESP32 和手机APP 首先需要订阅一个在巴法云服务器中创建的topic;然后,ESP32 作为publisher 发出消息,服务器接收了消息之后在同一topic 下向所有client 都发出消息,因而手机APP 作为client 就收到ESP32 发送的消息。同理,手机APP 端也用同样的方式发送消息至ESP32 端。数据的格式采用JSON 字符串格式,方便解析和发送,JSON 字符串格式如下:
1.2.3 巴法云物联网平台
巴法云物联网平台是一种利用前后端口隔离的设计理念,具有支持发布/订阅模式、提供遗嘱机制的轻量级物联网端服务器。巴法云物联网平台支持多模型的数据交换,并且已将协议标准化,与多个平台服务完全兼容。本设计利用巴法云平台,保存考勤的各类数据,连接ESP32 和手机APP。
1.3 系统总体结构
本系统由K210 视觉识别模组、ESP32 最小系统板和手机端考勤系统APP 构成。K210 作为主控芯片,ESP32 提供联网功能,系统使用K210 配备的KPU 神经网络处理器进行人脸识别,发送识别结果至ESP32,ESP32 使用MQTT 协议通过WiFi 发送信息至云服务器端,云服务器发送至手机APP,同样手机APP 也发送信息至ESP32 端,同时在LCD上显示摄像头摄入的考勤人员人脸检测和识别结果。系统总体结构如图3 所示。
图3 系统总体结构
采用K210 进行人脸检测与识别。首先利用人脸特征建模,对收集到的图片进行人脸检测;然后对目标对象的五官进行比对,从中提取特征值并保存;最后与预先保存的大量特征值比对即可识别人脸,并得到匹配人脸的相关信息。同时,使用SD 卡存储人脸特征信息,可以实现信息的掉电保存。
ESP32 连接K210 和云服务端。ESP32 需要连接WiFi 获取当前的网络时间并写入实时时钟寄存器。K210 与ESP32经串口通信,通过JSON 字符串传输人脸信息、姓名信息、工号信息和时间信息。ESP32 以云服务器为中转,通过MQTT 协议传输JSON 字符串信息,最终发送至手机APP。
通过手机考勤系统APP 实现信息的记录、查询等功能。如果要记录新的人脸信息,需要输入工号和姓名。手机端通过网络云服务器发送工号和姓名信息至ESP32 端,ESP32进行数据解析和判断;然后通过串口发送到K210 模组中,K210 模组即开始录入人脸。如果ESP32 端收到报道信息,就把信息上传至网络数据库中等待下次更新。手机APP 还提供了信息查询功能,通过工号查找人员信息。
2 系统硬件设计
2.1 系统硬件结构
硬件部分主要由两部分构成:一部分是以K210 为核心的人脸识别模组;另一部分是以ESP32 为核心的WiFi 通信模组。两者通过串口进行数据交互。K210 摄像头模组主要由下载电路、DC-DC 电源转换电路、LCD 电路、OV5640 摄像头电路和TF 卡电路构成。ESP32 模组仅由一键下载电路和最小系统构成。系统硬件结构如图4 所示。
图4 系统硬件结构
2.2 K210 摄像头模组及外围电路
本文采用了Sipeed 的视觉处理模组MaixBit,该模组具有较小的体积和优良的扩展性。MaixBit 引脚如图5 所示。
图5 MaixBit 引脚图
摄像头模块选用OV5640,显示器使用LCD,通过FPC排线连接至K210。OV5640 通过DVP(Digital Video Port)端口和主控制器相连。LCD 使用8 bit 并口与K210 连接,原因在于要实时传输图像信息,图像数据量比较大,8 bit 并口可以提供更大的带宽。
TF 卡模块使用SPI 模式连接,原因在于K210 引脚资源有限,SPI 的连接方式仅需四根线,并且本系统中TF 卡存储的数据量不大,不需要较大的传输速率。
2.3 ESP32 协处理单元及外围电路
ESP32 整合了2.4 GHz WiFi 与蓝牙双模技术,拥有超高的射频技术性能、稳定性、通用性与可靠性,同时耗电量超低,且成本比较低。ESP32 及外围的接口如图6 所示。
图6 ESP32 及外围电路接口
ESP32 与K210 通 过 串 口 连 接 如 下:ESP32 RX2—K210 数字引脚7(K210TX);ESP32 TX2—K210 数字引脚8 (K210RX);ESP32 GND—K210 GND。
3 系统软件设计
3.1 主控模块软件设计
主控模块K210 使用MaixPy 开发环境,MaixPy 系统不仅支持MCU 常规运算功能,而且整合了硬件加速的AI 机器视觉算法以及与麦克风阵列相关的算法。使用micropython编程可以很方便地开发K210,使其能够做视觉相关的工作。MaixPy 还具有一键下载功能,方便下载和调试代码。
K210 模块需要完成人脸检测和识别、接收和发送信息、确定是否录入新的人脸,及发送给ESP32 端识别人脸的姓名、工号等信息。K210 程序流程如图7 所示。首先K210 上电后先检测TF 卡上有无人脸特征值记录文件,如果存在人脸特征值记录文件就把人脸的特征值读取出来并且保存在一个人脸特征值列表中,针对名称和工号的做法相同。之后从FLASH 中加载人脸模型,初始化UART、LCD、摄像头模块。
图7 K210 程序流程
在程序的循环中,先从串口获取ESP32 数据,如果串口有数据发送过来,进行数据解析,数据的格式为“a 姓名,操作,工号a”,“a”作为判断数据帧头和帧尾的标志,如果操作值为0,则把新录入人员的标志位置1。通过摄像头采集图像,使用KPU 执行推理任务。如果在图像中找到人脸,先把人脸大小固定为128*128,运行脸部模型,分别为左眼、右眼、鼻子、左嘴部、右嘴部;然后计算人脸特征值向量。再把特征值列表中的每一个值与当前值进行比对,若匹配度大于阈值,则判断为同一个人,通过串口使用JSON 字符串把此人的工号、姓名、操作值打包发送给ESP32,并且在屏幕上显示出相关信息。若当前新录入人员的标志位为1,则把当前人脸的特征值、工号、姓名以TXT 文件的形式保存至SD 卡中。最后刷新屏幕。
3.2 通信模块软件设计
通信模块ESP32 用于连接网络云服务器发送信息、与K210 的通信、信息解析和逻辑判断,以及完成系统中不同器件的通信。ESP32 的开发环境是ESP-IDF,Visual Studio Code(VS Code)作为代码编辑器。ESP32 程序流程如图8所示。
图8 ESP32 程序流程
ESP32 首先初始化串口1 和串口2,波特率为115 200,无校验位,8 位数据位,1 位停止位;然后把引脚0 配置为外部中断上升沿触发(按键),连接当前的WiFi 成功后,通过阿里云NTP 服务器获取时间信息,并把时间信息写入芯片的RTC 中;通过MQTT 连接巴法云服务器,订阅一个主题,接着进入主循环,判断当前的MQTT 连接状态是否正常,如果不正常则重新连接;把串口中获得的考勤人员信息发送至网络服务器,网络服务器发送给APP 端显示;通过解析串口和网络服务器发送的数据来判断当前需要执行的操作。如果是签到状态并且串口收到数据,则向服务器发送更新签到数据信息;如果是签退状态且串口收到数据,则向服务器发送更新签退数据信息。这之间的数据传输格式都采用JSON 字符串。
3.3 APP 模块软件设计
本设计的手机APP 使用APP Inventor 开发。APP 软件设计主要通过调用函数库完成。首先有两个页面:管理员登录页面,数据查询和录入页面。管理员登录页面判断用户名与密码是否匹配,如果匹配则跳入下一个页面,不匹配就提示错误信息。针对数据查询和录入页面,首先使用MQTT 模块订阅巴法云网络服务器的同一个主题,之后按照输入的工号和姓名发送消息。如果接收到消息,判断接收消息的类型;若是更新消息,就把接收到消息的信息解析保存至网络数据云中。录入流程如图9 所示。
图9 录入流程
数据库使用的是网络微数据库系统,可以通过手机端APP 进行数据增添、删改、查询功能,每个数据由标签和值构成,标签用来区分不同的信息,值通过JSON 字符串保存信息。
4 系统测试
4.1 人脸识别测试
连接MaixPy 软件和开发板,运行程序,在帧缓冲区可以实时观察到图像数据,也可在LCD 屏幕上观察。硬件连接如图10 所示。
图10 系统硬件
如果SD 卡内没有存储数据,则无法识别到人脸,并且只有在串口给出指令后才能录入。人脸识别效果测试如图11所示,没有识别到人脸时LCD 会显示“can’t recognize”,成功识别后会显示“recognized”和工号。此时,从串口端输出的信息如图12 所示。
图11 人脸识别测试
图12 识别到人脸后串口输出信息
4.2 网络通信测试
网络通信测试主要包括联网测试、时间获取测试、串口调试和网络云服务器测试。联网测试需要通过WiFi连接网络,并查看是否正确获得IP 地址。时间获取测试是从服务器获取网络时间。网络云服务器调试,则是选用巴法云服务器为平台,在网页端查看收到和发送的消息。串口调试则是使用串口1 作为调试,串口2 连接K210,输出接收到的网络信息和收到的信息。图13 ~图15 即为网络测试效果。
图13 MQTT 联网测试
图14 JSON 字符串解析输出
图15 巴法云网络通信测试
4.3 手机APP 端测试
手机APP 端测试包含了巴法云服务器通信和云数据库的操作。巴法云服务器的通信测试与ESP32 端类似,都是在网页端查看服务器上的消息记录是否正常;云数据库的操作则是对收到的消息进行提取和保存。查询操作先输入查询关键字,然后点击获取数据按钮,观察从数据库获取的消息是否正确。测试效果如图16 所示。
图16 手机APP 测试
5 结 语
本文在MQTT 协议架构下设计了基于K210 和ESP32 的人脸识别考勤和联网报备系统,利用卷积神经网络实现了嵌入式系统上人脸的实时识别,并能通过手机APP 查询考勤人员信息及新录入人员信息。该设计解决了串口通信格式、UTF-8 编码转化、MQTT 的调试、人脸识别数据存储、手机APP 开发等关键问题。经过大量测试,该系统具有较高识别精度,功能齐备,操作方便;同时本系统体积小,易于实施,很容易转换为产品,满足实际应用的需求。