薛暉 北京市育英學校信息科技教師,北京市青少年機器人競賽技術(shù)委員會成員,北京市機器人骨干教師,海淀區(qū)信息技術(shù)學科帶頭人、骨干教師,海淀區(qū)優(yōu)秀科技輔導教師。曾任全國智能控制大賽裁判長,北京人工智能競賽裁判長,北京青少年機器人競賽裁判,北京市海淀創(chuàng)客編程秀項目負責人。指導學生獲得全國機器人創(chuàng)意項目一等獎,北京市創(chuàng)新大賽一等獎,北京市青少年科技后備人才早期培養(yǎng)計劃最佳學生獎等。
項目概述
人臉識別在生活中已經(jīng)得到廣泛應用,使用Python進行人臉識別簽到項目的研究,能夠讓學生很好地體驗使用編程解決實際問題的樂趣。學生以項目式學習方式探究人臉識別的相關知識,了解人臉識別的發(fā)展歷程、概念和相關技術(shù),描述算法的實現(xiàn)過程,編寫相關程序,親歷設計與實現(xiàn)人臉識別簽到項目的實踐應用。
教師引導學生以人臉識別簽到項目為主線,先進行項目分析,找到技術(shù)的關鍵點,再結(jié)合相關的Python語句進行程序設計與編寫,在學生逐步解決關鍵問題的過程中培養(yǎng)他們的程序思維和項目研究意識。
學生通過人臉識別簽到項目可以了解人臉檢測的方法,學會使用Haar級聯(lián)分類器對人臉進行框選標注,使用攝像頭對人臉進行實時檢測,然后提取出人臉的坐標、寬度、高度,建立人臉圖像數(shù)據(jù)集,通過cv2.face_FaceRecognizer.train函數(shù)完成訓練、生成訓練模型。最后通過cv2.face_FaceRecognizer.predict調(diào)試人臉的識別,顯示相應的簽到結(jié)果。
項目特色
學生學習在Python中應用OpenCV實現(xiàn)人臉的識別,在項目式學習中利用程序資源理解函數(shù)命令的功能,形成自主學習及自主解決問題的能力,體驗解決問題的過程,增強信息意識。
教學目標
1.了解人臉識別簽到所需的程序流程,學會創(chuàng)建工作簿xlwt函數(shù),寫入數(shù)據(jù)sheet1.write(row,col,data)函數(shù)。
2.通過自主探究設計與編寫程序,結(jié)合實際效果,分析程序的含義,完成人臉識別簽到程序的項目研究。
3.在自主探究和反復嘗試、修正的過程中,引發(fā)深入的思考,初步發(fā)展計算思維,培養(yǎng)分析、解決問題的能力與信心。
教學重點與難點
教學重點:理解人臉識別簽到的程序流程。
教學難點:使用正確函數(shù)編寫程序,實現(xiàn)人臉識別相關功能。
教學準備
計算機教室、PPT課件、攝像頭、Python軟件、OpenCV。
教學過程
一、項目分析
上課簽到是我們常見的課堂流程,學科任課教師由于執(zhí)教班級數(shù)量多,經(jīng)常不能夠認識每一個學生,給簽到工作帶來了一些問題。教師以此引導學生嘗試通過以往學習的人臉識別功能,編寫一個能夠自動識別學生,并在Excel表中進行姓名記錄的程序。接下來我們就來分析怎樣實現(xiàn)這個功能吧。
二、人臉識別的問題分析
師:要想簽到成功,我們需要識別目標的臉部特征。在之前的課程中,我們學習了如何建立人臉圖像集并生成訓練模型。如果使用訓練好的模型識別效果不好,我們應該如何調(diào)整呢?那最好的方式是調(diào)整人臉圖像集,重新訓練模型來解決這個問題。當人臉識別達到理想的效果后,就可以開始研究簽到功能了(流程如圖1所示)。
分析1:實現(xiàn)簽到的算法流程
分析預設功能:程序中要加載分類器;訓練人臉數(shù)據(jù)模型;加載寫入Excel數(shù)據(jù)的函數(shù);創(chuàng)建工作簿和表格。
操作步驟:1.載入攝像頭拍攝到的圖像并轉(zhuǎn)換為灰度圖。2.使用Haar級聯(lián)分類器進行人臉檢測,并框選標注。3.調(diào)用訓練模型,對框選的人臉進行識別,返回識別出來的ID和相似度數(shù)據(jù)。4.判斷識別后寫入Excel文件,并顯示“寫入簽到成功”;不能識別則顯示“Unknown”。5.判斷是否結(jié)束。
學生將操作步驟制作成流程圖(如圖2)。
分析2:如何在Python程序中寫入Excel
在Python程序中想要便捷地實現(xiàn)想要的功能,最好的方式就是調(diào)用功能函數(shù)。應在人臉識別簽到功能代碼中寫入Excel數(shù)據(jù)的“xlwt.Workbook()”函數(shù)。這是一個外部函數(shù),需要事先通過PIP的方式安裝后才可以使用,相關命令解釋如下。
1.學習創(chuàng)建寫入Excel數(shù)據(jù)的函數(shù)
引入xlwt函數(shù)語句:import xlwt
創(chuàng)建工作簿命令:f=xlwt.Workbook()
新建一個表格:
sheet1=f.add_sheet("test",cell_overwrite_ok=True)
其中括弧中第一個參數(shù)是表格的名稱,第二個參數(shù)是數(shù)據(jù)是否被重寫。
2.寫入數(shù)據(jù)命令
sheet1.write(row,col,data)
括弧中第一個參數(shù)是對應的行,第二個參數(shù)是對應的列,第三個參數(shù)則是要寫入的值。
3.保存Excel文件
f.save("test.xls")
f是創(chuàng)建工作表時的變量名稱,如果修改了變量名稱,則相應的工作表也要進行修改。例如創(chuàng)建工作簿命令ex=xlwt.Workbook(),則保存文件命令為ex.save("test.xls")
三、探究實踐
1.學生打開前一課編寫的人臉識別程序,教師指導學生為前一課程序中的Label標簽編寫程序,使用confidence=cv2.face_FaceRecognizer.predict(src) 語句后,Label返回識別結(jié)果。有了識別的結(jié)果,計算機就可以清楚地標注當前人臉的標簽,學生將標簽對應人臉就可以判斷出,計算機識別到了哪一個人。
2.教師引導學生學習使用xlwt函數(shù),和初中階段學習使用的Excel軟件一樣。首先需要建立一個sheet,然后在這個sheet中寫入數(shù)據(jù),也就是先要有f=xlwt.Workbook()命令,f就代表了創(chuàng)建工作簿的函數(shù)。接下來使用sheet1=f.add_sheet("test", cell_overwrite_ok=True)命令創(chuàng)建一個sheet,當然這里的sheet1也可以是sheet2、sheet3……要注意第二個參數(shù)要等于True,否則數(shù)據(jù)不能夠被重寫。
3.接下來就是本節(jié)課的重點,把返回的Label識別結(jié)束寫入相應的Excel表格中,在xlwt函數(shù)中所有的數(shù)據(jù)都是從0行、0列開始,如圖3所示。我們只要知道在Excel中哪一個表格位置是誰,并使用sheet1.write(row,col,data)命令就可以完成填寫簽到的功能,例如識別到李××就會返回Label為1,判斷返回值是1時,使用命令sheet1.write(1,1,“簽到成功”)在Excel的B2位置寫入“簽到成功”。
4.當前寫入的數(shù)據(jù)在內(nèi)存中,并沒有存儲到硬盤上,當判斷結(jié)束后我們要把內(nèi)存中的數(shù)據(jù)寫入硬盤文件中,這就需要用到保存文件函數(shù)f.save("test.xls")。這里使用f是因為在程序開頭寫了f=xlwt.Workbook()?!皌ext.xls”其實也可以是自定義的文件名(注意:不要丟掉了擴展名.xls)。需要注意的是,當文件保存成功后并不會有任何的提示,我們可以從本地打開test.xls查看保存結(jié)果,但不要在程序運行時打開文件,這樣會造成文件存儲失敗而報錯。
四、程序參考代碼
實踐反思
本節(jié)課是學習人臉識別的技術(shù)應用,通過分析生活、學習中遇到的問題,找出解決問題的方法,培養(yǎng)學生的邏輯分析能力和學習意愿,在程序模仿、修改、分析、試錯的過程中培養(yǎng)學生信息科技的核心素養(yǎng)。
學生善于在學習中進行模仿,能夠理解生活中的一些現(xiàn)象,能夠正確分辨出生活中的一些常見問題,但創(chuàng)新能力略顯不足。教師可以引導學生通過小組合作的方式,形成團隊互補,激發(fā)創(chuàng)新意識,更好地進行項目探究,提升解決問題的能力。