一)windows环境下安装该项目:在此我使用的是GitHub上开源的一个星数非常高的项目,链接为:链接
1、代开pycharm,找到下面的终端,依次输入如下指令:
在安装dlib时会非常的慢,并且有警告不用管多等一会,博主大概进行了三四分钟才安装完成
pip install cmake
pip install boost
pip install dlib
pip install face_recognition
此时我们所有的准备工作都做完了,导入一下face_recognition包若不报错即安装成功啦;
二)开始使用:官方使用文档链接:使用文档
1、API解析:
方法 | 说明 | 返回值 |
load_image_file(图片对象) | 将图片转化为下面使用的对象 | 对象 |
face_locations(1对象) | 查找人脸位置 | 返回人脸所在的区域矩形 |
face_encodings(1对象) | 将图片中的人脸转化为特征坐标 | 返回list,将识别到的所有人脸都按坐标返回 |
compare_faces(encodings数组,待测人脸encodings一个对象) | 将待测的在总的数组中对比 | 返回一个Boolen类型的数组,判断时用in判断 |
import os # *** 作文件
import cv2 # 绘制矩形框
from PIL import Image # 绘制图片
import face_recognition # 人脸识别库
# 下面三个是额外方法,不是库内包括的。
# 将识别到的人脸绘制出来
def print_image(face, image):
for face_location in face:
# 坐标的返回顺序是top, right, bottom, left
top, right, bottom, left = face_location
face_image = image[top:bottom, left:right]
pil_image = Image.fromarray(face_image)
pil_image.show()
# 根据坐标在图片中画出框框
def print_image_tru(images, image_list):
image = cv2.imread(images)
# (top, right, bottom, left)
for one in image_list:
y1 = one[0]
x1 = one[3]
y2 = one[2]
x2 = one[1]
cv2.rectangle(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
cv2.imshow("fff", image)
cv2.waitKey()
# 将目录中的图片加载到已知人脸库中
def get_face_data():
base_path = 'image/face_data'
name_content = os.listdir(base_path)
image_encoding_content = []
for one in name_content:
img = base_path + "/" + str(one)
load = face_recognition.load_image_file(img)
encodings = face_recognition.face_encodings(load)[0]
image_encoding_content.append(encodings)
return name_content, image_encoding_content
# 1、查找人脸的个数
def count_face(images):
image = face_recognition.load_image_file(images)
face_locations = face_recognition.face_locations(image)
print(f"该照片中识别出了{len(face_locations)}张人脸")
print_image_tru(images, face_locations) # 用矩形框画出人脸
# 2、人脸识别
def face_recognitions(data_base_image, tmp_image):
# 1、将传来的图片转化为人脸编码:
picture_of_tmp = face_recognition.load_image_file(tmp_image)
# 2、识别目标中人脸的编码,由于图中可能没用人脸所以可能会抛出异常
try:
# 获取人脸的编码,上面加载的图片会有多个人脸,所以face_recognition.face_encodings返回一个列表
# 由于示例图片我只选取了有一个人脸的图片,所以直接选取了第一个元素
tmp_encoding = face_recognition.face_encodings(picture_of_tmp)[0]
except IndexError:
print('未识别出人脸')
return
# 开始进行人脸比对,compare_faces第一个参数是数据库中的所有已经存在人脸,
# 返回一个列表,表示与上述数据库中第几个人脸匹配成功
results = face_recognition.compare_faces(data_base_image[1], tmp_encoding)
if True in results:
index = results.index(True)
names = data_base_image[0][index].split('.')[0]
print(f"人脸验证成功,身份是{names}")
else:
print("验证失败")
tmp_image = r'要测试的人脸图片'
tuple_data = get_face_data()
face_recognitions(tuple_data, tmp_image)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)