Python編程實例——利用Dragonboard 410c開發(fā)板實現人臉識別(二)
在上一期基于DragonBoard 410c開發(fā)板實現人臉識別文章中,已經教大家如何利用Python實現人臉識別的第一個部分——人臉檢測功能,今天在前面人臉檢測的基礎上,進一步教大家如何使用createFisherFaceRecognizer在dragonbaord 410c開發(fā)板上來進行人臉識別,今天將重點介紹該方法的原理和調用方法,處理中只是以識別前面人臉檢測方法檢測出來的人臉和數據庫中存入的人臉進行匹配,最終識別人臉對象。
首先我們需要準備人臉數據,這里我對使用上一期文章中的獲取人臉的方法進行了封裝,寫成了getFace.py文件,通過執(zhí)行該文件在Dragonboard 410c上采集了三個人的人臉,每個人的人臉采集5次不同角度數據,分別保存到了usrImg文件夾下的001、002、003文件夾中,對應的命名為1.jpg,2.jpg,3.jpg,4.jpg,5.jpg,這些數據作為訓練數據,然后基于這些數據調用FaceRecognizer提供的方法來實現對測試人臉的預測。
準備好數據后,就可以利用這些數據進行簡單的人臉識別了,根據上述數據,使用Python編寫程序,將數據導入到系統(tǒng)中,然后構建對應的訓練數據集合和標簽,其中相同的圖片對應相同的標簽數據,具體的對應方式如下:
人臉圖片 標簽
./usrImg/001/1.jpg 0
./usrImg/001/2.jpg 0
./usrImg/001/3.jpg 0
./usrImg/001/4.jpg 0
./usrImg/001/5.jpg 0
./usrImg/002/1.jpg 1
./usrImg/002/2.jpg 1
./usrImg/002/3.jpg 1
./usrImg/002/4.jpg 1
./usrImg/002/5.jpg 1
./usrImg/003/1.jpg 2
./usrImg/003/2.jpg 2
./usrImg/003/3.jpg 2
./usrImg/003/4.jpg 2
./usrImg/003/5.jpg 2
在讀取中,通過以下代碼來讀取到limg和lables兩個列表中:
dir = ['./usrImg/001/','./usrImg/002/','./usrImg/003/']
name = ['1.jpg','2.jpg','3.jpg','4.jpg','5.jpg']
lables = []
limg = []
n = 0
for x in dir:
for y in name:
obj = cv2.imread(x+y,0)
obj2=cv2.resize(obj,(400,500))
limg.append(obj2)
lables.append(n)
n = n+1
然后就可以調用FaceRecognizer中提供的方法來進行人臉訓練了,具體代碼如下:
model = cv2.createFisherFaceRecognizer();
model.train(limg,np.array(lables))
完成訓練后,讀取測試人臉,這里可以用上一期人臉識別文章中的代碼讀取獲取人臉,接著就可以進行人臉測試了,具體代碼如下:
img1 = cv2.imread(‘test.jpg’,0)
test=cv2.resize(img1,(400,500))
result = model.predict(test)
print result
完成后,將代碼進行保存,運行腳本,就可以得到人臉檢測結果,將會輸出被檢測人臉匹配的標簽和相似度,結果如下:
以上就是整個人臉識別實現的過程,后續(xù)blog中將進一步完善如何利用攝像頭直接檢測人臉和識別出對應的人,并且顯示姓名。