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

代碼片段和文件信息
#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):????#?持續不斷的get?a?frame
????ret?frame?=?cap.read()????#?show?a?frame?第一個參數ret?為True?或者False代表有沒有讀取到圖片第二個參數frame表示截取到一幀的圖片
????#?鏡像翻轉
????frame?=?cv2.flip(frame?1)
????#?灰度轉換,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(人臉個數),[xyhw](人臉的位置)
????print(“faces“?faces)??#?輸出每個檢測到的臉的list
????if?not?faces?is?():??#?如果faces不為空
????????for?x?y?z?w?in?faces:??#?同時在faces這個數組中迭代4個參數xyzw。xy是矩陣左上點的坐標,z是矩陣的寬,w是矩陣的高
????????????roiImg?=?frame[y:y+w?x:x+z]??#?ROI,即感興趣區域,用roiImg設置感興趣區域的圖像
????????????#?Python中ROI區域的設置是使用Numpy中的索引來實現的,參數為y的坐標區間和x的坐標區間,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)為結束坐標,(02550)是畫線對應的rgb顏色,2是畫線的寬度
????cv2.imshow(“capture“?frame)??#?以窗口形式顯示frame幀?,窗口名為capture
????if?cv2.waitKey(1)?&?0xFF?==?ord(chr(27)):??#?畫面延時1ms并和11111111做與運算,若等于關閉鍵,則break
????????break???#?waitKey用于設置顯示圖像的頻率,每1ms刷新一次
????????????????#?chr(27)為ASCⅡ為27的字符,即ESC,ord函數是將字符轉化為ASCⅡ,由于直接輸入ESC不是一個字符,因此需要這樣轉換一下
????????????????#?也可以按q關閉,則寫成?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()???#?關閉視頻流文件
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
評論
共有 條評論