資源簡介
基于LBP算法的人臉識別程序(python),建立相應(yīng)的文件夾,修改代碼路徑即可使用,很基礎(chǔ)的代碼供人臉識別學習。

代碼片段和文件信息
#coding=utf-8
import?cv2
import?numpy?as?np??#?添加模塊和矩陣模塊
#?圖片保存路徑
save_face_path?=?‘D:/picture/photo_saving/‘
save_gray_path?=?‘D:/picture/gray_train_set/‘??#?保存照片的文件夾地址
face_cascade?=?cv2.CascadeClassifier(“D:/OpenCV/opencv/build/etc/haarcascades/haarcascade_frontalface_default.xml“)
cap?=?cv2.VideoCapture(0)??#?VideoCapture類用于處理攝像頭/視頻讀取_寫入操作。
#?0代表0號攝像頭
#?打開攝像頭,若打開本地視頻,同opencv一樣,只需將0換成(“×××.avi“)
sampleNum?=?0
Id?=?raw_input(‘enter?your?id:?‘)
while(1):????#?持續(xù)不斷的get?a?frame
????ret?frame?=?cap.read()????#?show?a?frame?第一個參數(shù)ret?為True?或者False代表有沒有讀取到圖片第二個參數(shù)frame表示截取到一幀的圖片
????#?鏡像翻轉(zhuǎn)
????frame?=?cv2.flip(frame?1)
????#?灰度轉(zhuǎn)換,gray就是灰度圖片
????gray?=?cv2.cvtColor(frame?cv2.COLOR_BGR2GRAY)??#?BGR?to?gray
????#?對于BGR,blue在高位,green在中位,red在低位,正好與RGB相反
????#?探測圖片中的人臉
????faces?=?face_cascade.detectMultiScale(gray?1.3?5)??#?會得到一串list:size(人臉個數(shù)),[xyhw](人臉的位置)
????print(“faces“?faces)??#?輸出每個檢測到的臉的list
????if?not?faces?is?():??#?如果faces不為空
????????for?x?y?z?w?in?faces:??#?同時在faces這個數(shù)組中迭代4個參數(shù)xyzw。xy是矩陣左上點的坐標,z是矩陣的寬,w是矩陣的高
????????????roiImg?=?frame[y:y+w?x:x+z]??#?ROI,即感興趣區(qū)域,用roiImg設(shè)置感興趣區(qū)域的圖像
????????????#?Python中ROI區(qū)域的設(shè)置是使用Numpy中的索引來實現(xiàn)的,參數(shù)為y的坐標區(qū)間和x的坐標區(qū)間,w和z為偏移量,保存在roiImg矩陣中
????????????#?保存人臉圖片
????????????sampleNum?=?sampleNum?+?1
????????????cv2.imwrite(save_face_path+‘User.‘+str(Id)?+?‘.‘?+?str(sampleNum)?+‘.jpg‘?roiImg)
????????????#?保存灰度圖片
????????????roi_gray?=?cv2.cvtColor(roiImg?cv2.COLOR_BGR2GRAY)
????????????cv2.imwrite(save_gray_path?+?‘User.‘+str(Id)?+?‘.‘?+?str(sampleNum)?+‘.jpg‘?roi_gray)
????????????#?將人臉用矩形框出來
????????????cv2.rectangle(frame?(x?y)?(x+z?y+w)?(0?255?0)?2)??#?(xy)為起始坐標(x+zy+w)為結(jié)束坐標,(02550)是畫線對應(yīng)的rgb顏色,2是畫線的寬度
????cv2.imshow(“capture“?frame)??#?以窗口形式顯示frame幀?,窗口名為capture
????if?cv2.waitKey(1)?&?0xFF?==?ord(chr(27)):??#?畫面延時1ms并和11111111做與運算,若等于關(guān)閉鍵,則break
????????break???#?waitKey用于設(shè)置顯示圖像的頻率,每1ms刷新一次
????????????????#?chr(27)為ASCⅡ為27的字符,即ESC,ord函數(shù)是將字符轉(zhuǎn)化為ASCⅡ,由于直接輸入ESC不是一個字符,因此需要這樣轉(zhuǎn)換一下
????????????????#?也可以按q關(guān)閉,則寫成?if?cv2.waitKey(1)?&?0xFF?==?ord(‘q‘):?但這樣就對大小寫有局限性
#model?=?cv2.face.LBPHFaceRecognizer_create()
#model=cv2.face.EigenFaceRecognizer_create( )
#model.train(roiImg?labels)
#model.save(“MyFacePCAModel.xml“)
cap.release()???#?關(guān)閉視頻流文件
cv2.destroyAllWindows()??#?釋放并銷毀窗口
#?識別的時候,不需要再保存圖片了,只需要匹配就行
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3308??2019-04-23?09:35??generate.py
?????文件???????1514??2019-04-23?18:32??recognizer.py
?????文件???????1085??2019-04-23?19:21??trainner.py
-----------?---------??----------?-----??----
?????????????????5907????????????????????3
評論
共有 條評論