人脸识别之人脸检测(一)
人脸识别之拍照保存(二)
人脸识别之数据训练(三)
人脸识别之成果检验(四)
读取训练好的数据----->得到人脸对应的id----->人脸识别
代码:
import cv2
import os
# 加载训练数据集文件
recogizer = cv2.face.LBPHFaceRecognizer_create()
recogizer.read('trainer/trainer.yml')
names = []
warningtime = 0
def face_detect(img):
''' 进行人脸识别 :param img: :return: '''
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 转换为灰度
face_detector = cv2.CascadeClassifier('D:/opencv(WIN)/opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml')
face = face_detector.detectMultiScale(gray,1.1,5,cv2.CASCADE_SCALE_IMAGE,(100,100),(300,300))
for x, y, w, h in face:
cv2.rectangle(img, (x,y), (x+w,y+h), color=(0,0,255), thickness=2)
cv2.circle(img, center=(x+w//2,y+h//2), radius=w//2, color=(0,255,0), thickness=1)
# 人脸识别
ids, confidence = recogizer.predict(gray[y:y + h, x:x + w])
if confidence > 80:
global warningtime
warningtime += 1
if warningtime > 100:
warningtime = 0
cv2.putText(img, 'unkonw', (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)
else:
cv2.putText(img,str(names[ids-1]), (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)
cv2.imshow('result',img)
def name():
''' 得到人脸对应的id :return: '''
path = 'D:/Pycharm/other/TEST/'
names = []
imagePaths=[os.path.join(path,f) for f in os.listdir(path)]
for imagePath in imagePaths:
name = str(os.path.split(imagePath)[1].split('.')[0])
names.append(name)
if __name__ == '__main__':
cap = cv2.VideoCapture(0) # 电脑摄像头开启,检测自己的人脸
# cap = cv2.VideoCapture('1.mp4') # 检测视频的人脸
name()
while True:
flag, frame = cap.read()
if not flag:
break
face_detect(frame)
if ord(' ') == cv2.waitKey(10):
break
cv2.destroyAllWindows()
cap.release()
文章评论