B6:E教中国▪创客教育 上一版 下一版

《江苏科技报·教育周刊》(双周刊,国内统一刊号CN32-0019),是江苏省唯一以社会立场透析当代中国教育的报纸。秉承“科技推动教育,教育改变人生”的理念,《江苏科技报·教育周刊》一直注意保持与教育前沿工作的密切联系,定位于教育宏观研究,兼顾微观探讨,注重教育文化生态的构建与引导,时刻关注鲜活的教育实态,着眼于教育文化的深层构建,努力赋予教育以深厚的文化内涵,致力打造中国最好的教育媒体。

国内统一刊号:CN32—0019
编辑部地址:江苏省南京市鼓楼区中山路55号新华大厦48楼

第418期 总第6080 2021年11月15日 星期一
返回首页
作者 内容  上一期  当前第418期  下一期
疲劳驾驶AI提醒器
来源:本站原创 作者:主讲人:宋秀双 发布日期:2021-11-15 16:21:27

宋秀双  河北省张家口市涿鹿县涿鹿中学信息技术教师,曾荣获张家口市信息技术教学新星、张家口市学科带头人等称号。所做课程荣获河北省“优秀示范课”,辅导的学生曾获“童创未来”全国青少年人工智能创新挑战赛金奖、河北省第五届中小学教育机器人暨创客竞赛创客项目高中组一等奖。

 

 

教学背景


汽车在给我们带来方便的同时,也带来了隐藏的危险。我国现有的汽车保有量约为3亿辆,在这么庞大的车辆数目面前,交通事故也是频频发生。其中,因为疲劳驾驶所引发的车祸数不胜数。因此,本节课带领学生制作一个疲劳驾驶AI提醒器,期望能在驾驶员因疲惫困倦而打瞌睡时,第一时间响铃或亮灯示警,避免更多交通事故的发生,保障生命安全。


教学目标


1.学会在Mind+的Python模式下,安装pinpong库、face_recognition人脸识别库;


2.掌握EAR人眼疲倦检测开源算法,应用数学两点距离公式;


3.利用face_recognition人脸识别库获取人眼坐标,感受人工智能;


4.学会在Mind+的Python模式下,通过编程实现pinpong库与micro:bit通信,掌握用Python代码给各种常见的开源硬件编程的方法。


5.学会积极观察身边发生的事情并发现问题,然后从中找到解决问题的办法,在生活中养成良好的安全意识。


教学重点与难点


教学重点  EAR人眼疲倦检测开源算法原理及其使用方法。


教学难点  实现pinpong库与micro:bit通信。


教学过程


一、情境导入


师:货车司机赵某2021年8月3日上午从山东出发前往陕西送货,连续驾车13个小时,严重疲劳驾驶的赵某不由得打起瞌睡,导致货车失控,撞上护栏。同学们坐车时有没有发现司机疲劳驾驶呢?你当时是怎么做的?


学生思考、回答。


师:对,我们发现后应及时提醒司机停车休息,避免发生交通事故。有没有更智能的方法来解决这个问题呢?我们可以用摄像头来监控司机的眼睛,利用人工智能算法判断司机是否瞌睡,并进行语音提醒。今天老师就带领大家使用摄像头和micro:bit扩展板制造出一台疲劳驾驶AI提醒器。


二、知识讲授


(一)EAR人眼疲倦检测开源算法


EAR(eye aspect ratio)计算函数是指利用眼睛纵横比,判断眼睛是睁开的还是闭合的,从而检测眨眼动作,判断人是否疲劳。首先需要确定眼睛的位置,在确定眼睛位置之后,选择6个点来表示眼睛,然后顺时针绕着眼睛进行编号,编号的顺序是从眼睛的左角开始,如图1所示。



根据这6个点,我们便可以判断眼睛睁开和闭合的状态。当眼睛睁开的时候,上图中竖着的黄色箭头相对比较长,而眼睛闭合(疲劳状态)时,这个箭头就会变短。由于观看的距离不同,单纯用高度来表示状态缺少参考比较,因此提出如下公式表示眼睛的状态:



点间距离的计算可参考数学课上学过的两点间距离公式:



通过大量测试,分析统计结果发现,一般当EAR小于0.25时,眼睛便是疲劳状态。


(二)face_recognition人脸识别库


师:face_recognition是世界上最简单的人脸识别库,通过Python语言或命令行对图像进行人脸识别操作。它使用Dlib最先进的人脸识别技术构建而成,并具有深度学习功能。


