赞
踩
import cv2 import os import numpy as np def take_faces(): while True: key = input('请输入文件夹的名字,姓名拼音的缩写,如果输入Q,程序退出!') if key == 'Q': break # 在faces_dynamic下面创建子文件夹 os.makedirs('./faces_dymamic/%s' % (key), exist_ok=True) take_photo(key) def load_data(): listdir = os.listdir('./faces_dymamic') #列表生成式 names = [d for d in listdir if not d.startswith('.')] faces = [] target = [i for i in range(len(names))]*10 for dir in names: for i in range(1,11): gray = cv2.imread('./faces_dymamic/%s/%d.jpg'% (dir,i)) #三维图片 gray_ = gray[:, :, 0] #二维数组 faces.append(gray_) faces = np.asarray(faces) target = np.asarray(target) target.sort() # 排序 return faces,target,names def dynamic_recognizer_face(face_recognizer,names): cap = cv2.VideoCapture(0) #人脸检测 face_detector = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml') while True: flag,frame = cap.read() if not flag: break gray = cv2.cvtColor(frame, code=cv2.COLOR_BGR2GRAY) faces = face_detector.detectMultiScale(gray,minNeighbors=5) for x,y,w,h in faces: face = gray[y:y + h, x:x + w] face = cv2.resize(face, dsize=(64, 64)) y_,confidence = face_recognizer.predict(face) label = names[y_] print('这个人是:%s.置信度:%0.1f'%(label,confidence)) cv2.rectangle(frame,pt1=(x,y),pt2=(x+w,y+h),color=[0,0,255],thickness=2) cv2.putText(frame,text=label, org=(x,y-10), fontFace=cv2.FONT_HERSHEY_SIMPLEX, fontScale=1.5, color=[0,0,255],thickness=2) cv2.imshow('face',frame) key = cv2.waitKey(1000//24) if key == ord('q'): break cv2.destroyAllWindows() cap.release() if __name__ == '__main__': #2、加载数据,返回目标值 faces,target,names = load_data() #print(faces.shape,target.shape) #3、加载人脸识别算法 #face_recognizer = cv2.face.EigenFaceRecognizer_create() #face_recognizer = cv2.face.FisherFaceRecognizer_create() face_recognizer = cv2.face.LBPHFaceRecognizer_create() #4、算法训练,找到目标值之间的规律 face_recognizer.train(faces,target) #5、动态加载数据 dynamic_recognizer_face(face_recognizer,names )
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。