1. 程式人生 > >實現人臉識別性別之路---opencv

實現人臉識別性別之路---opencv

load 返回值 不能 for default 16px 一個 port cvt

import cv2
from make_imge import get_file_name
from train_ph import Model
import os

IMAGE_SIZE = 128
if __name__=="__main__":
name = get_file_name("E:\\gender_image")
model = Model()
model.load()
facecas = cv2.CascadeClassifier("C:\\myword\\haarcascade_frontalface_default.xml")
cap = cv2.VideoCapture(0)

while cap.isOpened():
ret,frame = cap.read()
if not ret:
break
gray = cv2.cvtColor(frame,cv2.COLOR_RGB2GRAY)
faces = facecas.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=3,minSize=(32,32))
if len(faces)>0:
for face in faces:
x,y,w,h = face

cv2.rectangle(frame,(x-10,y-10),(x+w-10,y+h-10),(0,0,255),2)
          img =frame[x-10:x+w-10,y-10:y+h-10]

cv2.imwrite("E:\\photo\\"+str(i)+".jpg",img)

cv2.imshow("face_photo",frame)
k = cv2.waitKey(10)
if k == ord("q"):
break

cap.release()
cv2.destroyAllWindows()



思路整理:

寫一個截取圖片的代碼為:

1、創建一個識別人臉的對象

2、創建一個攝像頭的對象

3、使用while語句,表示可以讀取很多張圖片

4、判斷攝像頭是否初始化正確,利用read函數返回的ret布爾值進行判斷

5、這裏將圖片變為灰度值

6、判斷正確,通過detectMuitleScale函數把人臉的信息取下來。使用的是灰度值的圖片

7、判斷是否截取到圖片

8、截取到圖片,就將圖片的位置信息讀取出來。圖片是數字信息,每個圖片信息都放在列表中

9、可以在人臉的地方畫一個矩形,根據知道矩形的對角點就可以畫圖像。(這裏的圖象是原圖,沒有進行灰度值轉化的)

10、因為我想要將人臉的這一部分圖像截取下來,因此這裏我通過人臉坐標截取人臉

11、然後我將每一幀的圖片顯示出來

12、如果我不想再顯示圖像的時候,我可以按q結束

13、結束之後,我們就將攝像頭對象釋放然後銷毀所有的窗口

其中每個參數代表的含義:

cv2.CascadeClassifier看參數、用法

Cv2級聯分類器:用於檢測數字圖像的特征

參數:用一個xm文件說明要檢測圖像特征的某一個部分,用xml文件的地址為參數。檢測人臉比較好的參數有:haarcascade_frontalface_alt.xml

cv2.VideoCapture看參數、用法、表示的意義、返回值

視頻捕獲器:是opencv的一個類、利用攝像頭捕獲圖像

參數:可以是:相機的索引值(0:表示打開本地攝像機、1:標售打開別的攝像機);也可以是視頻文件的地址

用法:調用攝像頭的時候

返回值:布爾值

註意Cap是cv2.VideoCapture返回的類

Cap.isOpen():表示是否已經初始化攝像頭

Cap.read():用法、意義、返回值

返回值:返回兩個值:1、ret(布爾值,用來表示讀取幀是否成功)2、frame一個三維矩陣(圖像的數字信息)

用法:ret可以用來判斷圖片是否讀取成功,frame每一幀圖片的矩陣

Face_casade.detectMultilScal():參數的意義、用法、返回值

detectMultilScal為人臉識別器:單單識別人臉

參數:gray,也就是說圖片是灰度的,這樣比較快速

scaleFacetor:默認值為1.1

minNeighbors:默認值為3.表示聯集最小為3,至少有3次重疊檢測,我們才認為人臉確實存

Minsize:最小區域

返回值:得到以人臉特征的數字矩陣的列表

能打開攝像頭的函數為:cv2.imshow():參數、意義、用法

1、圖像寬的名字和每一幀的名字(註意單獨的他是不能把攝像頭調用出來的,因為它顯示的是每一幀的圖片,只是因為讀取一幀的速度很快而已,速度給了我們錯覺)

Cv2.waitkey(delay)函數:參數、作用

作用:不斷刷新圖像,頻率時間為delay,單位為ms

參數:當參數為整數並且大於零是,表示停留多長時間.但參數為0是,表示只顯示一幀



實現人臉識別性別之路---opencv