孫麗君 于方軍
目前,中學(xué)階段進(jìn)行的人工智能教學(xué)采用的方式大多為采集數(shù)據(jù),然后通過調(diào)用接口將數(shù)據(jù)上傳到人工智能平臺(tái)(如百度AI、訊飛等),再返回預(yù)測(cè)結(jié)果,或者調(diào)用已有的模型,進(jìn)行結(jié)果預(yù)測(cè)。本實(shí)驗(yàn)將結(jié)合以上教學(xué)方式,運(yùn)用Python代碼進(jìn)行中學(xué)人工智能教學(xué)的探索,進(jìn)而引導(dǎo)學(xué)生體驗(yàn)人工智能的應(yīng)用,了解人工智能基本原理,使用已有的人工智能平臺(tái)和模型處理身邊的問題。
● 設(shè)計(jì)思路
嘗試通過本實(shí)驗(yàn)活動(dòng),實(shí)現(xiàn)人臉檢測(cè)和識(shí)別功能,解決生活中的實(shí)際問題。實(shí)驗(yàn)過程可以通過調(diào)用攝像頭,借助訓(xùn)練好的已有模型檢測(cè)人臉;將照片數(shù)據(jù)上傳至云端人工智能平臺(tái)(如百度AI),進(jìn)行圖像對(duì)比實(shí)現(xiàn)人臉識(shí)別。
在此實(shí)驗(yàn)原理基礎(chǔ)上,還可以進(jìn)行應(yīng)用拓展,如人臉識(shí)別門禁,可以加載硬件控制庫(kù)Pinpong庫(kù)來控制舵機(jī)實(shí)現(xiàn)。通過Pinpong庫(kù)將開源硬件與Python聯(lián)系起來,與人工智能算法相結(jié)合,將過去的“輸入+編程+輸出”模式,變?yōu)楝F(xiàn)在的“輸入+AI+輸出”模式。
● 活動(dòng)準(zhǔn)備
帶有攝像頭的學(xué)生機(jī)、創(chuàng)建百度AI應(yīng)用、Arduino板、舵機(jī)、Python源代碼等文件。
● 程序?qū)崿F(xiàn)
1.使用訓(xùn)練好的模型驗(yàn)證人臉檢測(cè)
(1)查看OpenCV中訓(xùn)練好的Haar模型文件
OpenCV是一款開源的計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫(kù),它提供了很多.xml格式的訓(xùn)練好的模型文件,在實(shí)驗(yàn)的素材包中,可以把這些模型文件放在FaceRecognition文件夾中,F(xiàn)aceFile文件夾中存放著允許進(jìn)入的用戶照片,并以人名命名。由于這些已經(jīng)訓(xùn)練好的模型存放在本地文件夾中(如上頁(yè)圖1),不必聯(lián)網(wǎng),我們便可直接調(diào)用來實(shí)現(xiàn)人臉檢測(cè)。
(2)調(diào)用模型文件檢測(cè)人臉
在本實(shí)驗(yàn)中通過Python代碼實(shí)現(xiàn)調(diào)用攝像頭,采集人臉數(shù)據(jù),再調(diào)用OpenCV模型庫(kù)中的Haarcascade_frontalface_default.xml模型文件,進(jìn)行人臉檢測(cè),代碼如圖2所示。在檢測(cè)到的人臉上畫出方框,當(dāng)用戶按下空格鍵,則將圖像截圖保存。
(3)更換其他模型文件,觀察檢測(cè)結(jié)果
還可以把模型文件替換為貓臉模型haarcascade_frontalcatface.xml,讀入一張貓的圖片,運(yùn)行檢測(cè)代碼后,就能檢測(cè)出貓臉,與此類似還可以選擇其他模型嘗試(如圖3)。
2.使用云端人工智能平臺(tái)識(shí)別人臉
(1)申請(qǐng)接口參數(shù)
開放的人工智能平臺(tái)會(huì)提供用戶使用的API接口,API接口參數(shù)主要包含APP_ID、API_KEY、SECRET_KEY,做個(gè)簡(jiǎn)單的比喻,APP_ID就像身份證號(hào),API_KEY就像銀行卡號(hào),SECRET_KEY就像銀行卡密碼,使用Python語言調(diào)用百度人臉識(shí)別接口服務(wù),首先需要安裝百度aip,然后在百度AI控制臺(tái)的人臉識(shí)別服務(wù)中創(chuàng)建應(yīng)用,獲得APP_ID、API_KEY、SECRET_KEY,在Python代碼中鍵入即可。
(2)連接百度AI
通過新建AipFace,將百度AI創(chuàng)建應(yīng)用中獲得的APP_ID、API_KEY、SECRET_KEY復(fù)制到代碼中,以連接百度AI人臉識(shí)別接口,實(shí)現(xiàn)交互。通過Mactch函數(shù)參數(shù)的設(shè)置,可將兩張圖片數(shù)據(jù)上傳到百度AI中,實(shí)現(xiàn)圖像對(duì)比識(shí)別(如上頁(yè)圖4)。
(3)讀取本地用戶照片與截圖照片進(jìn)行對(duì)比
通過調(diào)用前面定義的Mactch函數(shù),將逐一取出本地FaceFile文件夾中的用戶照片與保存的截圖數(shù)據(jù),上傳到百度AI平臺(tái),進(jìn)行人臉數(shù)據(jù)的比對(duì)、識(shí)別,并返回兩兩比對(duì)人臉相似值(如上頁(yè)圖5)。
(4)顯示返回的預(yù)測(cè)結(jié)果
對(duì)于人臉識(shí)別返回結(jié)果中相似度小于等于50的,則在截圖照片上顯示為陌生人“Name:Stranger”;相似度大于50的,則將FaceFile中對(duì)應(yīng)照片的文件名,也就是人名印到截圖照片上。
(5)小組討論
討論不同用戶申請(qǐng)的APP_ID、API_KEY、SECRET_KEY三個(gè)值是否相同?
3.效果改進(jìn)
在上述代碼基礎(chǔ)上,利用Pinpong庫(kù)控制旋轉(zhuǎn)舵機(jī),仿真人臉識(shí)別門禁,體驗(yàn)人工智能在生活中的應(yīng)用。
(1)安裝Pinpong庫(kù)
Pinpong庫(kù)是一套控制開源硬件主控板的Python庫(kù),安裝完成后,通過在Python程序中加載Pinpong庫(kù)并初始化后,即可連接硬件,直接用代碼就能給常見的開源硬件編程,使它們執(zhí)行各種命令。這里筆者借助Pinpong庫(kù),通過Arduino板控制舵機(jī),實(shí)現(xiàn)門禁的效果。
(2)連接硬件
連接Arduino主控板到計(jì)算機(jī),將舵機(jī)與Arduino板各引腳相連(如圖6)。在程序中,加載Pinpong庫(kù)的主板、引腳、舵機(jī),并進(jìn)行初始化。
(3)利用Pinpong庫(kù),編寫代碼控制舵機(jī)(如圖7)
這里對(duì)于返回預(yù)測(cè)結(jié)果中相似度大于50的,除了將人名顯示在截圖照片上外,還可控制舵機(jī)轉(zhuǎn)動(dòng)一定角度,打開門禁,停留幾秒后,舵機(jī)再次轉(zhuǎn)動(dòng)復(fù)位,以此實(shí)現(xiàn)自動(dòng)控制門禁的效果。
總之,通過本次實(shí)驗(yàn)活動(dòng),利用攝像頭截圖和收集用戶照片來采集數(shù)據(jù),調(diào)用原有已訓(xùn)練好的Haar模型進(jìn)行人臉檢測(cè),連接云端的百度AI來進(jìn)行人臉識(shí)別,得到預(yù)測(cè)結(jié)果,體驗(yàn)人工智能在生活中的應(yīng)用。那么,可否自己來收集數(shù)據(jù)、搭建模型、訓(xùn)練模型、檢測(cè)模型,完成一個(gè)完整的智能系統(tǒng),脫離網(wǎng)絡(luò)和現(xiàn)有模型的限制,實(shí)現(xiàn)本實(shí)驗(yàn)同樣效果,這將是筆者進(jìn)一步探索的方向。