之前本人在实训时需要实现人脸识别这个功能,当时是借助百度的人脸识别api,这个需要注册账号,还需要用到密钥。操作起来也不麻烦,代码也不多。就是如果网速跟不上,返回的结果时,速度有点慢。当时也没那么在意,后来在无意间发现了python有个第三方模块face_recognition,这个是一个人脸识别库,开源的,该模块是基于dlib实现,用深度学习训练数据,模型准确率高达99.38%(实际受到环境因素等影响,没那么高)。
安装
需要用到dlib,face_recognition,opencv这三个模块。
要先安装 dlib 才能安装 face_recognition,因为两个模块是有版本对应关系的,之前也踩过坑了,所以在这里分享我用的版本,分别是dlib 19.7.0和face_recognition 1.2.1,可以到后台回复“人脸识别”关键字获取资源。
之后在dos窗口,进入到刚才两个模块下载的路径,输入
pip install dlib-19.7.0-cp36-cp36m-win_amd64.whl pip install face_recognition-1.2.1-py2.py3-none-any.whlpip install opencv-python
安装后输入python 然后再输入import dlib ,没出错表示安装成功, 如图表示安装成功。其他两个模块可以自己验证。
代码实现人脸识别
思路
1、读取存储在文件夹里面的图片,提取图片人名和特征值,放到列表。
2、打开摄像头,进行人脸检测,并获得检测到的人脸的位置和特征值,然后和已知特征值进行比较,如果为true,取得人名,否则,标注为unknown。
3、将捕捉到的人脸显示在画面上,画出人脸框和人的名字。
ps:要先在和代码文件同一目录下建一个images的文件夹,里面放至少一张图片,可以将图片命名为已知人脸名字,因为代码中是将图片名作为已知人脸的人名加到列表中。
import face_recognition import cv2import osdef face(path):#存储知道人名列表known_names=[] #存储知道的特征值known_encodings=[]for image_name in os.listdir(path):load_image = face_recognition.load_image_file(path+image_name) #加载图片image_face_encoding = face_recognition.face_encodings(load_image)[0] #获得128维特征值known_names.append(image_name.split(".")[0])known_encodings.append(image_face_encoding)print(known_encodings)#打开摄像头,0表示内置摄像头video_capture = cv2.VideoCapture(0) process_this_frame = Truewhile True:ret, frame = video_capture.read()# opencv的图像是BGR格式的,而我们需要是的RGB格式的,因此需要进行一个转换。rgb_frame = frame[:, :, ::-1]if process_this_frame:face_locations = face_recognition.face_locations(rgb_frame)#获得所有人脸位置face_encodings = face_recognition.face_encodings(rgb_frame, face_locations) #获得人脸特征值face_names = [] #存储出现在画面中人脸的名字for face_encoding in face_encodings: matches = pare_faces(known_encodings, face_encoding,tolerance=0.5)if True in matches:first_match_index = matches.index(True)name = known_names[first_match_index]else:name="unknown"face_names.append(name)process_this_frame = not process_this_frame# 将捕捉到的人脸显示出来for (top, right, bottom, left), name in zip(face_locations, face_names):cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2) # 画人脸矩形框# 加上人名标签cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)font = cv2.FONT_HERSHEY_DUPLEX cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)cv2.imshow('frame', frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakvideo_capture.release()cv2.destroyAllWindows()if __name__=='__main__':face("./images/") #存放已知图像路径
如果觉得《python 人脸识别_手把手教你用python实现人脸识别 识别率高达99.38%》对你有帮助,请点赞、收藏,并留下你的观点哦!