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.whl

pip install opencv-python

安装后输入python 然后再输入import dlib ,没出错表示安装成功, 如图表示安装成功。其他两个模块可以自己验证。

代码实现人脸识别

思路

1、读取存储在文件夹里面的图片,提取图片人名和特征值,放到列表。

2、打开摄像头,进行人脸检测,并获得检测到的人脸的位置和特征值,然后和已知特征值进行比较,如果为true,取得人名,否则,标注为unknown。

3、将捕捉到的人脸显示在画面上,画出人脸框和人的名字。

ps:要先在和代码文件同一目录下建一个images的文件夹,里面放至少一张图片,可以将图片命名为已知人脸名字,因为代码中是将图片名作为已知人脸的人名加到列表中。

import face_recognition

import cv2

import os

def 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 = True

while 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 = face_recognition.compare_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'):

break

video_capture.release()

cv2.destroyAllWindows()

if __name__=='__main__':

face("./images/") #存放已知图像路径

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值