失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python 人脸识别_手把手教你用python实现人脸识别 识别率高达99.38%

python 人脸识别_手把手教你用python实现人脸识别 识别率高达99.38%

时间:2018-09-03 07:17:46

相关推荐

python 人脸识别_手把手教你用python实现人脸识别 识别率高达99.38%

之前本人在实训时需要实现人脸识别这个功能,当时是借助百度的人脸识别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%》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。