前言
本文主要介紹模型的測試旭从,主要分為圖片測試與視頻測試兩部分。
正文
圖片測試
代碼如下:
import cv2
from train_model import Model
from read_data import read_name_list
class img_reader(object):
def __init__(self):
self.model = Model()
self.model.load()
self.img_size = 128
def build_img(self):
face_cascade = cv2.CascadeClassifier('C:\pylearning\ml&dl\\face_detect\config\haarcascade_frontalface_alt.xml')
#讀取dataset數(shù)據(jù)集下的子文件夾名稱
name_list = read_name_list('face')
img=cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #圖像灰化
faces = face_cascade.detectMultiScale(gray, 1.3, 5)#識別人臉
for (x, y, w, h) in faces:
ROI = gray[x:x + w, y:y + h]
ROI = cv2.resize(ROI, (self.img_size, self.img_size), interpolation=cv2.INTER_LINEAR)
label,prob = self.model.predict(ROI) #利用模型對cv2識別出的人臉進行比對
if prob >0.8: #如果模型認為概率高于70%則顯示為模型中已有的label
show_name = name_list[label]
else:
show_name = 'Stranger'
cv2.putText(img, show_name, (x, y - 20), cv2.FONT_HERSHEY_SIMPLEX, 1, 255, 2) #顯示名字
img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.imwrite('new.jpg',img)#在人臉區(qū)域畫一個正方形出來
cv2.imshow("face", img)
cv2.waitKey(0)
與獲取人臉時的操作幾乎相同,不多介紹
視頻測試
import cv2
from train_model import Model
from read_data import read_name_list
class Camera_reader(object):
#在初始化camera的時候建立模型珍语,并加載已經(jīng)訓(xùn)練好的模型
def __init__(self):
self.model = Model()
self.model.load()
self.img_size = 128
def build_camera(self):
#opencv文件中人臉級聯(lián)文件的位置藤乙,用于幫助識別圖像或者視頻流中的人臉
face_cascade = cv2.CascadeClassifier('C:\pylearning\ml&dl\\face_detect_v0\config\haarcascade_frontalface_alt.xml')
#讀取dataset數(shù)據(jù)集下的子文件夾名稱
name_list = read_name_list('face')
#打開攝像頭并開始讀取畫面
cameraCapture = cv2.VideoCapture('C:\pylearning\ml&dl\\face_detect_v0\data_script\output3.mp4')
success, frame = cameraCapture.read()
while success and cv2.waitKey(1) == -1 :
success, frame = cameraCapture.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) #圖像灰化
faces = face_cascade.detectMultiScale(gray, 1.3, 5)#識別人臉
for (x, y, w, h) in faces:
ROI = gray[x:x + w, y:y + h]
ROI = cv2.resize(ROI, (self.img_size, self.img_size), interpolation=cv2.INTER_LINEAR)
label,prob = self.model.predict(ROI) #利用模型對cv2識別出的人臉進行比對
if prob >0.85: #如果模型認為概率高于70%則顯示為模型中已有的label
show_name = name_list[label]
else:
show_name = 'Stranger'
cv2.putText(frame, show_name, (x, y - 20), cv2.FONT_HERSHEY_SIMPLEX, 1, 255, 2) #顯示名字
frame = cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2) #在人臉區(qū)域畫一個正方形出來
cv2.imshow("Camera", frame)
cameraCapture.release()
cv2.destroyAllWindows()
結(jié)語
至此迁客,所有的內(nèi)容都已經(jīng)結(jié)束了起惕,我們已經(jīng)成功實現(xiàn)了一個多目標人臉識別器盅粪,不過接下來的路還很長柜与,一起加油吧场躯!
至于內(nèi)容的問題,本項目只提供一個思路旅挤,具體細節(jié)肯定不甚清楚踢关,有一定基礎(chǔ)后比較適合閱讀,還清多多包涵粘茄。