宋秀雙 河北省張家口市涿鹿縣涿鹿中學(xué)信息技術(shù)教師,曾榮獲張家口市信息技術(shù)教學(xué)新星、張家口市學(xué)科帶頭人等稱號(hào)。所做課程榮獲河北省“優(yōu)秀示范課”,輔導(dǎo)的學(xué)生曾獲“童創(chuàng)未來(lái)”全國(guó)青少年人工智能創(chuàng)新挑戰(zhàn)賽金獎(jiǎng)、河北省第五屆中小學(xué)教育機(jī)器人暨創(chuàng)客競(jìng)賽創(chuàng)客項(xiàng)目高中組一等獎(jiǎng)。
教學(xué)背景
汽車在給我們帶來(lái)方便的同時(shí),也帶來(lái)了隱藏的危險(xiǎn)。我國(guó)現(xiàn)有的汽車保有量約為3億輛,在這么龐大的車輛數(shù)目面前,交通事故也是頻頻發(fā)生。其中,因?yàn)槠隈{駛所引發(fā)的車禍數(shù)不勝數(shù)。因此,本節(jié)課帶領(lǐng)學(xué)生制作一個(gè)疲勞駕駛AI提醒器,期望能在駕駛員因疲憊困倦而打瞌睡時(shí),第一時(shí)間響鈴或亮燈示警,避免更多交通事故的發(fā)生,保障生命安全。
教學(xué)目標(biāo)
1.學(xué)會(huì)在Mind+的Python模式下,安裝pinpong庫(kù)、face_recognition人臉識(shí)別庫(kù);
2.掌握EAR人眼疲倦檢測(cè)開(kāi)源算法,應(yīng)用數(shù)學(xué)兩點(diǎn)距離公式;
3.利用face_recognition人臉識(shí)別庫(kù)獲取人眼坐標(biāo),感受人工智能;
4.學(xué)會(huì)在Mind+的Python模式下,通過(guò)編程實(shí)現(xiàn)pinpong庫(kù)與micro:bit通信,掌握用Python代碼給各種常見(jiàn)的開(kāi)源硬件編程的方法。
5.學(xué)會(huì)積極觀察身邊發(fā)生的事情并發(fā)現(xiàn)問(wèn)題,然后從中找到解決問(wèn)題的辦法,在生活中養(yǎng)成良好的安全意識(shí)。
教學(xué)重點(diǎn)與難點(diǎn)
教學(xué)重點(diǎn) EAR人眼疲倦檢測(cè)開(kāi)源算法原理及其使用方法。
教學(xué)難點(diǎn) 實(shí)現(xiàn)pinpong庫(kù)與micro:bit通信。
教學(xué)過(guò)程
一、情境導(dǎo)入
師:貨車司機(jī)趙某2021年8月3日上午從山東出發(fā)前往陜西送貨,連續(xù)駕車13個(gè)小時(shí),嚴(yán)重疲勞駕駛的趙某不由得打起瞌睡,導(dǎo)致貨車失控,撞上護(hù)欄。同學(xué)們坐車時(shí)有沒(méi)有發(fā)現(xiàn)司機(jī)疲勞駕駛呢?你當(dāng)時(shí)是怎么做的?
學(xué)生思考、回答。
師:對(duì),我們發(fā)現(xiàn)后應(yīng)及時(shí)提醒司機(jī)停車休息,避免發(fā)生交通事故。有沒(méi)有更智能的方法來(lái)解決這個(gè)問(wèn)題呢?我們可以用攝像頭來(lái)監(jiān)控司機(jī)的眼睛,利用人工智能算法判斷司機(jī)是否瞌睡,并進(jìn)行語(yǔ)音提醒。今天老師就帶領(lǐng)大家使用攝像頭和micro:bit擴(kuò)展板制造出一臺(tái)疲勞駕駛AI提醒器。
二、知識(shí)講授
(一)EAR人眼疲倦檢測(cè)開(kāi)源算法
EAR(eye aspect ratio)計(jì)算函數(shù)是指利用眼睛縱橫比,判斷眼睛是睜開(kāi)的還是閉合的,從而檢測(cè)眨眼動(dòng)作,判斷人是否疲勞。首先需要確定眼睛的位置,在確定眼睛位置之后,選擇6個(gè)點(diǎn)來(lái)表示眼睛,然后順時(shí)針繞著眼睛進(jìn)行編號(hào),編號(hào)的順序是從眼睛的左角開(kāi)始,如圖1所示。
根據(jù)這6個(gè)點(diǎn),我們便可以判斷眼睛睜開(kāi)和閉合的狀態(tài)。當(dāng)眼睛睜開(kāi)的時(shí)候,上圖中豎著的黃色箭頭相對(duì)比較長(zhǎng),而眼睛閉合(疲勞狀態(tài))時(shí),這個(gè)箭頭就會(huì)變短。由于觀看的距離不同,單純用高度來(lái)表示狀態(tài)缺少參考比較,因此提出如下公式表示眼睛的狀態(tài):
EAR=
點(diǎn)間距離的計(jì)算可參考數(shù)學(xué)課上學(xué)過(guò)的兩點(diǎn)間距離公式:
AB=
通過(guò)大量測(cè)試,分析統(tǒng)計(jì)結(jié)果發(fā)現(xiàn),一般當(dāng)EAR小于0.25時(shí),眼睛便是疲勞狀態(tài)。
(二)face_recognition人臉識(shí)別庫(kù)
師:face_recognition是世界上最簡(jiǎn)單的人臉識(shí)別庫(kù),通過(guò)Python語(yǔ)言或命令行對(duì)圖像進(jìn)行人臉識(shí)別操作。它使用Dlib最先進(jìn)的人臉識(shí)別技術(shù)構(gòu)建而成,并具有深度學(xué)習(xí)功能。
首先打開(kāi)Mind+軟件,選擇Python模式中“庫(kù)管理”的“PIP模式”安裝face_recognition人臉識(shí)別庫(kù),然后再去識(shí)別人臉關(guān)鍵點(diǎn)。使用電腦內(nèi)置攝像頭加載圖像后,face_recognition庫(kù)中相關(guān)函數(shù)可識(shí)別出人臉關(guān)鍵點(diǎn)信息,參數(shù)是加載的圖像image,返回值是包含面部特征字典的列表,列表中每一項(xiàng)對(duì)應(yīng)一張人臉,包括鼻子、眼睛、嘴唇、下巴等部分的信息,每個(gè)部分包含若干個(gè)特征點(diǎn),總共有68個(gè)特征點(diǎn)。列表長(zhǎng)度就是圖中識(shí)別出的人臉數(shù)。
教師講解并演示識(shí)別結(jié)果。
(三)程序編寫(xiě)
1.提取兩眼坐標(biāo)并計(jì)算眼睛縱橫比
每只眼需要提取6個(gè)輪廓坐標(biāo)點(diǎn),共12個(gè)。EAR計(jì)算函數(shù)方程的分子是垂直眼睛標(biāo)志之間的距離,而分母是水平眼睛標(biāo)志之間的距離,由于水平點(diǎn)只有一組,卻有兩組垂直點(diǎn),所以分母乘以2,以保證兩組特征點(diǎn)的權(quán)重相同。
2.判斷是否處于瞌睡狀態(tài)
分別計(jì)算兩眼EAR值,然后取平均值,增加可信度。當(dāng)平均值小于限定的閾值時(shí),判定為閉眼一次;若長(zhǎng)時(shí)間閉眼(大于2秒)時(shí),判定為司機(jī)瞌睡。使用EAR算法,可避免人眼在圖像中近大遠(yuǎn)小而產(chǎn)生的影響。
教師重點(diǎn)講解使用平均值的意義、閾值的反復(fù)調(diào)試,并進(jìn)行演示操作,如圖2。
學(xué)生練習(xí)并反復(fù)調(diào)試,設(shè)定合理閾值。
三、硬件組裝與測(cè)試
(一)組裝硬件
連接組裝OLED顯示屏、喇叭、錄放模塊、LED燈、micro:bit擴(kuò)展板等設(shè)備。教師講解每個(gè)硬件的作用,演示組裝過(guò)程。
學(xué)生以6人為小組,進(jìn)行分工設(shè)計(jì)組裝。
(二)硬件測(cè)試
1.pinpong庫(kù)測(cè)試顯示屏
使用micro:bit主控板加擴(kuò)展板,OLED顯示屏連接在IIC接口上。安裝pinpong庫(kù),教師帶領(lǐng)學(xué)生進(jìn)行顯示屏測(cè)試,編寫(xiě)測(cè)試代碼讓顯示屏顯示“Hello PinPong”,如圖3。
學(xué)生可自行設(shè)計(jì),顯示不同的內(nèi)容。
2.pinpong庫(kù)測(cè)試LED燈
將LED燈接在擴(kuò)展板的P12引腳上,編寫(xiě)測(cè)試程序?qū)崿F(xiàn)LED燈1秒閃爍1次。測(cè)試代碼如下。
import time
from pinpong.board import Board,Pin
Board("microbit").begin() #初始化,選擇板型和端口號(hào),不輸入端口號(hào)則進(jìn)行自動(dòng)識(shí)別
led=Pin(Pin.D12, Pin.OUT) #引腳初始化為電平輸出
k=0
while True:
k=1-k
led.value(k)? ?#閃燈
time.sleep(1)? #等待1秒 保持狀態(tài)
教師講解程序代碼,并說(shuō)明如何實(shí)現(xiàn)LED燈循環(huán)閃爍。
學(xué)生在掌握基本方法后,可小組討論,利用其他方法實(shí)現(xiàn)LED燈閃爍。
3.pinpong庫(kù)測(cè)試錄放模塊
錄音模塊接在擴(kuò)展板的P14引腳上。測(cè)試代碼如下。
import time
from pinpong.board import Board,Pin
Board("microbit").begin() #初始化,選擇板型和端口號(hào),不輸入端口號(hào)則進(jìn)行自動(dòng)識(shí)別
sound = Pin(Pin.P14, Pin.OUT)? #引腳初始化為電平輸出
while True:
sound.value(1)? #輸出高電平
time.sleep(0.1)? #等待0.1秒 保持狀態(tài)
sound.value(0)? #輸出低電平
time.sleep(3)? #等待3秒 保持狀態(tài)
學(xué)生自己錄制“提醒音”,并進(jìn)行測(cè)試。
師:通過(guò)以上講解,請(qǐng)同學(xué)們整合一下各個(gè)分解任務(wù)的程序,形成完整程序。
學(xué)生組內(nèi)明確分工,合作完成任務(wù)。學(xué)生小組討論,不斷地調(diào)試、修正、完善程序,并在此過(guò)程中培養(yǎng)溝通、團(tuán)結(jié)合作的能力。(完整代碼掃描二維碼獲?。?/p>
四、拓展與提升
師:其實(shí),我們生活中有很多場(chǎng)合都需要注意及時(shí)休息或提高注意力,如長(zhǎng)時(shí)間加班工作、上網(wǎng)課時(shí)……怎樣在我們疲勞瞌睡時(shí),有一個(gè)更有效的提醒方式?請(qǐng)根據(jù)本節(jié)課所學(xué)的教學(xué)內(nèi)容,使用如樹(shù)莓派、熊貓板等制作一款疲勞AI提醒器,并嘗試改進(jìn)它的不足之處。
教學(xué)反思
本課通過(guò)制作疲勞駕駛AI提醒器,讓學(xué)生學(xué)會(huì)觀察生活,發(fā)現(xiàn)生活中經(jīng)常遇到的問(wèn)題,然后通過(guò)學(xué)習(xí)新的技術(shù)尋找解決問(wèn)題的方法。本課例是一個(gè)綜合性項(xiàng)目,不僅有開(kāi)源硬件和開(kāi)源算法的運(yùn)用,還涉及人工智能,既培養(yǎng)了學(xué)生的思維能力,又培養(yǎng)了學(xué)生使用新技術(shù)解決實(shí)際問(wèn)題的能力,提升了學(xué)生的綜合素質(zhì)。
(本課件由DF創(chuàng)客社區(qū)推薦)