宋秀雙 河北省張家口市涿鹿縣涿鹿中學信息技術教師,曾榮獲張家口市信息技術教學新星、張家口市學科帶頭人等稱號。所做課程榮獲河北省“優秀示范課”,輔導的學生曾獲“童創未來”全國青少年人工智能創新挑戰賽金獎、河北省第五屆中小學教育機器人暨創客競賽創客項目高中組一等獎。
教學背景
汽車在給我們帶來方便的同時,也帶來了隱藏的危險。我國現有的汽車保有量約為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=
點間距離的計算可參考數學課上學過的兩點間距離公式:
AB=
通過大量測試,分析統計結果發現,一般當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創客社區推薦)