人臉識別代碼第一版

本代碼使用了face_recognition三方庫,它是需要numpy、dlib、cmake作支撐的。主要是用鍵值對存放圖片和它對應的名字,最後打開攝像頭,比對原有存放的人臉,用pyttsx3語音庫來報出識別對象的名字。

下一步準備改用數據庫存放姓名和照片,實現完畢後再與django對接實現web端的人臉識別。

以下是現在完成的代碼,“下一步”還沒有實現:

import cv2
import pyttsx3
import face_recognition
import numpy as np
#創建人臉檢測級聯分類器對象實例
face_cascade = cv2.CascadeClassifier("C:\\Users\\TIM\\Anaconda3\\Library\\etc\\haarcascades\\haarcascade_frontalface_default.xml")

#創建人眼檢測級聯分類器實例
#eye_cascade = cv2.CascadeClassifier("E:\\pycharm\\untitled3.6\\Lib\\site-packages\\cv2\\data\\haarcascade_eye.xml")

image = face_recognition.load_image_file(r'C:\Users\TIM\testface\c.jpg')
image2 = face_recognition.load_image_file(r'C:\Users\TIM\testface\b.jpg')
image3 = face_recognition.load_image_file(r'C:\Users\TIM\testface\a.jpg')
face_encoding = face_recognition.face_encodings(image)[0]
face_encoding2 = face_recognition.face_encodings(image2)[0]
face_encoding3 = face_recognition.face_encodings(image3)[0]
known_face_encodings = {
    '王英傑': face_encoding3,
    '費霞雲': face_encoding2,
    '田越': face_encoding,
}
# known_face_encodings = [face_encoding]

camera = cv2.VideoCapture(0)




while True:
    #參數ret 爲True 或者False,代表有沒有讀取到圖片
    #第二個參數frame表示截取到一幀的圖片
    ret, frame = camera.read()
    # frame = cv2.imread(r'C:\Users\TIM\c.jpg')
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    face = face_cascade.detectMultiScale(gray, 1.5, 3)
    for (x, y, w, h) in face:
        # 繪製矩形框,顏色值的順序爲BGR,即矩形的顏色爲藍色
        img = cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
        roi_gray = gray[y:y + h, x:x + w]
        roi_color = frame[y:y + h, x:x + w]
        # 在檢測到的人臉區域內檢測眼睛
        #eyes = eye_cascade.detectMultiScale(roi_gray)
        #for (ex, ey, ew, eh) in eyes:
          #cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)
    cv2.imshow('wang', frame)




    k = cv2.waitKey(1)
    if k == ord('s'):
        rgb_frame = frame[:, :, ::-1]

        # 獲取畫面中的所有人臉位置及人臉特徵碼

        face_locations = face_recognition.face_locations(rgb_frame)

        face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)

        # 對獲取的每個人臉進行識別比對

        for (top, right, bottom, left), face_encoding in list(zip(face_locations, face_encodings)):
            print(face_encoding)
            # 對其中一個人臉的比對結果(可能比對中人臉庫中多個人臉)
            for face in known_face_encodings:
                print([np.array(known_face_encodings[face])])
                matches = face_recognition.compare_faces([np.array(known_face_encodings[face])], face_encoding, tolerance=0.47)
                # 默認只認爲是比對中的第一個人臉.
                print(matches)
                if True in matches:
                    first_match_index = matches.index(True)
                    engine = pyttsx3.init()
                    engine.say('你好,{}'.format(face))
                    engine.runAndWait()
                else:
                    engine = pyttsx3.init()
                    engine.say('你是誰,你不是{}'.format(face))
                    engine.runAndWait()
    if k == ord('q'):
            break
camera.release()

 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章