于方軍 宋道星



人工智能有兩個重要的應用領域:語音識別和人臉識別。人臉識別屬于計算機視覺的范疇,早期,人們的主要研究方向是人臉識別,即根據人臉來識別人物身份,后來,在復雜背景下的人臉檢測需求越來越大,人臉檢測也逐漸作為一個單獨的研究方向發展起來。本文介紹的是使用百度AI開放平臺的免費人臉對比功能來實現的人臉識別的搭建,用開源的OpenCV進行人臉檢測:攝像頭拍攝后檢測到人臉,把拍攝到的人臉圖像上傳到百度,和保存在文件夾中的已知人臉對比,如果相似度大于百分之五十,就把已知人臉的文件名加到攝像頭拍攝到的人臉圖像上,進而識別出人臉。
課程設計的思路
本課例的設計步驟以體驗為主,重點介紹基于開源OpenCV的人臉檢測工作的過程,即先搜索到圖片中的人臉,然后借助百度AI的免費人臉對比功能,使學生較好地理解人臉識別的實現原理,從而啟發學生發揮創意,開發屬于自己的人工智能作品。
教學過程主要體現了函數層面的模塊化教學,通過將功能封裝成函數,再調用函數的方法,引導學生理解人臉檢測和識別的過程。
環境配置
虛谷號的固件已經預裝了OpenCV,可以直接運行,上頁圖1是OpenCV在虛谷號中的安裝位置(/usr/local/share/OpenCV)。
1.攝像頭管理
OpenCV是使用cv2.VideoCapture(0)創建視頻捕獲的對象,參數0為默認攝像頭,虛谷號外接的USB攝像頭也設置為0。然后,打開一個mycamera窗口顯示攝像頭捕捉的幀,用條件循環捕捉幀,按下Esc鍵(鍵值是27),保存當前幀為圖片faceme.jpg,上頁圖2是通過攝像頭捕捉圖像的程序。
2.人臉檢測
人臉有著共同的特征,如與臉頰相比眼部顏色較深,與眼睛相比鼻梁區域較為明亮,眼睛、嘴巴、鼻子的位置較為固定等,這些特征稱為Haar特征。OpenCV利用級聯分類器做人臉檢測,支持類Haar特征,并自帶了訓練器和檢測器,這里介紹的XML文件,就是OpenCV自帶的檢測器。在OpenCV 3的庫文件中還會包含一個文件夾haarcascades,在虛谷號上的路徑為:/usr/local/shanre/OpenCV/haarcascades。在這個文件夾下包含了OpenCV的人臉檢測的XML文件,這些文件可用于檢測靜止圖像、視頻和攝像頭中的人臉圖像。這些XML文件,就是OpenCV在GitHub上共享出來的具有普適性的訓練好的數據,可以直接拿來使用。圖3是在攝像頭管理程序基礎上又加了人臉檢測的Python程序。
然后,在讀取攝像頭幀數據后,通過face_cascade=cv2.CascadeClassifier('./FaceRecognition/haarcascade_frontalface_default.xml')加載人臉檢測器。其中,FaceRecognition的文件夾用來存放OpenCV源文件里面檢測人臉的XML文件,并和主程序放在同一個文件夾里方便使用。接著,進行如下步驟:
①gray=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY),彩色圖片變成灰度圖片,簡化圖像的信息。
②faces=face_cascade.detectMultiScale(gray, 1.3, 5),檢測人臉,調整函數的參數可以使檢測結果更加精確。
③for(x, y, w, h) in faces:img=cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 255, 0),在檢測到的人臉上畫出方形。
3.人臉識別
進行人臉識別,首先要前往百度AI開放平臺申請開發者賬號,進入人臉識別控制臺創建一個新的應用,并記下自己的AppID、API Key和Secret Key。接著,在程序所在的文件夾建立一個FaceFile的文件夾用來存放已知人臉的圖片,圖片文件名為圖片人臉的真實名稱,如yu.jpg。上頁圖4是將兩張圖片上傳到百度AI開放平臺的操作函數,會被后續的主函數調用。最后,通過result=Mactch('faceMe.jpg',tag)把攝像頭采集的圖片,和FaceFile文件夾中的保存圖片對比。
用識別結果控制舵機制作智能門鎖
用虛谷號完成對舵機的控制,首先要導入虛谷庫,并做相應的設置。這里設置為用虛谷號12腳控制舵機。識別出是人臉文件夾中的熟人,控制舵機轉動一個角度,打開門5秒鐘,5秒鐘后關上門,具體程序如圖5、圖6所示。
基于虛谷號的人臉識別可以開發的功能豐富,既可以從小處著手,開發小型的適合一個學生獨立完成的項目,也可以開發比較大型的適合團隊完成的項目。在本課例中,可以使用虛谷號完成人臉識別的智能門鎖,也可以開發人臉識別的簽到系統,在完成作品的同時,不只是學習人工智能的應用技術,更重要的是在教育活動中融入了創客精神和內涵,培養學生的創新意識和實踐能力,這也正是虛谷號的初心與堅持所在。