face_recognition(人脸识别)

face_recognition 介绍

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

主要功能

1.人脸检测:

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

2.面部特征点定位:

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

3.人脸识别:

  • 提取人脸的特征向量(128维),并用于比较不同人脸之间的相似度。
  • 支持从图像或视频中识别特定的人脸。

它和opencv关系

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

联系

尽管 face_recognition 和 OpenCV 各有侧重,但在实际应用中,它们经常被组合起来使用,以发挥各自的优势:

  • 图像预处理:通常情况下,我们会先使用 OpenCV 对图像进行预处理,比如调整大小、灰度化、去噪等。这些预处理步骤有助于提高后续人脸识别的准确率。
  • 人脸检测与识别:预处理后的图像可以传递给 face_recognition 库来执行人脸检测和识别。face_recognition 可以高效地完成这些任务,并返回人脸位置、面部特征点等信息。
  • 结果可视化:最后,我们可以再次利用 OpenCV 来对识别结果进行可视化处理,例如在图像上画出人脸框、标注识别到的名字等。

检测人脸

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

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

2.参数

  • img:图像的 NumPy 数组。
  • number_of_times_to_upsample:图像上采样的次数,用于提高检测精度。
  • model:使用的模型,可以是 'hog'(默认)或 'cnn'
  • 返回:一个列表,每个元素是一个 (top, right, bottom, left) 的元组,表示人脸的位置

切割人脸

import cv2
import face_recognition

#读取人脸图片
img = cv2.imread("../images/p1.png")
#检测人脸,后两个参数是默认的
face_list = face_recognition.face_locations(img)
print(face_list)
#获取人脸坐标
for x in face_list:
    cv2.rectangle(img, (x[3], x[0]), (x[1], x[2]), (0,255,0), 2)
    qie_img = img[x[0]:x[2], x[3]:x[1]]
    cv2.imwrite("../images/save_p1.png",qie_img)
