人臉識別系統實現

2021-10-25 01:20:26 字數 4163 閱讀 3346

#1,導入庫

import cv2

import numpy as np

import face_recognition

#2,載入

#3,bgr轉為rgb

liu_rgb=liu[:,:,::-1]

wang_rgb=wang[:,:,::-1]

#4,檢測人臉

liu_face=face_recognition.face_locations(liu_rgb)

wang_face=face_recognition.face_locations(wang_rgb)

#5,人臉特徵編碼

liu_encoding=face_recognition.face_encodings(liu_rgb,liu_face)[0]

wang_encoding=face_recognition.face_encodings(wang_rgb,wang_face)[0]

#6,把所有臉放在一起,當作資料庫

encodings=[liu_encoding,wang_encoding]

names=['liu','wang']

cap=cv2.videocapture(0)

if not cap.isopened():

raise ioerror("camera error!")

while true:

ret,frame=cap.read()

frame=cv2.resize(frame,(0,0),fx=0.5,fy=0.5)

#8,bgr轉為rgb

frame_rgb=frame[:,:,::-1]

#9,人臉檢測

face_locations=face_recognition.face_locations(frame_rgb)

#10,人臉特徵編碼

face_encodings=face_recognition.face_encodings(frame_rgb,face_locations)

#11,與資料庫中的人臉進行匹配

for (top,right,bottom,left),face_encoding in zip(face_locations,face_encodings):

#12,進行匹配

matches=face_recognition.compare_faces(encodings,face_encoding)

#13,計算距離

distances=face_recognition.face_distance(encodings,face_encoding)

min_distance_index=np.argmin(distances)

#14,判斷:如果匹配,獲取名字

name="unknown"

if matches[min_distance_index]:

name=names[min_distance_index]

#15,繪製人臉矩形框

cv2.rectangle(frame,(left,top),(right,bottom),(0,255,0),3)

#16,繪製,顯示對應人臉的名字

cv2.rectangle(frame,(left,bottom-30),(right,bottom),(0,0,255),3)

#17,顯示名字

cv2.puttext(frame,name,(left+10,bottom-10),cv2.font_hershey_complex,1,(255,255,255),1)

#18,顯示整個效果

cv2.imshow('face recognition',frame)

#19,判斷q,退出

if cv2.waitkey(1)&0xff==ord('q'):

break

#20,關閉資源

cap.release()

cv2.destroyallwindows()

import face_recognition

import os

import cv2

from pil import image,imagedraw,imagefont

import numpy as np

#解析已有人員的所有**名和人物面部編碼資訊

def load_img(path):

print('正在載入已知人員的。。。。')

for dirpath,dirnames,filenames in os.walk(path):

print(dirpath,dirnames,filenames)

facelib=

for filename in filenames:

filepath=os.sep.join([dirpath,filename])

#把對應每張影象載入進來

face_image=face_recognition.load_image_file(filepath)

face_encoding=face_recognition.face_encodings(face_image)[0]

return facelib,filenames

facelib,facenames=load_img(r'd:\temp\faces')

#呼叫攝像頭

video_capture=cv2.videocapture(0)

while true:

ret,frame=video_capture.read()

#通過縮小(縮小為1/4),提高對比效率)

if frame is not none:

small_frame=cv2.resize(frame,(0,0),fx=0.25,fy=0.25)

rgb_small_frame=small_frame[:,:,::-1] #將opencv的bgr格式轉化為rgb格式

face_locations=face_recognition.face_locations(rgb_small_frame)

face_encodings=face_recognition.face_encodings(rgb_small_frame,face_locations)

face_names=

#迴圈多張臉

for face_encoding in face_encodings:

matches=face_recognition.compare_faces(facelib,face_encoding,tolerance=0.39)

name='未知頭像'

if true in matches:

#如果攝像頭裡面的頭像匹配了已知人物頭像,則取出第乙個true的位置

first_match_index=matches.index(true)

name=facenames[first_match_index][:-4] #取出檔案上對應的人名

for (top,right,bottom,left),name in zip(face_locations,face_names):

#還原大小

top *=4

right *=4

bottom *=4

left *=4

cv2.rectangle(frame,(left,top),(right,bottom),(0,0,225),2) #標註人臉資訊

img_pil=image.fromarray(cv2.cvtcolor(frame,cv2.color_bgr2rgb))

font=imagefont.truetype('simhei.ttf',40)

draw=imagedraw.draw(img_pil)

draw.text((left+6,bottom-6),name,font=font,fill=(255,255,255))

frame=cv2.cvtcolor(np.asarray(img_pil),cv2.color_rgb2bgr)

cv2.imshow('video',frame)

if cv2.waitkey(1)&0xff==ord('q'):

break

video_capture.release()

人臉識別(9) 人臉識別系統的原理與發展

1,人臉識別介紹 狹義定義 通過人臉進行身份確認或者身份查詢的技術或系統,2,人臉識別系統功能模組 人臉識別對比 人臉識別模式分為核實式和搜尋式兩種對比模式,核實式是將捕獲得到的人像或特定的人像與資料庫中已登記的某一物件作比對核實確定是否為同一人。搜尋式的對比是從資料庫中已登記的所有人像中搜尋查詢是...

人臉識別系統開發 8 OpenCV人臉檢測

人臉檢測使用cv cascadeclassifier提供的功能實現,首先使用opencv自帶的訓練資料lbpcascade frontalface.xml初始化cascadeclassifier,然後呼叫detectmultiscale得到中人臉的rect.include opencv2 objde...

ios識別人臉自動拍照 人臉自動識別系統的組成

人臉自動識別系統由人證識別終端 通道閘 人臉識別管理客戶端及平台組成。人臉自動識別系統採用人臉識別演算法,高速晶元作為識別演算法的執行硬體平台,通過出入口的身份證資訊採集 實時人臉抓拍和人證比對,從而實現人證合一驗證。並針對不同場所實現固定人員刷臉通行,訪客人員人證比對登記。人臉自動識別系統採集人臉...