TensorFlow實現人臉識別(5)-------利用訓練好的模型實時進行人臉檢測
阿新 • • 發佈:2019-01-10
經過前面複雜的操作,訓練出來對於某一個人的識別模型。本文將利用該模型對於開啟的視訊或者攝像頭實時的識別該人。
讀取視訊 ==> 識別人臉 ==> 繪製標誌
程式碼如下:
#-*- coding:UTF-8 -*-
import tensorflow as tf
import numpy as np
import sys
import gc
from face_train import Model
import cv2
def IdentifyFace(window_name):
cv2.namedWindow(window_name)
model = Model()
model.load_model(file_path = 'face.model.h5' )
cap = cv2.VideoCapture("test.wmv") #獲取視訊資料
classifier=cv2.CascadeClassifier('/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt2.xml')
color=(0,255,0)
num = 0
while cap.isOpened():
ok,frame = cap.read() #ok表示返回的狀態 frame儲存著影象資料矩陣 mat型別的
if not ok:
break
#影象灰度化
grey=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
#載入分類器 opencv自帶
faceRects = classifier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
if len(faceRects) > 0 :
for faceRect in faceRects:
x,y,w,h = faceRect
image = frame[y-10 :y+h+10,x-10:x+w+10]
faceID = model.face_predict(image)
#如果是“我”
if faceID == 0:
cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, thickness = 2)
#文字提示是誰
cv2.putText(frame,'ME',
(x + 30, y + 30), #座標
cv2.FONT_HERSHEY_SIMPLEX, #字型
1, #字號
(255,0,255), #顏色
2) #字的線寬
else:
cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, thickness = 2)
#文字提示是誰
cv2.putText(frame,'others',
(x + 30, y + 30), #座標
cv2.FONT_HERSHEY_SIMPLEX, #字型
1, #字號
(255,0,255), #顏色
2)
cv2.imshow(window_name,frame) #將捕獲的資料顯示出來
c = cv2.waitKey(30)
if c & 0xff == ord('q'): #按q退出
break
cap.release()
cv2.destroyWindow(window_name)
#主程式呼叫方法執行
if __name__ == '__main__':
IdentifyFace('IdentifyFace')
通過載入opencv自帶的分類器 classifier.detectMultiScale 來識別出人臉
通過model.face_predict(image)來判斷該人臉是否是我們尋找的目標
效果如圖所示: