Python人脸识别 Python三十行代码实现简单人脸识别的代码实例
徐先生没洗头 人气:0想了解Python三十行代码实现简单人脸识别的代码实例的相关内容吗,徐先生没洗头在本文为您仔细讲解Python人脸识别的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Python人脸识别,下面大家一起来学习吧。
一、库介绍
opencv,face_recognition,numpy,以及dlib
注意:
安装opencv速度可能过慢,需要更换国内镜像源,参考:https:
附带Python3.7,64位版本 dlib whl下载路径:dlib-19_jb51.rar
二、库安装
pip install opencv-python pip install face_recognition pip install numpy
dlib库需进入whl文件路径下安装
pip install dlib-19.17.99-cp37-cp37m-win_amd64.whl
三、face_recognition库简单介绍
face_recognition的load_image_file方法会加载图片,并返回一个ndarray类型的数据
face_path = "C://Users//25103//Desktop//Python人脸识别//face//徐先生.jpg" image = face_recognition.load_image_file(face_path)
face_recognition的face_encoding方法,可从返回的ndarray类型数据中提取人脸特征,可同时提取多个特征,返回值为列表类型
face_encoding = face_recognition.face_encodings(image)[0]
face_recognition的face_location方法可以获取图片中所有人脸的位置,其返回值为一个列表
face_locations = face_recognition.face_locations(rgb_frame)
四、代码实现以及注释讲解
# coding = utf-8 import dlib import cv2 import face_recognition import os # 创建视频对象 video_capture = cv2.VideoCapture(0) # 加载需要识别的人脸图片(这张图片需要仅有一张脸) # face_recognition的load_image_file方法会加载图片,并返回一个ndarray类型的数据 # ndarray类型就是NumPy的数组类型,其中的元素类型可以一致也可以不一致 face_path = "C://Users//25103//Desktop//Python人脸识别//face//徐先生.jpg" image = face_recognition.load_image_file(face_path) # face_recognition的face_encoding方法,可从返回的ndarray类型数据中提取人脸特征,可同时提取多个特征,返回值为列表类型 # 因为照片中只有一个人脸,所以我们取列表的第一个值 face_encoding = face_recognition.face_encodings(image)[0] while True: # 从视频对象中读取一帧照片 ret,frame = video_capture.read() # 将照片缩小,加快处理速度,这里将其缩小为原图的1/4 # frame = cv2.rectangle(frame,(0,0),fx=0.25,fy=0.25) # 因为cv2用的是BGR色彩,我们组要将其转化为RGB进行处理 rgb_frame = frame[:,:,::-1] # 列表转置操作 # face_recognition的face_location方法可以获取图片中所有人脸的位置,其返回值为一个列表 face_locations = face_recognition.face_locations(rgb_frame) print("共从视频中找到了{}张人脸".format(len(face_locations))) # 获取视频中所有人脸的特征 face_encodings = face_recognition.face_encodings(rgb_frame,face_locations) for face in face_encodings: # 比较两个特征值——encoding1与encoding2,匹配返回True,否则返回False。tolerance越低,顾名思义,容错率越低,返回值为列表类型 match = face_recognition.compare_faces([face_encoding],face,tolerance=0.4) name = "不认识的人" if match[0]: # face为图片名称 name = os.path.basename(face_path[0:-4]) print("找到了{}".format(name))
加载全部内容