# pre **Repository Path**: jayerhot/pre ## Basic Information - **Project Name**: pre - **Description**: 基于鸿蒙操作系统检测疲劳驾驶 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 2 - **Created**: 2023-11-05 - **Last Updated**: 2025-06-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于OpenHarmony操作系统实现疲劳驾驶检测 ## 一. 介绍 长时间驾驶和疲劳驾驶是引发交通事故的主要原因之一。为了提高道路交通安全,减少交通事故的发生,本项目旨在开发一款基于鸿蒙操作系统的车辆驾驶员疲劳检测系统,通过监测驾驶员的生理和行为迹象,提前发现疲劳迹象,减少交通事故风险。OpenHarmony 是一个全场景、分布式操作系统,可以应用于多种设备和场景,包括汽车智能驾驶领域。利用 OpenHarmony 操作系统的优势,可以在车辆中实现疲劳驾驶检测,为驾驶员提供及时的安全保障,降低交通事故的发生率。 演示视频:插入视频 项目产出及主要功能介绍: 1. 开发一种基于鸿蒙操作系统的疲劳驾驶检测系统 2. 实时监测驾驶员的疲劳程度,准确判断是否存在疲劳驾驶行为 3. 及时发出警报,提醒驾驶员采取措施来避免事故的发生 ## 二. 文档使用说明及目录结构 ### UI界面 ![输入图片说明](displaypic/pic1.png) ### 目录结构 ![输入图片说明](displaypic/pic2.png) 红圈为当前项目启用页面,其他暂时未启用。 ### 程序入口 程序入口为Index.ets ![输入图片说明](displaypic/pic3.png) 基本对应关系如图,每个TabContent有对应的页面组件。 1. 主页Home页面组件入口为,component/Home.ets 2.AI视频测试页面组件入口为,component/Test.ets 3.OTA升级页面组件入口为,component/Upgrade 4.设置页面组件入口为,component/Settings ## 三. 系统架构 系统流程图 插入图片 ## 四. 项目主要创新点 ### 创新点: #### 1.采用基于鸿蒙操作系统的移动APP,实现与车载设备的连接,方便驾驶员使用和管理。 #### 2.基于人工智能技术,通过对面部特征和眼睛状态的分析,准确判断驾驶员是否存在疲劳驾驶的行为,提高检测的准确性和实时性。 #### 3.通过将检测结果与车辆控制系统相结合,实时发出警报,提醒驾驶员采取措施来避免事故的发生,从而有效降低疲劳驾驶的风险。 ## 五. 页面组件 ### Home页面组件 /component/Home.ets,主要组件为cameraComponent和结果显示组件 ![输入图片说明](displaypic/pic4.png) 子组件cameraComponent,由component/Camera.ets导出 ### camera.ets 该页面提供cameraComponent组件,在Home页面中引用,该组件负责完成摄像头渲染,以及端侧云测服务的启动。 ![输入图片说明](displaypic/pic5.png) 其中: ①. build() 初始化基础UI页面 ②. takePic() 拍照函数,实现一次拍照,并且将数据存入图片缓冲区中imageRecevier,注意该缓冲区只能存三张图片,需要调用一次读取操作,并且释放一次图片,缓冲区空位才能+1。 ③. photoReceiver(),初始化图片缓冲区,在prepare()中被调用。 ④. prepare()函数用于初始化摄像头,该过程中拍照输出流与imageRecevier通过photoReceiver()函数绑定。 ⑤. onResListen()中订阅缓冲区新增图片事件的订阅,一旦缓冲区有新图片产生,就会通知该函数的回调函数去处理图片。 一个基本的数据流如下: 1. 点击端检测,触发间隔拍照和模型加载 ![输入图片说明](displaypic/pic6.png) 2.随后开始间隔拍照 ![输入图片说明](displaypic/pic7.png) ![输入图片说明](displaypic/pic8.png) 拍照成功后,图片缓冲区会更新,在prepare()摄像头阶段中,photoReceiver已经调用过了,在该函数中我们发送了有新图片的更新事件,事件id为3。 ![输入图片说明](displaypic/pic9.png) 由于在页面初始阶段,事件3已经被订阅,此时订阅过程中设置的回调函数被触发,在该函数中我们调用imageReceiver的成员函数readNextImage(),读取缓冲区的图片,调用端检测或者云检测。 ![输入图片说明](displaypic/pic10.png) 这里我们调用的是端检测,FatigueDetect.predict (/ai/FatigueDetect.ets),传入图片buffer,详细处理过程参考/ai/FatigueDetect.ets,最终结果会被如下函数处理: ![输入图片说明](displaypic/pic11.png) 不难看出,我们又发送了一个事件,该事件eventID为1,其作用是用于通知UI更新结果,在Home.ets中,我们订阅了该事件,那么结果更新的时候我们就能收到该结果。 在Home.ets中,我们订阅了对eventID-1事件的通知,一些全局常量可以在 Utils/Constant 中查看 ![输入图片说明](displaypic/pic12.png) ### 其他组件 ## 六. 工具类 ### ai/FatigueDetect 提供本地mindspore-Lite推理服务 ### utils/AIServer 提供与边缘设备K210通信服务 ## 七. 常见问题解决 ## 八. 参考资料