cv2.imshow("img", qie_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

提取人脸特征

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

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

2.参数

  • img:图像的 NumPy 数组。
  • known_face_locations:人脸位置的列表,如果为 None,则自动检测人脸位置。
  • num_jitters:对每个人脸进行多次编码以提高精度。
  • model:使用的模型,可以是 'small''large'(默认)。
  • 返回:一个列表,每个元素是一个 128 维的特征向量。
import face_recognition
import cv2
#加载图片
image = cv2.imread("../face_train_images/ldh.jpg")
#读取人脸位置
face_locations = face_recognition.face_locations(image)
#提取人脸特征码
face_encodings = face_recognition.face_encodings(image)[0]
print(face_encodings)
 

计算人脸的欧几里得距离

欧几里得距离

1.欧几里得距离(Euclidean distance)是一种测量两个点之间直线距离的方式,常用于数学、物理学和计算机科学中的各种应用,包括机器学习中的数据点距离计算。它是基于欧几里得几何的概念,通常用于计算空间中两点之间的距离。

2.应用

  • 数据分析: 欧几里得距离常用于计算数据点之间的距离,例如在聚类算法(如K均值聚类)中。
  • 计算机视觉: 在人脸识别等任务中,欧几里得距离用于计算特征向量之间的相似度。
  • 优化: 在路径规划和优化问题中,计算两点之间的欧几里得距离可以帮助寻找最短路径。

3.欧几里得距离的意义

(1)距离越小,相似度越高

  • 特征向量相似:当欧几里得距离越小说明两个特征向量之间的差异越小,即这两个人脸在特征空间中很接近。因此,这两个图像可能是同一个人或者相似度很高。
  • 相同身份的概率大:在许多人脸识别系统中,如果计算出的距离小于某个设定的阈值,则系统会认为这两个面孔属于同一个人。

(2)距离阈值

  • 匹配判断:通常,系统会设置一个阈值来判断两个特征向量是否属于同一身份。如果计算出的距离小于这个阈值,则认为两张图片中的人脸是相同的;如果距离大于阈值,则认为是不同的身份。
  • 误识别率:设置的阈值会影响系统的误识别率(假阳性和假阴性率)。距离阈值的选择需要根据具体应用场景进行调整。

4.案例

import cv2
import face_recognition
import numpy as np

#读取人物的原图
img_1 = cv2.imread("../face_train_images/1.jpg")
#灰度图像
gray_img_1 = cv2.cvtColor(img_1, cv2.COLOR_BGR2GRAY)
#双边滤波去噪
b_img_1 = cv2.bilateralFilter(gray_img_1, 20, 10,50)
#把图像转换成BRG
a_img_1 = cv2.cvtColor(b_img_1, cv2.COLOR_GRAY2BGR)
#提取人脸特征向量
face01=face_recognition.face_encodings(a_img_1)[0]

#读取人物的原图
img_2 = cv2.imread("../face_train_images/3.jpg")
#灰度图像
gray_img_2 = cv2.cvtColor(img_2, cv2.COLOR_BGR2GRAY)
#双边滤波去噪
b_img_2 = cv2.bilateralFilter(gray_img_2, 20, 10,80)
#把图像转换成BRG
a_img_2 = cv2.cvtColor(b_img_2, cv2.COLOR_GRAY2BGR)
#提取人脸特征向量,要传彩色图像
face02=face_recognition.face_encodings(a_img_2)[0]



#计算欧几里得距离,可以根据返回值继续调试
v = np.linalg.norm(face01-face02)
if v<0.4:
    print("是同一个人")
else:
    print("不是一个人")
# print(v)

计算人脸匹配程度

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

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

2.参数

  • known_face_encodings:已知人脸特征向量的列表。
  • face_encoding_to_check:待检测的人脸特征向量。
  • tolerance:匹配的阈值,范围是 0.0 到 1.0,值越小表示匹配要求越高。
  • 返回:一个布尔值列表,表示待检测人脸特征向量是否与已知人脸特征向量匹配
import cv2
import face_recognition
import numpy as np

#读取人物的原图
img_1 = cv2.imread("../face_train_images/1.jpg")
#提取人脸特征向量
face01=face_recognition.face_encodings(img_1)[0]

#读取人物的原图
img_2 = cv2.imread("../face_train_images/4.jpg")
#提取人脸特征向量
face02=face_recognition.face_encodings(img_2)[0]

#计算人脸匹配程度
iss = face_recognition.compare_faces([face01], face02,tolerance=0.5)
print(iss)
 

注意:

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

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

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

图片预处理

如果对图片进行,

import cv2
import face_recognition
import numpy as np

#读取人物的原图
img_1 = cv2.imread("../face_train_images/1.jpg")
#灰度图像
gray_img_1 = cv2.cvtColor(img_1, cv2.COLOR_BGR2GRAY)
#双边滤波去噪
b_img_1 = cv2.bilateralFilter(gray_img_1, 20, 10,50)
#把图像转换成BRG
a_img_1 = cv2.cvtColor(b_img_1, cv2.COLOR_GRAY2BGR)
#提取人脸特征向量
face01=face_recognition.face_encodings(a_img_1)[0]

#读取人物的原图
img_2 = cv2.imread("../face_train_images/3.jpg")
#灰度图像
gray_img_2 = cv2.cvtColor(img_2, cv2.COLOR_BGR2GRAY)
#双边滤波去噪
b_img_2 = cv2.bilateralFilter(gray_img_2, 20, 10,80)
#把图像转换成BRG
a_img_2 = cv2.cvtColor(b_img_2, cv2.COLOR_GRAY2BGR)
#提取人脸特征向量,要传彩色图像
face02=face_recognition.face_encodings(a_img_2)[0]



#计算欧几里得距离,可以根据返回值继续调试
v = np.linalg.norm(face01-face02)
print(v)
​
​
​
### 回答1: face_recognition.face_locations是一个Python库中的函数,用于在图像中定位人脸的位置。它使用人脸识别算法来检测图像中的人脸,并返回一个包含每个人脸位置的列表。这个函数可以用于许多应用程序,例如人脸识别、人脸跟踪、面部表情分析等。 ### 回答2: face_recognition.face_locations是一个Python库中的函数,可以自动检测照片或视频中的人脸位置。该函数可以返回一个由多个元组组成的列表,每个元组包含一个人脸的左上角和右下角的像素位置。 这个函数可以用于多种情况,如在社交媒体平台上创建人脸识别功能,或在安防系统中检测人脸以进行身份验证等。 使用该函数需要先安装face_recognition库。安装好后,可以通过读取照片或视频的方式获取人脸位置。一旦检测到了人脸位置,我们可以在图像上对人脸进行框选或进行其他的处理。 下面是一个使用face_recognition.face_locations的示例代码: ``` import face_recognition import cv2 #读取图像 image = cv2.imread("image.jpg") #使用face_recognition进行人脸检测 face_locations = face_recognition.face_locations(image) #在图像上显示框选 for (top, right, bottom, left) in face_locations: cv2.rectangle(image, (left, top), (right, bottom), (0, 255, 0), 2) #展示结果 cv2.imshow("image", image) cv2.waitKey(0) ``` 值得注意的是,该函数仅能检测照片或视频中的人脸位置,如果需要进行更深入的人脸识别或分析,则需要使用其他的库或算法。此外,如果图像清晰度不高或人脸角度有偏差,则可能导致检测结果不准确。因此,使用该函数需要结合实际情况进行调试和优化。 ### 回答3: face_recognition.face_locations是Python编程语言中face_recognition库的一个函数。这个函数主要是用于定位图像中所有面部特征的位置。face_recognition库是一种创建和识别面部特征的工具,它采用深度学习算法实现对面部特征的解析和比较。 face_recognition.face_locations函数主要有以下三个参数:image参数为需要分析的图片,返回的结果是一个包含面部特征位置的矩形框坐标的列表。这些矩形框可以通过face_recognition底层算法获得。 第二个参数是model,这是可选的。如果传入参数为cnn,则算法采用卷积神经网络进行面部特征识别;如果传入参数为hog,则用基于直方图的目标检测方法识别面部特征。 最后一个参数是num_jitters,这也是可选的。这个参数定义了在进行面部特征识别之前将图像微调的次数。更多的微调意味着更准确的识别结果,但是也会增加计算时间。 face_recognition.face_locations函数的返回结果是一个包含矩形框坐标的列表。每个矩形框代表了图像中一个面部特征的位置。这个列表可以通过face_recognition库中的其他函数(如face_recognition.face_encodings)来进一步进行面部特征的比较和识别。 总之,face_recognition.face_locations函数是一个非常有用的工具,它可以帮助开发者定位图像中所有面部特征的位置,从而更好的进行面部特征比较和识别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值