本次分享的是一個可以用于畢業(yè)設(shè)計參考的人臉識別項目,由FJNUThomas分享。如果有做人臉識別畢設(shè)的同學(xué),可以在此基礎(chǔ)上,做更深入的研究,源碼下載方式見文末。下面是設(shè)計步驟: 硬件及環(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
人臉檢測
我們實現(xiàn)人臉識別的前提事件是人臉檢測,只有檢測到人臉,才能夠收集到人臉的數(shù)據(jù)。我們用的是opencv自帶的分類器:
haarcascade_frontalface_default.xml代碼實現(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)行如上代碼可以完成人臉檢測的功能。
圖像采集
人臉識別的本質(zhì)其實就是構(gòu)建一個人臉信息的數(shù)據(jù)庫,電腦比對攝像頭采集到的人臉信息和數(shù)據(jù)庫中存放的數(shù)據(jù),從而得到一個比對的結(jié)果。 圖像采集需要我們在.py文件同目錄下新建一個文件夾,用于存放采集得到的圖片。
mkdir data采集得到的圖片越多,構(gòu)建的數(shù)據(jù)庫越完善,判斷成功的概率也越高,但圖片太多同樣會降低比對時的速度。 我這里是設(shè)置了每0.2s拍一張照片,按ecs或拍滿40張照片時退出。
k = cv2.waitKey(200) & 0xff # ESC退出and每0.2s拍一張 if k == 27: break elif count >= 40: # 拍40張照片 break圖像采集示例(這邊需要我們在終端輸入id號,我這邊輸入4)


開始訓(xùn)練
訓(xùn)練是opencv人臉識別的重中之重。opencv為我們提供了多個內(nèi)置函數(shù),調(diào)用這些函數(shù)能夠幫助我們訓(xùn)練得到自己的訓(xùn)練集這邊我采用的是:
recognizer.train()在開始訓(xùn)練之前,我們需要新建一個空目錄用于存放得到的模型:
mkdir trainer模型保存為.xml文件,要注意我們的代碼是在樹莓派下跑的,在樹莓派下recognizer.write()是不能夠使用的,因此我們用:
recognizer.write('trainer/trainer.yml')進(jìn)行保存,訓(xùn)練成功實例

人臉識別
通過了前三個步驟,我們已經(jīng)有了一個在data文件夾中保存采集到的圖像、在trainer文件夾中保存自己訓(xùn)練的trainer.xml模型的文件了,我們就進(jìn)入到了最后一步,也就是傳說中的人臉識別了。人臉識別實例: 可以看到,系統(tǒng)識別出我有73%的概率是彭于晏,識別的成功率還是很高的、關(guān)于輸出名字的問題,在代碼的這個部分:
id = 0 names = ['None', 'pengyuyan', 'xsy', 'rhy']我們可以在這里修改成自己想要的名字,在代碼中還有這樣的部分:
id,confidence=recognizer.predict(gray[y:y+h,x:x+w])#判斷成功概率>45時,輸出id,否則輸出unknowif(confidence55):??????id?=?names[id]????? ?confidence?=?"??{0}%".format(round(100?-?confidence)) else:????????? id?=?"unknown"??????????confidence?=?"??{0}%".format(round(100?-?confidence))用于修改自己想要的判斷概率。 到這里我們的人臉識別就基本完成了。
總結(jié)
通過本項目,可以獲得以下技能:
學(xué)會樹莓派的配置,并在樹莓派上配置了環(huán)境
對opencv庫有了個基本的了解,熟悉幾個內(nèi)置函數(shù)的功能和使用
對Linux有了更深刻的理解
增加了python能力
不足之處: 在調(diào)試的過程中,發(fā)現(xiàn)在樹莓派上運(yùn)行項目還是有比較明顯的卡頓的,因此有對代碼進(jìn)行優(yōu)化的想法,查閱資料以后了解到了有一個東西叫做pypy,嘗試過用pypy對文件進(jìn)行編碼,奈何寫的代碼是基于python3.9,和當(dāng)前的pypy版本不太匹配,只好暫時作罷。在之后應(yīng)該會嘗試進(jìn)行一次重新編譯,感興趣的同學(xué)可以嘗試看看。
-
Linux
+關(guān)注
關(guān)注
87文章
11511瀏覽量
213842 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4381瀏覽量
64901 -
人臉識別
+關(guān)注
關(guān)注
77文章
4089瀏覽量
84306 -
OpenCV
+關(guān)注
關(guān)注
32文章
642瀏覽量
42916
原文標(biāo)題:畢業(yè)設(shè)計| 樹莓派與OpenCV實現(xiàn)人臉識別
文章出處:【微信號:達(dá)爾聞?wù)f,微信公眾號:達(dá)爾聞?wù)f】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
Vivado設(shè)計流程分析 Vivado HLS實現(xiàn)OpenCV的開發(fā)流程

Qt使用openCV庫
人臉識別歷程中的opencv庫是1.0還是emcv版本?
怎樣去生成能在Qt中應(yīng)用的opencv庫呢
OpenCV3編程入門-源碼例程全集-HoughLinesP函數(shù)
openCV開源庫模塊組成部分以及介紹
通過SDSoC開發(fā)環(huán)境加速OpenCV功能
OpenCV庫的特點和主要功能及實現(xiàn)光流方法的運(yùn)動說明

OpenCV的小波變換函數(shù)代碼免費(fèi)下載

如何安裝和配置OpenCV及OpenCV的幾個小問題解答

評論