一、简介
作为电子通信学科的学生,本科期间,不参加省电国电属实遗憾,2020年参加了广东省电子设计大赛,是我首次获得省级奖项,记录一下当初的心路历程。
广东省的电子设计大赛和其他省份不同,是开放式命题,给出竞赛主题,三个学生为一组,给一个多月时间让学生自行发挥,自行设计,作品以越贴近主题功能越多且越有创新性为优。
二、题目要求
本次竞赛以“5G-AI”为主题,开展以自主开放式命题和产业定向命题两种形式进行,其中,自主开放式命题主要面向5G、人工智能相关应用的器件模块、电子装置的创新作品。
三、团队
三个人组队,我,Q,以及Y。
我擅长嵌入式以及板级硬件方面的技能,熟悉STM32、FPGA、ARM嵌入式、板级电路设计等偏硬的技术。
Q擅长深度学习,图像处理那方面的AI技能,熟悉人流密度检测、人脸识别等技术,整体偏软件。
Y对技术方面不太感兴趣,负责制作文档、提供想法、辅助调试等工作。
Q的博客地址:Lin-sudo的博客
四、分析
分析一下题目,以5G和AI为主题的电子设计竞赛。
①首先得体现5G,那么我们能想到的就是极快网络速度,作品中必须有或者需要依赖极快的网络速度。
②接着是AI,结合Q的技术栈,图像处理那块跑不了了,所以作品中必定有摄像头,有图像识别、图像处理方面的技术。
③最后还有一点是电子设计竞赛,多少都得有硬件,不可以买个嵌入式设备然后就跑深度学习跑软件去了。
于是我们决定以下思路定题:将人脸识别、人流密度检测等图像识别技术,嵌入到日常生活中的某件物品上,再结合当时的创新热点讲讲应用场景。
当时正值疫情刚爆发不久,很自然地想到了做一作品用于在有一定人流密度的地方辅助防疫,于是我们初步定下题目:做一个学生宿舍楼下的拥有防疫功能的智能信息告示牌。
五、开工
题目大体方向敲定,开始干活儿~
5.1 功能需求分析
首先需要实现智能告示牌的基本功能,也就是通过手机APP修改告示牌上的内容,以及语音播报某些信息。
实现防疫功能,检测体温、检测人流密度、记录发热信息、防疫提醒、潜在感染者标记等功能,因此硬件上需要红外传感器、摄像头,以及有一定算力的嵌入式设备。
在完成上述功能后,如有余力还可以添加实验室科研项目有关的功能,即利用红外传感器检测呼吸率,图像分析检测心率等功能。
5.2 系统框架设计
主要在考虑神经网络放在哪个设备上运行的问题。
方案一:人脸识别、人流密度检测等功能全部放在嵌入式设备上实现,服务器端仅作信息采集与分类。
方案二:神经网络等大部分图像识别的功能放在服务器端实现,嵌入式设备只运行轻量级神经网络,负责控制外设、视频推流、各方消息的收发与协调,在5G网络速度下,能够实现实时的处理。
我们尝试了方案一,发现在嵌入式端难以实现实时的人流密度检测(除非买更贵的设备)。而在PC端则很好地实现了人脸识别与人流密度检测,因此,选择方案二,并用PC机来模拟服务器,同时又能体现“5G”的主题。整体设计框架如下图所示。
5.3 硬件选型与设计
5.3.1 红外热传感器选型
方案一:Flir Lepton3.5 红外热成像模组,温度分辨率可达0.05°C,拥有160×120的分辨率,可以看到红外成像图。
方案二:GY-906-DCI长远距离红外测温传感器,可测量最远60cm外的单点温度,但远距离精度较低。
使用Flir Lepton3.5,可以选择测温范围,获得红外成像图,可以测量出多个人的额温,以及面部温度变化。若使用单点式红外温度传感器则无法实现,因此,选择方案一。
5.3.2 单片机选型
使用STM32F4作为控制Flir红外热成像模组的设备,写入OpenMV固件后,热成像温度检测算法以及呼吸率检测算法的移植变得更加容易,能够大大加快开发进度。
5.3.3 嵌入式设备选型
方案一:使用FPGA作为主控,运行速度够快,但开发繁琐,神经网络难以移植。
方案二:使用树莓派3b+作为主控,拥有64位、1.4GHz、四核CPU,以及各种常用通信协议接口,并且树莓派官方提供有CSI摄像头、HDMI屏幕等外部硬件设备,以及完善的Linux系统,可以使得开发速度大大加快。
对比之下,选择方案二。
5.3.4 扬声器及功放电路设计
使用TDA2030A及其外围电路来驱动扬声器。
5.4 软件系统架构设计
5.4.1 总体软件架构
当无人接近时进入监测模式,树莓派会通过摄像头进行人流密度检测,防疫告示牌挂在大门上方,实时检测人流是否过密。若过密,会提醒大家保持社交距离。若有发热者强行闯入,摄像头会抓拍,并上传到服务器,并标记该时刻的密切接触者。
当有人靠近公告牌时进入体检模式,将视频流上传到服务器,进行人脸识别和心率检测,热成像检测呼吸,并将检测结果上传到服务器储存。同时,管理员还能通过手机端APP远程修改告示内容,查看体检数据,查看发热警报等信息。
软体的总体设计框架如图所示。
5.4.2 通信方式选择
STM32与树莓派之间所需传输的数据量不大,只需要传输温度,人脸口鼻ROI等少量数据,并且同在智能告示牌内部可以用杜邦线将IO口直接相连,因此使用串口通信方式。
树莓派与服务器置于同一局域网,树莓派需要向服务器传输视频流,服务器需要向树莓派传输指令和数据。树莓派选择RTSP协议来向服务器传输视频流,距离远,延迟低,实时性好;服务器端使用Socket接口,TCP协议来向树莓派传输命令和数据。
5.4.3 OpenMV端软件设计
经过反复试验,把所检测温度范围设置在30°C至42°C,通过热成像图的色块大小来判断是否有人接近,通过检测色块内最高温度点来探测是否有人体温超标。并且通过串口与下位机通信。
5.4.4 树莓派端软件设计
树莓派主要有三个线程,分别是UART、Socket、Requests线程。
UART线程负责内容为,当有人接近时,信息发送给上位机,上位机开启识别身份和测试心率,再把测试呼吸的ROI通过串口发送给OpenMV。OpenMV会持续发送呼吸数据,树莓派持续接收,并记下波形和绘图,最后上传到服务器。当检测到发热者闯入时,会拍下当前帧,将坐标和图片一并上传到服务器。
Socket线程负责树莓派和上位机的通信,将ROI传递给OpenMV。
Requests线程负责每隔5秒刷新一次公告牌的内容。
5.4.5 服务器端软件设计
上位机负责与树莓派进行Socket通信。当树莓派接收到有人靠近时,测试人的心率。没人靠近时,接收树莓派的视频推流和人流密度的检测结果。同时,等待发热者闯入触发,抓拍并标记发热者,并上传到服务器。
5.4.6 互联网服务器以及手机APP设计(完全由Q负责)
互联网服务器端编写了3个php程序,upload_file负责转存呼吸、心率测试数据,upload_msg负责转存公告牌内容,upload_overtemp负责转存发热者闯入数据。只需访问数据库便可查看上述内容。
手机端一共包含四个功能:分别是统计资料、统计分析、高温提醒、修改公告。统计资料负责查看每日体检数据,统计分析负责分析潜在感染率,高温提醒负责查看发热者闯入,修改公告负责实时修改公告牌内容。
5.5 外壳设计
使用硬纸板与木条自制外壳,考虑了散热、防潮等需求,并合理安排布局,预留了电线孔位、树莓派调试接口。
添加上外壳和装饰后:
5.6 整体测试
放上一张调试期间拍的图:
程序整合完成后,测试了以下场景:
1、一个体温正常人,靠近并进行检测。
2、一个体温超标的人,靠近并进行检测。
3、一个体温超标的人和一个体温正常的人,路过。
4、几个体温正常的人,挤在一起路过。
5、现场查看检测结果、APP查看检测结果。
6、管理员远程修改告示牌内容。
测试场景 | 预期效果 | 是否符合预期 |
1 | 播报体温,检测心率、呼吸率,标记正常。 | 是 |
2 | 播放体温发出发热警告,检测心率、呼吸率,标记发热,识别其身份信息并记录于互联网服务器。 | 是 |
3 | 播放体温发出发热警告、拥挤警告,标记发热人,以及与其同行的密接者,识别两人身份信息并记录于互联网服务器。 | 是 |
4 | 发出拥挤警告。 | 是 |
5 | 能够查看发热人、密接者时间地点姓名照片等信息,能够查看体检者心率、呼吸率等信息。 | 是 |
6 | 能够实时修改告示牌的内容。 | 是 |
六、现场评比
作品完成后装箱,坐大巴去佛山三水好帮手那里评比,晕车晕的好厉害(@_@)。
向评委老师们一边演示一边讲解作品功能,评委们进行打分。
一等奖的喜悦~
七、总结与心得
7.1 总结
本项目通过使用热像仪、树莓派、PC服务器搭建了一个智能防疫告示牌,通过三者的相互协作配合,实现了人流密度检测、人脸识别、体温监测、呼吸率检测、心率检测等功能。本系统还配备了手机app,管理者可以通过它来修改公告内容、查看检测信息等。
此外,本系统还可以扩展成其他防疫设备。例如,写入挂号系统,那就可以做成自助防疫挂号机;写入考勤系统,就可以成为公司的防疫打卡考勤仪;写入取票系统,就可以做成防疫自助取票机,放在火车站或电影院可以发挥很好的防疫作用。总之,本系统实质为一块带有防疫功能的屏幕,因此,拥有无限的扩展可能。
我在其中主要负责的工作为:
1、整体硬件系统的设计与实现,包括系统整体设计、各部分硬件选型与实现。
2、外壳、外观、防震、散热防潮等附加功能设计。
3、整体软件系统的设计,包括各部分的功能、通信协议、时序结构。
4、调试各部分之间通信协议,包括uart、socket、rtsp,保证其稳定性。
5、嵌入式软件的编写与调试(STM32)。
6、将OpenCV 、训练好的Yolo-Fastest模型、部署到嵌入式设备(树莓派)并测试效果。
7.2 所遇困难
选题上就有困难,搜索了一下往年的参赛选题,大多数都是类似于智能家居、智能车、无人机、机器人之类的题目,很难想出一个既符合主题又比较新颖的题,最后的一个月时间我们才想到了跟疫情结合的题目。(比赛结束后一两个月我们在外逛时发现一些商场门口就有类似于我们这种的广告牌了)
口鼻ROI定位问题,测呼吸率是通过热成像检测人脸中口鼻区域的热像均值来实现了,因此需要先找到口鼻区域的ROI定位,但STM32F4不具备快速找到口鼻区的能力。因此需要通过树莓派运行轻量级的神经网络来寻找,但由于树莓派摄像头位置与热像摄像头位置不同,畸变程度、像素都不一样,定位后交由STM32处理时就不准确。后来我们把两个摄像头都固定好了,通过反复多次实验来修正偏差值。
神经网络在树莓派上跑不动,视频又不知道该怎么传输(因为以前没有接触过),用分时拍照传输的方式帧率太低了效果太差。离DDL又不远了,在抉择换更好的树莓派还是继续寻找更好的传输视频方法,仔细一想不应该啊网络直播的延迟都不高,局域网内应该更快才对!后来想起了一款VLC媒体播放软件里面有个RTSP推流服务,就找资料尝试了一下这个推流协议,虽然会有零点几秒延迟但足够高清足够流畅,但推流到服务器上完全足以实现我们的功能。
正值疫情期间,没法找到真正发热的人去进行测试,所以我们用暖宝宝把额头捂热,或者把暖宝宝贴在额头上模拟发热人。
7.3 心得
以前都是参加校级、院级的,相比于省级国家级的来说算是小打小闹。这是我第一次参加省级的电子设计大赛,让我充分认识到团队协作的重要性,一个人不可能方方面面都懂,我和Q单独来做都不可能做出这么好的作品来。
另外,一个人做过项目和没做过项目的区别还是挺大的,虽然我以前做的项目属于小打小闹,虽然在此作品开发过程中也会遇到各种各样的问题,但是我知道怎么去查找答案,怎么去调试,怎么去解决问题,能够在短时间内找到方法并解决问题。
一个好的方向,以及系统整体的架构是十分重要的,这两个直接影响到是否能够成功,选对了方向和题目,架构合理,基本上就成功了一半了。虽然具体的技术细节也重要,但只是影响进度、完成的质量。
一定要多接触生活,多从用户的角度考虑问题,找到需求点解决用户的难题。