点击 蘑菇云创造 关注我们
疲劳驾驶AI提醒器
汽车在给我们带来方便的同时,也给我们带来了隐藏的危险,我国现有的汽车保有量已经达到了3亿辆,这么庞大的车辆数目面前,交通事故也是频频发生。据悉,每年因此死亡的人数就高达10万人。
疲劳驾驶的危害我想每个人都知道,开车时切不可疲劳驾驶,因为疲劳驾驶所引发的车祸数不胜数。
根据相关的法律规定,每个人开车的时候如果超过4个小时就属疲劳驾驶,驾驶员处在疲惫、困倦的状态中时,会导致判断能力下降,在遇到危险的时候,根本不能像正常的驾驶员一样在最短的时间内作出判断。不止如此,还会使驾驶员的操作能力呆滞,也可能会一时糊涂把油门当作刹车踩下去,甚至有的驾驶员在开车时完全睡着,最后失去对车子的控制,造成车祸人亡的局面。
项目功能
我们设计的疲劳驾驶提醒器系统通过人工智能技术对司机的面部人眼动作进行实时监测,发现司机疲劳驾驶,并及时发出语音、灯光警示,提醒司机安全驾驶。
设计思路
本项目,软件使用Mind+Python模式,电脑PC连接摄像头(以后可替换成树莓派或熊猫板等)获取司机人脸图像,通过人脸识别库和EAR算法判定司机瞌睡,通过Pinpong库连接Micro:bit,控制发光发声,提醒司机及时休息。
安装所需库
Mind+Python模式下,通过“库管理”,进行相应库安装。
1.安装opencv-python 计算机视觉库。
opencv-python
2.安装Numpy 开源的数值计算扩展,功能是科学计算,数据分析与处理。
“Numpy”
3.安装Scipy 距离计算库。
“Scipy”
4.安装pinpong 是一套控制开源硬件主控板的 Pyhton 库。
“pinpong”
人眼疲倦检测开源算法
EAR(eye aspect ratio)计算函数
我们首先需要确定眼睛的位置,在确定眼睛位置之后,选择6个点来表示眼睛,具体如下图所示:
标号的顺序是从眼睛的左角开始,然后顺时针绕着眼睛进行编号。
根据这六个点我们便可以表示眼睛的睁开和闭上的状态。当开启的时候,上图中竖着的黄色箭头会变得比较高,而眼睛闭上(疲劳状态)这个箭头就会变矮。但是由于观看的距离不同,单纯用高度来表示状态缺少参考比较,因此提出如下公式表示状态:
用这个数据便可以相对客观的表示眼睛的状态,于是通过大量测试发现一个统计结果,当EAR小于0.25很多的时候,便是疲劳状态。
face_recognition人脸识别库
1、安装
face_recognition使用世界上最简单的人脸识别库,在Python或命令行中识别和操作人脸。使用dlib最先进的人脸识别技术构建而成,并具有深度学习功能。
使用Mind+Python模式中“库管理”的“PIP模式”进行安装:
2、识别人脸关键点
加载图像后,调用face_recognition.face_landmarks(image)可识别出人脸关键点信息,包括眼睛、鼻子、嘴巴和下巴等,参数仍是加载的图像image,返回值是包含面部特征字典的列表,列表中每一项对应一张人脸,包括nose_bridge、right_eyebrow、right_eye、chine、left_eyebrow、bottom_lip、nose_tip、top_lip、left_eye几个部分,每个部分包含若干个特征点(x,y),总共有68个特征点。列表长度就是图中识别出的人脸数,可遍历此列表和字典的键值对,打印出所有面部特征点,也可在图像上画出来,代码如下:
3、提取两眼坐标
4、眼睛纵横比(EAR)函数
# 这个方程的分子是计算垂直眼睛标志之间的距离,而分母是计算水平眼睛标志之间的距离,由于水平点只有一组,而两组垂直点,所以分母乘上了2,以保证两组特征点的权重相同。使用这个简单的方程,我们可以避免使用图像处理技术,简单地依靠眼睛地标距离的比例来确定一个人是否眨眼。
def eye_aspect_ratio(eye):
# 计算距离,竖直的
A = dist.euclidean(eye[1], eye[2])
B = dist.euclidean(eye[4], eye[5])
# 计算距离,水平的
C = dist.euclidean(eye[0], eye[3])
# ear值
ear = (A + B) / (2.0 * C)
return ear
判断瞌睡代码
硬件连接
pinpong库测试显示屏
使用Micro:bit主控加扩展板,OLED显示屏连接在IIC接口上。
pinpong库测试LED灯
pinpong录放模块测试
完整程序代码
视频演示

推荐阅读:

