經過前面複雜的操作,訓練出來對於某一個人的識別模型。本文將利用該模型對於開啟的視訊或者攝像頭實時的識別該人。

讀取視訊 ==> 識別人臉 ==> 繪製標誌

程式碼如下:

#-*- 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)來判斷該人臉是否是我們尋找的目標

效果如圖所示:
這裡寫圖片描述