我是要安装face_recognition,但是dlib一直装不上,遇到很多问题,一起解决下
首先是安装肯定是pip
pip install face_recognition
但是dlib报错了,百度了一圈说要安装下面这些
pip install cmake
pip install boost
pip install dlib
pip install face_recognition
依然报错,无卵用,好了,开始使用新方法,conda大发
1、下载conda
Miniconda — conda documentation
我一般都用3.7,稳定兼容性好:
编辑
下载好之后一路安装下一步,记得写入环境变量
下载好之后cmd直接输入conda,有显示就ok
编辑
2、安装dlib
conda install dlib
此时出现下面这个报错
编辑
就是让你选择个源,输入下面的命令,选择一个元
# 查看
anaconda show conda-forge/dlib
# 配置
conda config --append channels conda-forge
# 安装dlib
conda install dlib
编辑
以上就安装成功dlib啦。
之后在进行 face_recognition 的安装:
conda install face_recognition
编辑
然后就可以了,嘎嘎好用
补一个示例:
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)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END