本次分享的是一個(gè)可以用于畢業(yè)設(shè)計(jì)參考的人臉識(shí)別項(xiàng)目,由FJNUThomas分享。如果有做人臉識(shí)別畢設(shè)的同學(xué),可以在此基礎(chǔ)上,做更深入的研究,源碼下載方式見文末。下面是設(shè)計(jì)步驟: 硬件及環(huán)境:
樹莓派3B V1.2
攝像頭羅技C170
樹莓派系統(tǒng):bullseye
python 3.9.2
opencv-python 4.5.3.56
opencv-contrib-python 4.5.3.56
numpy 1.21.0
關(guān)于樹莓派安裝opencv的步驟,可以參考下面這篇博文:
https://blog.csdn.net/m0_46190150/article/details/121501093
人臉檢測(cè)
我們實(shí)現(xiàn)人臉識(shí)別的前提事件是人臉檢測(cè),只有檢測(cè)到人臉,才能夠收集到人臉的數(shù)據(jù)。我們用的是opencv自帶的分類器:
haarcascade_frontalface_default.xml代碼實(shí)現(xiàn):
importcv2faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')cap=cv2.VideoCapture(0) cap.set(3, 640) # set Weightcap.set(4,480)#setHeight while True: ret, img = cap.read() img = cv2.flip(img, 1) #如果攝像頭倒置,將1改成-1 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale(gray, scaleFactor=1.2,minNeighbors=5, minSize=(20, 20) ) for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2) roi_gray = gray[y:y + h, x:x + w]roi_color=img[y:y+h,x:x+w] cv2.imshow('video', img) k = cv2.waitKey(30) & 0xff if k == 27: # Esc for quit break cap.release() cv2.destroyAllWindows()在python3下運(yùn)行如上代碼可以完成人臉檢測(cè)的功能。
圖像采集
人臉識(shí)別的本質(zhì)其實(shí)就是構(gòu)建一個(gè)人臉信息的數(shù)據(jù)庫,電腦比對(duì)攝像頭采集到的人臉信息和數(shù)據(jù)庫中存放的數(shù)據(jù),從而得到一個(gè)比對(duì)的結(jié)果。 圖像采集需要我們?cè)?py文件同目錄下新建一個(gè)文件夾,用于存放采集得到的圖片。
mkdir data采集得到的圖片越多,構(gòu)建的數(shù)據(jù)庫越完善,判斷成功的概率也越高,但圖片太多同樣會(huì)降低比對(duì)時(shí)的速度。 我這里是設(shè)置了每0.2s拍一張照片,按ecs或拍滿40張照片時(shí)退出。
k = cv2.waitKey(200) & 0xff # ESC退出and每0.2s拍一張 if k == 27: break elif count >= 40: # 拍40張照片 break圖像采集示例(這邊需要我們?cè)诮K端輸入id號(hào),我這邊輸入4)
采集得到的圖片: 
開始訓(xùn)練
訓(xùn)練是opencv人臉識(shí)別的重中之重。opencv為我們提供了多個(gè)內(nèi)置函數(shù),調(diào)用這些函數(shù)能夠幫助我們訓(xùn)練得到自己的訓(xùn)練集這邊我采用的是:
recognizer.train()在開始訓(xùn)練之前,我們需要新建一個(gè)空目錄用于存放得到的模型:
mkdir trainer模型保存為.xml文件,要注意我們的代碼是在樹莓派下跑的,在樹莓派下recognizer.write()是不能夠使用的,因此我們用:
recognizer.write('trainer/trainer.yml')
進(jìn)行保存,訓(xùn)練成功實(shí)例
?
人臉識(shí)別
通過了前三個(gè)步驟,我們已經(jīng)有了一個(gè)在data文件夾中保存采集到的圖像、在trainer文件夾中保存自己訓(xùn)練的trainer.xml模型的文件了,我們就進(jìn)入到了最后一步,也就是傳說中的人臉識(shí)別了。人臉識(shí)別實(shí)例: 可以看到,系統(tǒng)識(shí)別出我有73%的概率是彭于晏,識(shí)別的成功率還是很高的、關(guān)于輸出名字的問題,在代碼的這個(gè)部分:
id = 0 names = ['None', 'pengyuyan', 'xsy', 'rhy']我們可以在這里修改成自己想要的名字,在代碼中還有這樣的部分:
id,confidence=recognizer.predict(gray[y:y+h,x:x+w])#判斷成功概率>45時(shí),輸出id,否則輸出unknowif(confidence55):??????id?=?names[id]????? ?confidence?=?"??{0}%".format(round(100?-?confidence)) else:????????? id?=?"unknown"??????????confidence?=?"??{0}%".format(round(100?-?confidence))
用于修改自己想要的判斷概率。 到這里我們的人臉識(shí)別就基本完成了。
總結(jié)
通過本項(xiàng)目,可以獲得以下技能:
學(xué)會(huì)樹莓派的配置,并在樹莓派上配置了環(huán)境
對(duì)opencv庫有了個(gè)基本的了解,熟悉幾個(gè)內(nèi)置函數(shù)的功能和使用
對(duì)Linux有了更深刻的理解
增加了python能力
不足之處: 在調(diào)試的過程中,發(fā)現(xiàn)在樹莓派上運(yùn)行項(xiàng)目還是有比較明顯的卡頓的,因此有對(duì)代碼進(jìn)行優(yōu)化的想法,查閱資料以后了解到了有一個(gè)東西叫做pypy,嘗試過用pypy對(duì)文件進(jìn)行編碼,奈何寫的代碼是基于python3.9,和當(dāng)前的pypy版本不太匹配,只好暫時(shí)作罷。在之后應(yīng)該會(huì)嘗試進(jìn)行一次重新編譯,感興趣的同學(xué)可以嘗試看看。
-
Linux
+關(guān)注
關(guān)注
88文章
11622瀏覽量
217832 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4405瀏覽量
66798 -
人臉識(shí)別
+關(guān)注
關(guān)注
77文章
4117瀏覽量
87707 -
OpenCV
+關(guān)注
關(guān)注
33文章
651瀏覽量
44381
原文標(biāo)題:畢業(yè)設(shè)計(jì)| 樹莓派與OpenCV實(shí)現(xiàn)人臉識(shí)別
文章出處:【微信號(hào):達(dá)爾聞?wù)f,微信公眾號(hào):達(dá)爾聞?wù)f】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Vivado設(shè)計(jì)流程分析 Vivado HLS實(shí)現(xiàn)OpenCV的開發(fā)流程
Qt使用openCV庫
人臉識(shí)別歷程中的opencv庫是1.0還是emcv版本?
怎樣去生成能在Qt中應(yīng)用的opencv庫呢
OpenCV3編程入門-源碼例程全集-HoughLinesP函數(shù)
openCV開源庫模塊組成部分以及介紹
通過SDSoC開發(fā)環(huán)境加速OpenCV功能
OpenCV庫的特點(diǎn)和主要功能及實(shí)現(xiàn)光流方法的運(yùn)動(dòng)說明
OpenCV的小波變換函數(shù)代碼免費(fèi)下載
如何安裝和配置OpenCV及OpenCV的幾個(gè)小問題解答

opencv庫幾個(gè)內(nèi)置函數(shù)的功能和使用
評(píng)論