前言: 自大一暑期接触到了RTOS系统,作为国产实时操作系统RT-Thread的学习者之一,在2022嵌入式芯片与系统设计大赛中获得省三其结果并不如意。因此时隔一年,大二暑假二战嵌入式大赛,成功晋级复赛答辩,最终止步国赛,仅把本次的作品作为一个分享。
本文包含了作品功能 应用场景 以及技术原理和程序。主要 物联网IOT RTT 多传感器融合 疲劳检测 GC0328 多媒体扩展版 ART-PI
作品名称:基于嵌入式AI的货车司机预警系统 代码已全部开源 训练集已分享至我CSDN的资源当中。
github.comhttps://github.com/Snow-Scenic/safe--transportation
第一部分 设计概述
1.1 设计目的
“公路货运” 作为我国综合运输体系中不可或缺的组成部分,其业务量连年攀升,在刺激经济发展的同时,也存在不可忽视的交通安全隐患,不仅成为运输活动中的不安全因素,也是社会的经济发展产生负面影响。 因此,探究货车司机的异常驾驶行为,分析货车司机自身属性及异常驾驶行为对其驾驶安全的影响机理,提出相应可行的防控措施,对于减少货车司机涉入事故的频率和事故严重性,提升货运运行业安全系数,具有重要的理论意义和应用价值。
1.2 应用领域
该作品广泛应用于运输行业, 以提高货车司机的安全性和工作效率。 以提前发现可能发生的危险情况, 并及时提供警示和预警, 从而保障货车司机道路行驶安全。
长途运输: 货心安监测司机的眼神、 脸部表情、 姿势等多个指标, 一旦发现疲劳、 分心或者打瞌睡的迹象, 系统将及时发出警报提醒司机休息或采取相应的措施, 以防止道路事故的发生。
运输救援: 在紧急救援任务中, 货心安可以迅速进行响应, 并提供相关的预
警。 无论是交通意外还是自然灾害, 货心安通过检测司机的身体状况和行为,
可提前预判可能的危险情况, 并向司机发出警示, 协助他们采取适当的措施,
从而保护货车司机和相关救援任务的顺利进行。
1.3 主要技术特点
(1) 嵌入式 AI:
基于 darknet 架构, 改良后的 yolo-fastest 算法, VOC2007/2012 数据集训练神经网络, 并通过模型量化最终得到 tflite 类型文件, 使用 RT-Thread 团队为RT-Thread 实时操作系统所开发的 AI 套件 RT-AK 将 AI 植入到 Art-Pi 上, 实现AI 模型在边缘设备上的运行。
(2)北斗卫星定位对接高德地图 API 在 Onenet 平台在线实时监控:
以 STM32H750XBH6 为主控基于 AP6212WIFI 模块以及 NEO-6M 北斗卫星定位将实时获取司机所在经纬度坐标, 通过对接高德地图 API 函数实时显示司机位置。 通过坐标转换将实时信息发送至后端服务器 Onenet 平台。
(3)多传感器信息融合实现实时状态检测
我们对 MAX30102 内部的寄存器进行读写操作, 就可以得到转换后的光强度数值。 最后通过处理算法计算出心率值和血氧饱和度。 同时在车内外安装DHT11 模块, 检测气温、 湿度等对司机状态检测的同时可以对危险进行及时预测, 最终将多信息融合显示在 IOT 实时显示页面。
(4)作品轻灵小巧
为了是我们的作品得到广泛应用, 在车辆上进行放置与使用, 我们自主设计了一套轻便、 小型外壳。 在满足硬件放置需求的同时最小化产品, 方面使用与携带。
2
1.4 关键性能指标
1. 识别精准度:
模块的核心是利用 RT-Thread 团队开发的 AI 套件: RT-AK 将我们所训练的神经网络模型一键部署到 RT-thread 项目中, 通过编写应用层代码, 对人体进行表情, 面部的识别。 我们通过删减神经网络层数, 去掉特征金字塔输出, 经过模型转换和量化所得到的 tflite 权重文件仅有 144k, 如表 1 所示,成功部署在 RT-Thread 项目后, 每张图片推理时间约 50ms。
表 1 模型推理时间
Model | MACC | Inference | Size |
person_pilaodetection. tflite | 6.5 M | 50ms | 144k |
2. 多传感器融合信息处理速度:
多传感器融合信息处理速度是实现高效、 实时的危险预测和保护的关键因素之一。 因此我们在硬件上采用硬件优化通过选择高速、 低延迟的传感器设备,并配备高性能的处理器 STM32H7XBH6, 以提高数据的采集和处理效率。 数据压缩与降维对传感器数据进行适当的压缩和降维处理, 以减少数据量和计算复杂度, 从而提高处理速度。 建立实时反馈机制, 及时将处理结果返回给驾驶员, 以确保即时的危险预测和保护措施的执行。
3. 续航能力:
续航能力会直接决定我们作品的使用时长, 在长途运输过程中运输时间可能长达 67 小时。 这就要求作品可以满足长时间的使用与预测。 因此为了保证系统的性能不受长途运输时间而降低, 我们采用低功耗的处理器和组件。 当定位长时间不动联合多传感器数据判断是发生事故还是司机休息, 进行设置合理的待机和休眠模式。
1.5 主要创新点
(1) AI 模型优化及轻量化
边缘设备资源有限, 大型神经网络不适用于边缘设备。 进行神经网络训练时,为了使最终得到的 AI 模型能够运行在 Art-Pi 上, 我们去掉了特征金字塔输出,只保留一个输出, 同时删减网络结构, 将网络层数由 100+删除到 20+, 保证对人体的检测有效, 经过后续将 yolo-fastest 模型转换成 keras, 最终转换成 tflite,成功地植入 Art-Pi 进行图像推理。
(2) 北斗卫星定位实现司机行径全追踪
利用北斗卫星定位系统, 可以对货车司机的行为进行全面的监测和追踪。 在行驶过程中, 可以通过北斗卫星定位系统获取到货车的实时位置, 并将这些数据传输到后台服务器进行处理和分析。 通过中国移动物联网平台 Onenet 可在线实时对位置数据的分析, 可以了解货车的轨迹、 行驶路线、 停留位置等信息, 从而实现对司机行径的全面追踪。
(3) 多传感器融合预测危险保护司机
在嵌入式 AI 的基础上, 通过心率, 血氧, 温度, 湿度等多方面传感器的数据进行融合处理, 可以提高对危险情况的感知准确性和覆盖范围, 从而更好地保护驾驶员的安全。 基于这些预测, 车辆可以采取主动的安全措施, 例如提前制动、发出警示信号等, 从而降低事故的风险, 保护驾驶员和乘客的生命安全。
第二部分 系统组成及功能说明
2.1 整体介绍
整个预警系统由北斗卫星模块、 ART-PI 开发板、 ART 多媒体扩展版、 MAX30102、
GC0328 摄像头、 WIFI 模块共 6 个部分组成。
作品硬件设计框架如图 1:
图 1 作品设计硬件图
2.1.1 软件部分
我们的作品软件系统主要体现在STM32H750XBH6 的嵌入式AI 部署模型的训练以及摄像头, 多媒体扩展版, 北斗卫星定位和多传感器的信息处理与融合。
软件设计架构如图 2 所示:
图 2 软件设计结构
工作流程图如图 3 所示:
图 3 软件流程图
程序启动后, 先进行串口和摄像头初始化以保证后续程序正常执行, 从摄像头获取每帧画面经过图片预处理后输入部署上的神经网络进行推理, 得到推理结果后显示在多媒体扩展版的 LCD 屏上, 同时通过识别眼神, 面部判断是否疲劳进行示警与提醒。 通过多传感器融合判断司机状态, 对潜在的危险进行预测, 北斗卫星以及多传感器连接物联网平台 Onenet 实现实时查看数据。 保卫司机安全。
2.2 各模块介绍
2.2.1 硬件模块介绍
(1) 疲劳检测模块
主要由 ART-PI STM32H750XBH6 为主控, 通过数据集训练 yolo-fastest 模型并
部署到 ART-PI 上。 同时配载 GC0328 摄像头, 对采集到的图像进行实时推理, 最
终将识别结果显示在 3.5 寸的 LCD 屏上。 下图为部署成功提示:
图 4 模型部署
主控上根据模型与算力的实际要求采用ST意法半导体公司最新H7系列的高性能单片机, 其中 128 KB Flash 和采用分散架构的 1 MB SRAM: 用于在最低功耗模式下保存数据的 192 KB TCM RAM(包括 64 KB 的 ITCM RAM 和 128 KB 的 DTCMRAM, 用于时间关键型程序和数据) 、 512 KB、 288 KB 和 64 KB 的用户 SRAM 以及 4 KB 的备份域 SRAM 足够满足我们的设计需求, 下图为 STM32H750XBH6 的实
物图:
多媒体拓展版和摄像头: 3.5 寸 LCD 显示屏, 摄像头 gc0328, 摄像头与拓展版通过排线连接, 摄像头拍摄视频, 显示在屏上, 显示屏主要用于开发过程中的调试, 可直观地显示疲劳检测是否识别成功。
训练模型:
模型采用 yolo-fastestv2 模型训练。 在训练中采用 7000+数据集为基础,通过图像增强扩大图片泛化程度。 以提高识别的准确性。 并在得到模型 h5 文件后通过量化降低文件大小, 而不影响模型准确性。 在单片机上更好的运行和使用。训练模型中采用 Tensorflow 和 CV2 对图像进行训练, 用准备好的数据集打上标签进行 resize 统一大小之后进行卷积神经网络学习最后通过选择损失函数,优化器, 精选评估对模型进行优化。 最后将 h5 模型中的 float 类型转换成uint8 量 化 处 理 导 出 tflite 模 型 部 署 进 入 RT-thread 工 程 。 选 择yolo-fastestv2 是因为 MobileNetV2 是一个轻量型卷积神经网络, 使用深度可分离卷积, 相比较于 v1 来说 V2 引入残差结构, 先升维再降维, 增强梯度的传播, 显著减少推理期间所需的内存占用去掉 Narrow layer 后的ReLU, 保留特征多样性, 增强网络的表达能力。
V2 网络为全卷积的, 使得模型可以适应不同尺寸的图像; 使用 RELU6 激活
函数, 使得模型在低精度计算下具有更强的鲁棒性。
图 7 训练模型后量化及测试折线图
图 8 多媒体扩展版和 GC0328 实物图
最后对于数据集的丰富性和泛化, 我们针对司机的年龄分布进行数据集补充, 对各个年龄阶段的数据集都做出训练, 确保训练后的模型可以应对多种变化而提高准确性, 调试后部署到工程中进行使用。
(2) 北斗卫星对接高德地图并显示在 Onetnet 物联网平台上
我们实现北斗定位功能采用的是 neo-6m 模块, 它是一种 GPS 模块, 用于位置定位和导航。 neo-6m 模块基于 GPS 技术, 通过接收卫星信号来确定设备的精确位置。 它使用 Ublox 6 高性能 GPS 引擎, 支持多个卫星导航系统(如中国的北斗、 美国的 GPS、 欧盟的伽利略系统等) 以提供更高的定位准确性和可靠性。 并且该模块具有小巧轻便的设计, 方便集成到各种设备中, 如车载导航仪、 无人机、智能手机和手持设备等, 因此它在我们基于嵌入式 AI 的货车司机预警系统是很适用的。 它可以通过简单的串口连接到主控制器, 并通过 NMEA 协议提供定位和时间信息。neo-6m 模块还具有低功耗特性, 对于移动设备而言, 非常适合节省电力消耗。 另外, 它还支持辅助 GPS(A-GPS) 功能, 可以通过网络获得辅助数据以加快定位速度。 总之, neo-6m 模块是一种功能强大、 易于使用的 GPS 模块,可以广泛应用于各种需要位置定位和导航功能的设备中。 下图为 neo-6m 的实物图以及数据可视化显示图:
图 9 定位模块实物效果图
我们通过本模块得到的经纬度数据, 通过 esp8266 将数据上传到云端, 对接高德地图 API, 从而可以获得司机的实现位置, 并且可以实现在地图上的可视化显示。 当司机身体状况不良时, 可以第一时间获取司机实时位置, 从而避免危险事故的发生。 同时家人也可以实时查看司机的位置, 避免因为担心而拨打电话导致引发司机因接听电话而造成的危害。
(3) 多传感器融合实时显示司机多方面状态
基于多传感器、 信息融合技术来实时检测司机的身体状况和车内外环境情况,采用 DTH11 分别来读取车内和车外的温湿度, 从而判断司机在驾驶过程中身体周围的环境情况。 采用 MAX30102 模块, 通过持续监测司机的心率和血氧饱和度,可以收集大量的健康数据, 并且基于预测算法根据以往数据和当前数据去预测可能发生的风险。
DTH11 读取环境情况:
DHT11 是一种数字温湿度传感器。 它的工作原理是基于一个温湿度敏感元件和一个由微处理器实现的数字信号输出。 DHT11 传感器使用单总线数据通信协议,并能够提供精确的温度和湿度测量。 DHT11 传感器的工作范围为 0-50 摄氏度的温度和 20-90%相对湿度。 它具有低功耗、 高精度和稳定性的特点。 传感器内部有一个射频传感器, 能够快速响应温度和湿度的变化, 并将测量结果通过数字信号输出。 它的低成本和易于使用在我们本项目中非常适用。 下图为 DTH11 的实物图:
通过 DTH11 读取环境情况可以保障司机健康与安全, 货车司机在长时间驾驶过
程中, 受到高温和高湿度环境的影响可能导致身体不适甚至危险。 通过监测温湿
度, 可以预测出潜在的高温高湿度危险, 及时采取必要的措施, 如调整空调温度、
湿度等, 保证司机的健康与安全。
MAX30102 读取司机身体状况:
MAX30102 是一种集成了红外光传感器和心率传感器的模块。 它可以用于非侵入性地监测人体的心率和血氧饱和度。 MAX30102 模块采用了无线连接技术, 可以通过蓝牙或其他无线连接方式与外部设备进行通信。 该模块使用红外光传感器和脉冲氧饱和度技术来测量心率和血氧饱和度。 红外光传感器可以通过皮肤探测心率, 并通过特殊算法计算出心率值。 脉冲氧饱和度技术使用红外光和红光来测量血液中的氧饱和度, 也可根据计算得出的结果显示脉搏波形。 MAX30102 模块可以与微控制器或移动设备进行通信, 并通过 I2C 或 SPI 接口传输数据。 此外,该模块还具有可编程的报警功能, 可以设置心率和血氧饱和度的阈值, 并在超过或低于设定值时触发警报。 MAX30102 模块广泛应用于医疗健康领域, 它可以提供实时的心率和血氧饱和度数据, 用在我们货心安项目中, 帮助货车司机了解自己的健康状况, 并在需要时采取相应的行动。 下图为 MAX30102 的实物图:
通过 MAX30102 读取司机的心率和血氧饱和度, 可以进行疲劳监测: 货车司机的工作通常需要长时间的专注和集中注意力, 特别是在夜间或长途运输中更易疲劳。 监测司机的心率和血氧饱和度可以帮助检测疲劳状态, 及时采取相应的措施,如提醒司机休息或进行必要的调整, 以确保司机的安全和健康。 并且可以进行预防性医疗管理: 通过持续监测司机的心率和血氧饱和度, 可以收集大量的健康数据, 并与其他相关的工作和生活因素进行分析。 这有助于了解司机的健康状况,并采取预防性的医疗管理措施, 如定期体检、 健康教育和生活方式改善等, 以维
持司机的整体健康。
(4) ESP8266 连接 Onenet 物联网平台实现数据上传云端
ESP8266 是一款低成本、 低功耗的 Wi-Fi 模块, 由中国乐鑫科技开发。 它内置了处理器和 Wi-Fi 协议栈, 具有良好的无线通信能力。 ESP8266 的高度集成化使得系统设计简化, 外围元件的数量减少, 有利于成本控制和快速上市。 同时,ESP8266 的低功耗架构设计使其在待机模式下功耗极低, 非常适合电池供电的场景。 ESP8266 具备丰富的接口和功能, 包括多个 GPIO 口、 UART 串口、 ADC 接口以 及 I2C 和 SPI 总 线 接 口 等, 可 以 方 便 地 与 其 他外 围 设 备 连 接 。 它 支 持02.11b/g/n Wi-Fi 标准, 可以连接到现有的 Wi-Fi 网络, 或者作为 Wi-Fi 热点进行无线通信。 同时, ESP8266 的开发和编程也非常便捷。 开发者可以选择多种开发板和开发环境, 使用广泛的开发工具和编程语言进行开发。 由于其低成本、低功耗和高度集成化的特点, 因此 ESP8266 在我们货心安项目中可以得到广泛应用。 下图为 ESP8266 实物图:
图 12 ESP8266 实物图
我们采用 OneNET-中国移动物联网开放平台作为云端平台。 平台能够帮助我们轻松实现设备接入与设备连接,,实现物联网设备的数据交互。 像心率, 面部状态, 实时位置等数据的获取,存储和展现。
图 13 设备的连接
图 14 数据的获取
图 15 数据的储存
第三部分 完成情况及性能参数
1) 心率检测的准确度
手指直接按压 MAX30102 可能会出现压力变化, 压力变化会对传感器数值产生影响(压力较小时会检测不到, 会使数据输出默认值-999) 。因此对于该传感器进行准度的测量, 以判断数据的准确度。以下数据均为多次测量的平均值(除去默认值) , 部分实物截取图如
图 3.1:
表 2 心率精度误差分析表
MAX30102(次数 /min) | 小米手机检测(次 数/min) | 误差 % |
74 | 73 | 1.369 |
68 | 70 | 2.857 |
75 | 74 | 1.351 |
74 | 76 | 2.631 |
图 3.1 MAX30102 部分数据与小米手机检测数据的其中一组该性能是用于分析在遇到突发情况的行驶过程中, 驾驶员的心率变化情况。 一般情况, 在遇到突发情况下驾驶员的心率变化有一个明显的突变,而本产品就是根据心率的突变程度进行分析, 即时做出预警, 例如图 3.2所示的部分心率变化图。 因此对于此识别度完全可以满足本项目的使用。
图 3.2 部分心率变化图
(2)量化后模型的推理速度以及准确度
利用 RT-Thread 团队开发的 AI 套件: RT-AK 将我们所训练的神经网络模型一键部署到 RT-thread 项目中, 通过编写应用层代码, 对人体进行表情, 面部的识别。 我们通过删减神经网络层数, 去掉特征金字塔输出, 经过模型转换和量化所得到的 tflite 权重文件仅有 144k, 如上述表 1 所示, 成功部署在 RT-Thread项目后, 每张图片推理时间约 50ms。
表 1 模型推理时间
Model | MACC | Inference | Size |
person_pilaodetection. tflite | 6.5 M | 50ms | 144k |
图 16 9 种目标检测网络
(3)北斗定位的准确性
对于北斗卫星采集到的数据, 我们可先用串口输出, 然后进行图像可视化。 对于位置信息的可视化, 我们可以直接采用 GPS 经纬度测试工具 v2.0 进行可视化,也可以将采集到的数据上传到 onenet 平台, 然后对接高德地图 API 进行实时显示。 串口输出的数据, 其不同的命令对应不同的数据, 下图为命令对应的文字说明。
图 17 命令文字说明图
我们 neo-6m 模块在上电瞬间会先定位, 由于位置信息会受到卫星信号强弱的影响, 因此从 GPS 模块里面接收到的信息不一定就是有效的位置信息。 如果定位失败, 模块会返回类似下图这样的信息。
图 18 串口无效信息图
如果卫星信号足够强, 定位数据有效, 那么模块会返回类似下图这样的信息。
图 19 串口有效信息图
对于 GPS 经纬度测试工具 v2.0 的可视化, 我们可以先从串口输出信息中的提取出经纬度信息, 然后再输入到经纬度测试工具中进行图像可视化, 下图为经纬度测试工具得到的结果与手机上高德地图 APP 得到的结果的对比图。
对于上传到 onenet 平台对接高德地图 API 实现云端实时观测, 其主要步骤为:
一、 准备 API 密钥: 在高德地图开放平台上申请一个 API Key, 用于调用高德地图的 API 服务。 二、 获取设备的位置信息: 通过 OneNET 平台的数据接口, 获取设备上传的位置信息。 三、 格式化数据: 将从 OneNET 获取的位置数据按照高德地图 API 的要求进行格式化, 通常需要将经纬度坐标转换为高德坐标系(GCJ-02),并将其他相关数据也进行格式化。 四、 调用高德地图 API: 使用获取到的 API Key调用高德地图API服务, 将格式化后的位置数据传递给相应的API接口进行处理。五、 处理返回结果: 接收高德地图 API 返回的结果, 根据需要进行相应的处理。可以将结果展示在网页、 移动应用程序或者其他数据分析系统中。 下图为展示在网页端的结果与手机上高德地图 APP 得到的结果的对比图。
分析: 由图 20 与图 21 可知, neo-6m 对接北斗卫星得到数据与实际数据有一定的误差, 其主要原因可能在于: 卫星的分布和遮挡情况会影响定位的准确性。 如果接收器周围有高楼、 树木等遮挡物, 会影响接收器与卫星之间的可见性, 从而导致误差。 天线安装位置、 方向和高度的选择也会影响 GPS 定位的准确性。 如果天线被障碍物阻挡或安装位置选择不合理, 也可能导致定位误差。下图为我们自制的物联网实时显示页面: