基于dlib的人脸比较

模型

dlib_face_recognition_resnet_model_v1.dat
shape_predictor_68_face_landmarks.dat

代码

import cv2
import dlib
import numpy as np

def main():
    img1 = cv2.imread("img/img1.jpg")
    img2 = cv2.imread("img/img2.jpg")
    test = cv2.imread("img/test.jpg")
    # BGR to RGB
    img1 = img1[:, :, ::-1]
    img2 = img2[:, :, ::-1]
    test = test[:, :, ::-1]
    detector = load_face_detector()
    predictor = load_key_detector()
    encoder = load_face_coding_feature_model()
    img1_128D = encoder_face(img1,detector,predictor,encoder)[0]
    img2_128D = encoder_face(img2,detector,predictor,encoder)[0]
    test_128D = encoder_face(test,detector,predictor,encoder)[0]
    all_image_128D = [img1_128D, img2_128D]
    distance =compare_faces(all_image_128D,test_128D)
    print(distance)

# 加载人脸检测器
def load_face_detector():
    return dlib.get_frontal_face_detector()

# 加载关键点模型
def load_key_detector():
    return dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

# 加载人脸编码特征模型
def load_face_coding_feature_model():
    return dlib.face_recognition_model_v1("dlib_face_recognition_resnet_model_v1.dat")

# 关键点编码为128D
def encoder_face(image,detector,predictor,encoder,upsample=1,jet=1):
    # 检测人脸(检测到几张人脸)
    faces = detector(image,upsample)
    # 对检测的人脸进行关键点检测
    faces_key_points = [predictor(image,face) for face in faces]
    # 对每张检测点进行128D
    return [np.array(encoder.compute_face_descriptor(image,faces_key_point,jet)) for faces_key_point in faces_key_points]
    
# 人脸比较,通过欧式距离
def compare_faces(face_encoding, test_encoding):
    return list(np.linalg.norm(np.array(face_encoding) - np.array(test_encoding), axis=1))

if __name__ == '__main__':
    main()

结果

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值