Python Dlib 是一个用于人脸识别的Python库,具有高效、精确的特点,本篇攻略将详细讲解如何使用Python Dlib进行人脸识别,并给出两个示例说明。
环境准备
在进行Python Dlib人脸识别前,需要进行以下准备:
- Python环境,建议使用Python 3.6以上版本;
- 安装Dlib库,可以使用pip进行安装:
pip install dlib
; - 下载Dlib预训练模型,可以从dlib官网下载,包括68点面部特征点检测器和人脸识别器。
步骤分解
步骤1:导入依赖库和模型
import dlib
import cv2
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
facerec = dlib.face_recognition_model_v1('dlib_face_recognition_resnet_model_v1.dat')
在这个步骤中,我们导入所需库和模型。
步骤2:提取人脸特征
img = cv2.imread('test.png') # 读取图像
dets = detector(img, 1) # 使用检测器检测人脸
# 遍历所有检测到的人脸
for i, d in enumerate(dets):
shape = predictor(img, d) # 获取68个面部特征点
face_descriptor = facerec.compute_face_descriptor(img, shape) # 提取人脸特征,128维向量
print(face_descriptor)
在这个步骤中,我们读取一张图片,并使用dlib的人脸检测器检测图片中的所有人脸,并在循环中提取每个人脸的128维人脸特征向量。
步骤3:比较人脸相似度
img1 = cv2.imread('test1.png')
img2 = cv2.imread('test2.png')
face_descriptors1 = []
face_descriptors2 = []
dets = detector(img1, 1)
for i, d in enumerate(dets):
shape = predictor(img1, d)
face_descriptors1.append(facerec.compute_face_descriptor(img1, shape))
dets = detector(img2, 1)
for i, d in enumerate(dets):
shape = predictor(img2, d)
face_descriptors2.append(facerec.compute_face_descriptor(img2, shape))
for i, face_descriptor1 in enumerate(face_descriptors1):
for j, face_descriptor2 in enumerate(face_descriptors2):
dist = np.linalg.norm(face_descriptor1 - face_descriptor2) # 计算欧氏距离
print('Face {} and Face {} are {} similar'.format(i+1, j+1, dist))
在这个步骤中,我们读取两张图片,并提取每张图像中所有人脸的128维人脸特征向量,然后通过计算欧氏距离来判断人脸的相似度。
示例说明
示例1:提取人脸特征
假设我们有一张图片,里面包含两个人的头像,需要提取这两个人的人脸特征向量,代码如下:
import dlib
import cv2
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
facerec = dlib.face_recognition_model_v1('dlib_face_recognition_resnet_model_v1.dat')
img = cv2.imread('test.png') # 读取图像
dets = detector(img, 1) # 使用检测器检测人脸
# 遍历所有检测到的人脸
for i, d in enumerate(dets):
shape = predictor(img, d) # 获取68个面部特征点
face_descriptor = facerec.compute_face_descriptor(img, shape) # 提取人脸特征,128维向量
print(face_descriptor)
这段代码中我们读取了一张图片,使用dlib的人脸检测器检测图片中的所有人脸,并在循环中提取每个人脸的128维人脸特征向量。
示例2:比较人脸相似度
假设我们有两张图片,分别代表两个不同的人,我们需要判断这两个人的相似程度,代码如下:
import dlib
import cv2
import numpy as np
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
facerec = dlib.face_recognition_model_v1('dlib_face_recognition_resnet_model_v1.dat')
img1 = cv2.imread('test1.png')
img2 = cv2.imread('test2.png')
face_descriptors1 = []
face_descriptors2 = []
dets = detector(img1, 1)
for i, d in enumerate(dets):
shape = predictor(img1, d)
face_descriptors1.append(facerec.compute_face_descriptor(img1, shape))
dets = detector(img2, 1)
for i, d in enumerate(dets):
shape = predictor(img2, d)
face_descriptors2.append(facerec.compute_face_descriptor(img2, shape))
for i, face_descriptor1 in enumerate(face_descriptors1):
for j, face_descriptor2 in enumerate(face_descriptors2):
dist = np.linalg.norm(face_descriptor1 - face_descriptor2) # 计算欧氏距离
print('Face {} and Face {} are {} similar'.format(i+1, j+1, dist))
这段代码中我们读取了两张图片,并提取每张图像中所有人脸的128维人脸特征向量,然后通过计算欧氏距离来判断人脸的相似度。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python dlib人脸识别代码实例 - Python技术站