face_recognition

部署运行你感兴趣的模型镜像

目录

基本介绍

功能介绍

与opencv的关系

API

检测人脸

提取人脸特征

计算人脸相似度

计算人脸匹配程度


基本介绍

face_recognition 是一个非常流行的 Python 库,专门用于人脸识别任务。它基于 dlib 库和 HOG(Histogram of Oriented Gradients)特征以及深度学习模型,提供了简单易用的接口来进行人脸检测、面部特征点定位和人脸识别。face_recognition 库由 Adam Geitgey 开发,旨在简化人脸识别任务,使其更加容易上手。

功能介绍

  • 人脸检测

    • 检测图像中的人脸位置。

    • 支持使用 HOG 特征或 CNN(卷积神经网络)进行人脸检测。

  • 面部特征点定位

    • 检测人脸上的关键特征点(如眼睛、鼻子、嘴巴等)。

  • 人脸识别

    • 提取人脸的特征向量(128维),并用于比较不同人脸之间的相似度。

    • 支持从图像或视频中识别特定的人脸。

与opencv的关系

face_recognition 和 OpenCV 是两个独立的计算机视觉库,但它们在功能上有一些重叠,并且经常一起使用来完成复杂的视觉任务。下面简要介绍两者的联系:

在实际应用中,经常组合使用,以发挥各自的优势:

  • 图像预处理:通常情况下,我们会先使用 OpenCV 对图像进行预处理,比如调整大小、灰度化、去噪等。这些预处理步骤有助于提高后续人脸识别的准确率。

  • 人脸检测与识别:预处理后的图像可以传递给 face_recognition 库来执行人脸检测和识别。以高效地完成任务,并返回人脸位置、面部特征点等信息。

  • 结果可视化:最后,我们可以再次利用 OpenCV 来对识别结果进行可视化处理,例如在图像上画出人脸框、标注识别到的名字等。

API

检测人脸

face_recognition.face_locations(img, number_of_times_to_upsample=1, model='hog')

  • 功能:检测图像中的人脸位置。

  • 参数:

    • img:图像的 NumPy 数组。

    • number_of_times_to_upsample:图像上采样的次数,用于提高检测精度。

    • model:使用的模型,可以是 'hog'(默认)或 'cnn'

  • 返回:一个列表,每个元素是一个 (top, right, bottom, left) 的元组,表示人脸的位置

import face_recognition
import cv2
import numpy as np

image = cv2.imread('pic/test.jpg')

# 读取人脸位置
face_location = face_recognition.face_locations(image)
print(face_location)

for (top, right, bottom, left) in face_location:
    cv2.rectangle(image, (left, top), (right, bottom), (0, 0, 255), 2)

cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

提取人脸特征

face_recognition.face_encodings(img, known_face_locations=None, num_jitters=1, model='small')

  • 功能:提取图像中人脸的特征向量。

  • 参数:

    • img:图像的 NumPy 数组。

    • known_face_locations:人脸位置的列表,如果为 None,则自动检测人脸位置。

    • num_jitters:对每个人脸进行多次编码以提高精度。

    • model:使用的模型,可以是 'small''large'(默认)。

  • 返回:一个列表,每个元素是一个 128 维的特征向量。

image = cv2.imread('pic/test.jpg')

face_location = face_recognition.face_locations(image)
# 提取人脸特征码
face_encodings = face_recognition.face_encodings(image)[0]

print(face_encodings)

计算人脸相似度

计算两张人脸的欧几里得距离

np.linalg.norm(face_recognitions1 - face_recognitions2)

# 第一张图片
img1 = cv2.imread('person1.jpg')
face_recognitions1 = face_recognition.face_encodings(img1)[0]

# 第二张图片
img2 = cv2.imread('person2.jpg')
face_recognitions2 = face_recognition.face_encodings(img2)[0]

# 计算两张人脸编码的欧几里得距离
distance = np.linalg.norm(face_recognitions1 - face_recognitions2)
print(distance)

计算人脸匹配程度

face_recognition.compare_faces(known_face_encodings, face_encoding_to_check, tolerance=0.6)

功能:比较已知人脸特征向量和待检测人脸特征向量,判断是否匹配。

参数:

  • known_face_encodings:已知人脸特征向量的列表。
  • face_encoding_to_check:待检测的人脸特征向量。
  • tolerance(容忍):匹配的阈值,范围是 0.0 到 1.0,值越小表示匹配要求越高。

返回:一个布尔值列表,表示待检测人脸特征向量是否与已知人脸特征向量匹配

# 已知人脸
known_image = cv2.imread('person1.jpg')
face_recognitions1 = face_recognition.face_encodings(known_image)[0]

# 未知人脸
unknown_image = cv2.imread('person2.jpg')
face_recognitions2 = face_recognition.face_encodings(unknown_image)

# 计算人脸是否匹配
result = face_recognition.compare_faces([face_recognitions1], face_recognitions2[0], tolerance=0.2)
print(result)

注意:

提取提取已知人脸图片的人脸特征码要获取下标为 0 的数值

提取未知人脸图片的人脸特征码 不获取小标

在计算匹配的时候传入到函数的参数,已知人脸图片的人脸特征码 获取放入到列表中,未知获取下标为0的数值

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值