疲劳驾驶一直是交通界的焦点与痛点,每年都有大量司机因疲劳驾驶导致伤亡。传统的疲劳驾驶预防,大都基于司机 自身角度,通过正常的作息和合理的行车安排来提前减少疲劳驾驶发生的可能性,而未能从疲劳驾驶已经可能发生的角度及时的避免疲劳驾驶的继续。
从这个角度出发,我们将传统的疲劳驾驶预防与提醒方式,与人脸识别结合,设计了疲劳驾驶监测与提醒装置。可以识别抽烟、喝水、使用手机、闭眼、睁眼、闭嘴、张嘴等行为状态。
注:本项目为2022中国大学生计算机设计大赛RT-Thread@中智讯物联网专项赛参赛作品。项目已在github上整体开源,赛后将在本论坛整体开源,这里只做部分代码及流程解释。
使用平台:RTT—DracoAI套件
模型部署插件:RT-AK
代码编写工具:RT-Thread Stdio 2.1.5
我就不按比赛要求写那种产品介绍类的东西了,技术平台直接上干货,模型部分使用yolo-fastest,模型流程图如下
使用RT-AK进行部署
基础运行命令
python aitools.py --project= --model= --model_name= --platform=k210 --clear
示例
$ D:Projectedge-aiRT-AKrt_ai_tools>python aitools.py --project=D:ProjectK210_Demok210_rthread_bsp --model=.Modelsmnist.tflite --model_name=mnist --platform=k210 --embed_gcc=D:Projectk210_third_toolsxpack-riscv-none-embed-gcc-8.3.0-1.2bin --dataset=.platformsplugin_k210datasetsmnist_datasets
部署成功示意图
在RT-Thread stdio中工程目录下更新软件包,将会使用到LCD,Camera,USART做监控串口,SPI1(wifi),以及co2传感器使用的i2c。setting中配置图如下
接下来就是软件包的包含,使用了sgp30和gps_rmc,rw007驱动软件包会自动包含,具体配置不做赘述(rw007驱动记得改频率不然用不了),会在整体开源后补充。
这里展示以下部分代码流程截图,首先进行硬件初始化和模型初始化
之后为了保证流畅运行,各外设进行了多线程的创建和处理
这里遇到了一个神奇的bug,将摄像头采集的图片裁剪后放入kpu中会倒是kpu的图像失败
只有不裁剪的240*320图片直接进入kpu中才能完美显示,这里重写了一个image_seg函数解决了这个问题,进入模型进行运算并对运算结果进行处理
之后就是屏幕显示onenet上传图片巴拉巴拉的就可以了,上传图片使用了http post,onenet自己的那个软件包不好用,这里就不赘述了。模型各类别的准确度如下图
因为抽烟这样的行为在屏幕中表现的实在是太小了,准确度相较于其他略有下降,在RTT-Draco上的运行时间约为360ms。这里没有办法插入视频,就从视频里截了一张识别的效果图。
到此,该项目完成了车辆定位,车内co2浓度检测,驾驶员不良行为检测等功能,且具备了声光震动提醒,基本符合疲劳驾驶监控系统的定位和要求。