Design of Intelligent Takeout Backpack System Based on STM32 + Baidu Cloud Facial Recognition
The intelligent takeaway backpack terminal system uses the Cortex-A7 core of the STM32MP157 multi-core processor to run the Linux operating system, and implements a human-computer interaction interface through QT. It uploads facial images to the server using TCP and receives the returned facial recognition results; The Cortex-M4 core performs real-time tasks such as temperature and humidity detection, backpack door switch control, and uses MQTT protocol to communicate with Huawei Cloud IOT servers in both uplink and downlink directions. The Cortex-A7 and Cortex-M4 cores are based on the cross processor communication protocol and framework RPMSg in the OpenAMP library for cross core communication. The server is built using MVC architecture, Spring Boot framework, Mybatis persistence layer framework, and provides facial authentication services through Baidu facial recognition API; The Android client is built using the MVP architecture and utilizes the Retrofit + RXJava + OkHttp network request framework to interact with the server network. The Room framework is used to catch client data. By using the takeaway backpack device terminal, Android client, Spring Boot server, and Huawei Cloud IOT server to build the entire system, users can control and monitor their devices, providing them with comprehensive services.
Take-Out Backpack
我国在线外卖行业正迅速发展,用户规模急剧增长。据统计,截至2023年底,外卖市场交易额达到1.2万亿元,外卖用户达5亿
智能外卖背包系统的应用领域包括以下几个方面:
1) 小区社区:为居民提供安全、便捷的外卖领取服务。
2) 餐饮行业:为外卖用户提供便捷的领取和存放外卖食品的方式。
3) 商业区域:为顾客提供外卖领取和存放服务,增加顾客体验和便利性。
4) 教育机构:为师生提供便利的外卖领取方式,满足他们在繁忙学习生活中的需求。
本文的智能外卖背包系统包含智能外卖背包硬件终端、用户端手机APP、Spring Boot服务端、MySql数据库和华为云IOT服务器。智能外卖背包终端利用MQTT协议将背包内手机号、取件码、温湿度等数据上报至华为云IOT服务器。当华为云IOT服务器接收到智能外卖背包上报的数据后,会触发数据转发规则,将数据转发至Spring Boot服务端进行处理。当用户在摄像头前点击屏幕上的人脸识别按钮时,系统会拍摄一张人脸图片,并通过TCP协议将照片发送至Spring Boot服务端。Spring Boot服务端收到人脸图片后,调用百度智能云人脸识别API对照片进行人脸识别,并对识别到的结果进行相应的处理,最后通过TCP协议向智能外卖背包终端发送对应的指令,实现了人脸识别的外卖存取功能。系统总体设计方案如
本文的智能外卖背包硬件终端选用了STM32MP157作为其主控芯片。STM32MP157是一款卓越的多核处理器,内含两个独立核心:Cortex-A7和Cortex-M4。在本系统中,Cortex-A7核心负责运行Linux操作系统,以处理包括人脸识别和用户界面等任务;而Cortex-M4核心则专门用于执行实时任务,例如温湿度检测、背包门开关控制等。智能外卖背包硬件系统框架如
Cortex-A7和Cortex-M4这两个核心基于OpenAMP库中的跨处理器通信的协议和框架RPMsg通过虚拟串口进行异核通信
Cortex-M4内核启动后首先对Tcrt5000红外反射传感器、温湿度传感器DHT11、紫外灯、排风扇、定时器和串口等外设进行初始化。ESP8266模块连接在串口3上,当串口初始化成功后,首先通过串口向ESP8266模块发送AT指令将ESP8266连接至一个提前设定好的、可以访问外网的WIFI
由于本文所使用的ESP8266模块的MQTT传输协议一次最多只能传输255个字节,所以我们将JSON数据中的各属性集成在一个no属性中,再以特殊符号隔开,以节省传输空间(no后面的数字表示背包号)。设备属性上报格式如
在设备初始化属性成功后,在主循环中使用OPENAMP_check_for_message ()函数进行轮询,以检查Cortex-A7内核是否有发送数据过来。当Cortex-M4内核的虚拟串口检测到有Cortex-A7内核发送来的数据后,回调函数void VIRT_UART0_RxCpltCallback (VIRT_UART_Handle TypeDef * huart)会将对应的标志位flag置为SET,并且通过一个二维数组t [5] [20]提取并存储其中的有效数据。其中t [0]对应的是背包号,t [1]对应的是手机号,t [2]对应的是取件码。虚拟串口回调函数部分代码如
一旦一次数据提取完成,将打开对应背包号t [0]的背包门,并通过串口向ESP8266发送AT指令,以上报存储在背包号t [0]中的手机号t [1]、取件码t [2]和温湿度信息。最后,根据背包内是否已存在物品,翻转该背包的紫外线杀菌灯状态。当背包内存在物品时,紫外线杀菌灯点亮;不存在物品时,紫外线杀菌灯关闭。
此外,通过背包门顶部的红外反射传感器实时监测背包门的开关状态。当背包门打开时,对应背包门的红外传感器的输出由低电平转换为高电平。背包门状态检测的任务函数会根据红外反射传感器的电平输出实时控制对应排风扇的运行。当背包门打开时,排风扇会自动开启,以实现除尘和散味的作用。
Cortex-A7内核运行了Linux操作系统,系统启动完成后首先通过SDIO接口的WIFI芯片RTL8723DS连接至事先设定好的WIFI。
为了提高骑手的送餐效率并使操作更加简单快速,本文采用QT设计了一个统一的人机交互界面,将所有功能都整合在一个界面中。在这个界面上,骑手和食客可以通过数字键盘轻松进行外卖的存取操作
用户可通过点击界面中的【当前模式:存放】按钮切换模式,并且根据模式不同,输入的数字位数限制也会不同:存放模式时是骑手输入食客的手机号,限制为11位;取出模式时是食客输入自己的取件码,限制为6位。
当骑手或用户将脸对准摄像头时点击识别按钮,系统会拍摄一张图片,然后通过TCP Socket上传该图片至Spring Boot服务端,并且接收并解析处理Spring Boot服务端传输回来的人脸识别结果数据,然后给Cortex-M4内核下发相应的命令以完成对应的操作。
服务端作为本系统中的数据处理中心,其向硬件端提供端到端的可靠数据传输(TCP)端口,TCP端口向硬件端提供人脸图片上下行数据传输服务,并接入百度人脸识别API服务以实现对人脸的识别功能
其基于Java语言开发;使用Spring Boot框架,MyBatis持久层框架为基础,采用MVC架构构建;以MySql数据库为用户所有数据的载体。服务端框架图如
Android APP客户端作为系统中用户交互的接口,其向用户提供可视化的界面,并为用户提供订单,外卖背包控制,账户控制的功能入口;通过与服务端之间的HTTP连接通道请求相应的功能服务,以实现用户对外卖背包控制,外卖背包状态监测,订单信息查询控制,个人账户信息录入更改功能
其同样基于JAVA语言开发;使用MVP框架构建客户端,使用SQLITE轻量型数据库作为用户数据的临时缓存载体;采用GOOGLE的ROOM框架简便高效的访问SQLITE数据库数据,向APP提供用户数据写入读取入口;采用Retrofit + RxJava + OkHttp网络请求框架向服务端发起HTTP请求,向APP提供服务端数据请求入口;客户端框架图如下
在设计数据时,考虑到客户端频繁请求服务端数据的情况,因此对重复请求数据暂存于Android系统中支持的SQLITE轻量型数据库中,一定量地减少了客户端对服务端的数据请求次数;在客户端的SQLITE数据库中存放用户账户信息,亦可实现用户账户自动登录功能;在服务端采用MySql关系型数据库存储用户账户信息,订单信息,外卖背包信息数据,其中用户信息表(User)、订单信息表(Orders)之间存在一对多关系,外卖背包状态信息表(BoxData)、订单信息表(Orders)之间存在一对一关系。系统实体关系图如下
账户表用于记录用户账户基本信息,包括用户唯一标识,账户密码,用户权限(骑手mv,食客user)。账户表如下
字段名 |
字段类型 |
主键 |
是否为空 |
描述 |
username |
varchar |
√ |
FALSE |
用户标识 |
password |
varchar |
TRUE |
账户密码 |
|
privileges |
varchar |
TRUE |
用户权限 |
订单表用于记录用户订单基本信息,包括订单ID,下单用户名,配送用户名,菜品名称,存放背包号,订单状态。订单表如下
字段名 |
字段类型 |
主键 |
是否为空 |
描述 |
id |
int |
√ |
FALSE |
订单id |
Orderphone |
varchar |
FALSE |
下单用户 |
|
Mvphone |
varchar |
TRUE |
配送用户 |
|
No |
varchar |
TRUE |
存放背包号 |
|
Orderstatus |
varchar |
TRUE |
订单状态 |
|
dishname |
varchar |
FALSE |
菜品名称 |
外卖背包状态表用于记录外卖背包基本信息,包括背包号,取件码,物品所属用户名,湿度,温度。外卖背包状态表如下
字段名 |
字段类型 |
主键 |
是否为空 |
描述 |
No |
varchar |
√ |
FALSE |
背包号 |
code |
varchar |
TRUE |
取件码 |
|
phone |
varchar |
TRUE |
背包格占用手机号 |
|
temp |
varchar |
TRUE |
温度 |
|
humi |
varchar |
TRUE |
湿度 |
虽然本文成功地完成了该系统的设计,但在后续实际使用的过程中发现了一些可以改进的地方。下面是我们认为需要改进的几个方面:
1) 网络功能优化:系统用于连接网络的ESP8266模块和RTL8723DS可升级为4G网络模块,这样即使是在没有WIFI覆盖的区域,智能外卖背包也可以正常使用。
2) 性能优化:通过优化算法和代码,可以减少系统的资源占用和运行时间,以提高其响应速度和运行效率。从而提升整体性能。
3) 安全性加强:需要进一步加强系统的安全性,确保用户数据的保密性和完整性。通过加密传输、权限控制和漏洞修复等措施,提升系统对潜在风险和威胁的防范能力。
4) 功能扩展:计划后续在系统中添加一些新的功能,以满足用户不断变化的需求。
武汉商学院大学生创新创业项目——平安包护智能背包202311654066。
*通讯作者。