首先打开Mind+软件,选择Python模式中“库管理”的“PIP模式”安装face_recognition人脸识别库,然后再去识别人脸关键点。使用电脑内置摄像头加载图像后,face_recognition库中相关函数可识别出人脸关键点信息,参数是加载的图像image,返回值是包含面部特征字典的列表,列表中每一项对应一张人脸,包括鼻子、眼睛、嘴唇、下巴等部分的信息,每个部分包含若干个特征点,总共有68个特征点。列表长度就是图中识别出的人脸数。


教师讲解并演示识别结果。


(三)程序编写


1.提取两眼坐标并计算眼睛纵横比


每只眼需要提取6个轮廓坐标点,共12个。EAR计算函数方程的分子是垂直眼睛标志之间的距离,而分母是水平眼睛标志之间的距离,由于水平点只有一组,却有两组垂直点,所以分母乘以2,以保证两组特征点的权重相同。


2.判断是否处于瞌睡状态


分别计算两眼EAR值,然后取平均值,增加可信度。当平均值小于限定的阈值时,判定为闭眼一次;若长时间闭眼(大于2秒)时,判定为司机瞌睡。使用EAR算法,可避免人眼在图像中近大远小而产生的影响。


教师重点讲解使用平均值的意义、阈值的反复调试,并进行演示操作,如图2。



学生练习并反复调试,设定合理阈值。


三、硬件组装与测试


(一)组装硬件


连接组装OLED显示屏、喇叭、录放模块、LED灯、micro:bit扩展板等设备。教师讲解每个硬件的作用,演示组装过程。


学生以6人为小组,进行分工设计组装。


(二)硬件测试


1.pinpong库测试显示屏


使用micro:bit主控板加扩展板,OLED显示屏连接在IIC接口上。安装pinpong库,教师带领学生进行显示屏测试,编写测试代码让显示屏显示“Hello PinPong”,如图3。



学生可自行设计,显示不同的内容。


2.pinpong库测试LED灯


将LED灯接在扩展板的P12引脚上,编写测试程序实现LED灯1秒闪烁1次。测试代码如下。


import time
from pinpong.board import Board,Pin
Board("microbit").begin() #初始化,选择板型和端口号,不输入端口号则进行自动识别
led=Pin(Pin.D12, Pin.OUT) #引脚初始化为电平输出
k=0
while True:
  k=1-k
  led.value(k)   #闪灯
  time.sleep(1)  #等待1秒 保持状态


教师讲解程序代码,并说明如何实现LED灯循环闪烁。


学生在掌握基本方法后,可小组讨论,利用其他方法实现LED灯闪烁。


3.pinpong库测试录放模块


录音模块接在扩展板的P14引脚上。测试代码如下。


import time
from pinpong.board import Board,Pin
Board("microbit").begin() #初始化,选择板型和端口号,不输入端口号则进行自动识别
sound = Pin(Pin.P14, Pin.OUT)  #引脚初始化为电平输出
while True:
  sound.value(1)  #输出高电平
  time.sleep(0.1)  #等待0.1秒 保持状态
  sound.value(0)  #输出低电平
  time.sleep(3)  #等待3秒 保持状态


学生自己录制“提醒音”,并进行测试。


师:通过以上讲解,请同学们整合一下各个分解任务的程序,形成完整程序。


学生组内明确分工,合作完成任务。学生小组讨论,不断地调试、修正、完善程序,并在此过程中培养沟通、团结合作的能力。(完整代码扫描二维码获取)


四、拓展与提升


师:其实,我们生活中有很多场合都需要注意及时休息或提高注意力,如长时间加班工作、上网课时……怎样在我们疲劳瞌睡时,有一个更有效的提醒方式?请根据本节课所学的教学内容,使用如树莓派、熊猫板等制作一款疲劳AI提醒器,并尝试改进它的不足之处。


教学反思


本课通过制作疲劳驾驶AI提醒器,让学生学会观察生活,发现生活中经常遇到的问题,然后通过学习新的技术寻找解决问题的方法。本课例是一个综合性项目,不仅有开源硬件和开源算法的运用,还涉及人工智能,既培养了学生的思维能力,又培养了学生使用新技术解决实际问题的能力,提升了学生的综合素质。


(本课件由DF创客社区推荐)

发表评论
评论标题:
评论内容:
(500字符)
验证码: 看不清楚,请点击我
    
本网站所有内容属《江苏科技报·教育周刊》所有,未经许可不得转载
编辑部地址:江苏省南京市鼓楼区中山路55号新华大厦48楼
ICP备案编号:ICP备案编号:苏ICP备05076602号