Python基于OpenCV庫(kù)Adaboost實(shí)現(xiàn)人臉識(shí)別功能詳解
本文實(shí)例講述了Python基于OpenCV庫(kù)Adaboost實(shí)現(xiàn)人臉識(shí)別功能。分享給大家供大家參考,具體如下:
以前用Matlab寫神經(jīng)網(wǎng)絡(luò)的面部眼鏡識(shí)別算法,研究算法邏輯,采集大量訓(xùn)練數(shù)據(jù),迭代,計(jì)算各感知器的系數(shù)。。。相當(dāng)之麻煩~而現(xiàn)在運(yùn)用調(diào)用pythonOpenCV庫(kù)Adaboost算法,無(wú)需知道算法邏輯,無(wú)需進(jìn)行模型訓(xùn)練,人臉識(shí)別變得相當(dāng)之簡(jiǎn)單了。
需要用到的庫(kù)是opencv(open source computer vision),下載安裝方式如下:
使用
pip install numpy
語(yǔ)句安裝numpy(如果出現(xiàn)錯(cuò)誤:Microsoft Visual C++ 9.0 is required <unable to find vcvarsall.bat>,使用管理員身份安裝 Microsoft Visual C++ 9.0,重新啟動(dòng)計(jì)算機(jī),再使用使用
pip install numpy
語(yǔ)句安裝numpyopencv2.4.10下載
下載之后解壓(隨便解壓到哪里),將解壓目錄opencv文件夾中,build->python->2.7->x86下的文件cv2.pyd 復(fù)制到python2.7\Lib\site-packages 中
測(cè)試是否安裝成功,執(zhí)行解壓目錄下的sources\samples\python\drawing.py或者進(jìn)入python環(huán)境,使用
import cv2
首先講講需要用到的新函數(shù):
CascadeClassifier()
函數(shù),導(dǎo)入分類器
cv2.CascadeClassifier('xxxxx.xml') #haarcascade_frontalface_alt.xml臉部識(shí)別文件 #haarcascade_eye.xml眼部識(shí)別文件
函數(shù)的參數(shù)是xml完整路徑(具體看你的opencv安裝在哪里的,在opencv\sources\data\haarcascades下面),xml文件中是封裝好的算法
detectMultiScale()
函數(shù),進(jìn)行識(shí)別
detectMultiScale(image,scaleFactor,minNeighbors,flags,minSize,maxSize)
- 最終返回值為識(shí)別出的矩陣框[x, y, w, h],(x,y)左上角起始坐標(biāo),w寬,h高
- image:用于檢測(cè)的圖像
- scaleFactor:前后兩次相繼的掃描中,搜索窗口的比例系數(shù).例如1.1指將搜索窗口依次擴(kuò)大10%。圖片小的時(shí)候,比例系數(shù)盡量小能提高準(zhǔn)確率
- minNeighbors:構(gòu)成檢測(cè)目標(biāo)的相鄰矩形的最小個(gè)數(shù)。一般使用2or3,為0時(shí)返回所有的被檢候選矩形框。
rectangle()
函數(shù),在圖片上畫矩陣
cv2.rectangle(image,(x,y),(x+w,y+h),(0,255,0),2)
- image是原始圖片
- (x,y)是矩形左上角
- (x+w,y+h)是矩形右下角
- (0,255,0)是矩形的BGR顏色, 為紅色
- 2, 是繪制矩形的線寬
程序邏輯:
導(dǎo)入Haar級(jí)聯(lián)分類器算法,讀入要處理圖片,將圖片變成時(shí)候的大小,用detectMultiScale()函數(shù)先識(shí)別出人臉,在原圖上框出,然后提取出識(shí)別出的人臉矩形框,在人臉矩形框內(nèi)識(shí)別出眼睛,在原圖上框出,展示出識(shí)別完的圖像。
完整程序及注解:
import cv2 face_cascade = cv2.CascadeClassifier('D:\opencv\sources\data\haarcascades/haarcascade_frontalface_alt.xml') eye_cascade = cv2.CascadeClassifier('D:\opencv\sources\data\haarcascades/haarcascade_eye.xml') img1 = cv2.imread('face1.png') img = cv2.resize(img1,(240,320),interpolation=cv2.INTER_LINEAR) faces = face_cascade.detectMultiScale(img,1.2,2) for (x,y,w,h) in faces: cv2.rectangle(img,(x,y),(x+w,x+h),(255,0,0),2)#用顏色為BGR(255,0,0)粗度為2的線條在img畫出識(shí)別出的矩型 face_re = img[y:y+h,x:x+w]#抽取出框出的臉部部分,注意順序y在前 eyes = eye_cascade.detectMultiScale(face_re)#在框出的臉部部分識(shí)別眼睛 for (ex,ey,ew,eh) in eyes: cv2.rectangle(face_re,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) cv2.imshow('img',img) key = cv2.waitKey(0) if key==27: cv2.destoryWindow('img')
最后po個(gè)作者的照騙,展示一下最終的識(shí)別效果:
1--識(shí)別前
1——識(shí)別后
2——識(shí)別前
2——識(shí)別后
問(wèn)題:
1.斜的臉識(shí)別率不高
2.大小不同的圖片識(shí)別率不同,所有最好把圖片處理成差不多大小的圖片
3.眼部有遮擋物時(shí),眼睛識(shí)別率底,比如:有眼睛,有頭發(fā)
歡迎有能解決上面問(wèn)題的朋友能夠交流一下~
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- Python基于opencv實(shí)現(xiàn)的人臉識(shí)別(適合初學(xué)者)
- python opencv人臉識(shí)別考勤系統(tǒng)的完整源碼
- python實(shí)現(xiàn)圖片,視頻人臉識(shí)別(opencv版)
- Python基于Opencv來(lái)快速實(shí)現(xiàn)人臉識(shí)別過(guò)程詳解(完整版)
- Python opencv實(shí)現(xiàn)人眼/人臉識(shí)別以及實(shí)時(shí)打碼處理
- python調(diào)用OpenCV實(shí)現(xiàn)人臉識(shí)別功能
- python opencv3實(shí)現(xiàn)人臉識(shí)別(windows)
- 基于python3 OpenCV3實(shí)現(xiàn)靜態(tài)圖片人臉識(shí)別
- 使用 Python 和 OpenCV 實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別功能
相關(guān)文章
如何使用python的opencv實(shí)現(xiàn)人臉識(shí)別
這篇文章主要介紹了使用python的opencv實(shí)現(xiàn)人臉識(shí)別功能,本項(xiàng)目主要使用python語(yǔ)言,主要的模塊庫(kù)有os,opencv-python,opencv-contrib-python,需要的朋友可以參考下2023-12-12django連接mysql數(shù)據(jù)庫(kù)及建表操作實(shí)例詳解
這篇文章主要介紹了django連接mysql數(shù)據(jù)庫(kù)及建表操作,結(jié)合實(shí)例形式詳細(xì)分析了Django框架連接mysql數(shù)據(jù)庫(kù)、創(chuàng)建與查詢數(shù)據(jù)表相關(guān)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-12-12python?中collections的?deque使用詳解
這篇文章主要介紹了python中collections的deque使用詳解,deque是一個(gè)雙端隊(duì)列,如果要經(jīng)常從兩端append的數(shù)據(jù),選擇這個(gè)數(shù)據(jù)結(jié)構(gòu)就比較好了,更多相關(guān)內(nèi)容,需要的小伙伴可以參考下面文章內(nèi)容2022-09-09