这个库安装起来稍微有点麻烦
第一步下载微软的VS2019社区版即可
第二部配置c++环境,在VS中配置c++的环境
第三步
pip install cmake
pip install dlib
pip install face recognition
之后就能用了
很多人不知道要配置C++环境哎........但是在ubuntu下用不着配置c++环境
直接执行第三步就行了
具体使用非常简单,请参考https://github.com/ageitgey/face_recognition
import face_recognition
def compare_faces(image_path1, image_path2):
try:
# 加载图像并提取人脸特征
image1 = face_recognition.load_image_file(image_path1)
image2 = face_recognition.load_image_file(image_path2)
face_encoding1 = face_recognition.face_encodings(image1)[0]
face_encoding2 = face_recognition.face_encodings(image2)[0]
# 计算人脸相似度
face_distance = face_recognition.face_distance([face_encoding1], face_encoding2)[0]
# 将相似度转换为百分比
similarity = (1 - face_distance) * 100
return similarity
except Exception as e:
return None
# 调用函数进行人脸比较
image_path1 = "path_to_image1.jpg" # 第一张图像的路径
image_path2 = "path_to_image2.jpg" # 第二张图像的路径
similarity = compare_faces(image_path1, image_path2)
if similarity is not None:
print(f"人脸相似度:{similarity:.2f}%")
else:
print("无法识别人脸或发生错误。")
方法 | Face Recognition函数示例 | 适合使用的情况 |
---|---|---|
欧几里得距离 (Euclidean Distance) | face_recognition.face_distance(face_encodings, face_to_compare) | 通常用于一对一的人脸相似度比较,对于已知的人脸特征向量。 |
曼哈顿距离 (Manhattan Distance) | 自定义实现,可使用NumPy等库来计算。 | 类似于欧几里得距离,但可能更适合特定数据集和度量需求。 |
余弦相似度 (Cosine Similarity) | 自定义实现,可使用NumPy等库来计算。 | 通常用于一对一的人脸相似度比较,尤其在特征向量具有不同尺度时。 |
Jaccard相似度 (Jaccard Similarity) | 自定义实现,需要将特征向量转换为二进制或布尔值。 | 适用于比较两个人脸特征向量的相似度,例如,用于人脸集合匹配。 |
标准化欧几里得距离 (Normalized Euclidean Distance) | 自定义实现,需要对特征向量进行标准化。 | 用于特征向量具有不同尺度的情况,可以在欧几里得距离的基础上进行改进。 |
最小检测的代码示范如下
import face_recognition
# 加载图像并提取人脸特征
image1 = face_recognition.load_image_file("image1.jpg")
image2 = face_recognition.load_image_file("image2.jpg")
face_encoding1 = face_recognition.face_encodings(image1)[0]
face_encoding2 = face_recognition.face_encodings(image2)[0]
# 计算人脸相似度
face_distance = face_recognition.face_distance([face_encoding1], face_encoding2)[0]
# 将相似度转换为百分比
similarity = (1 - face_distance) * 100
print(f"人脸相似度:{similarity:.2f}%")
通常情况下,欧几里得距离和余弦相似度是常用的方法。
import face_recognition
import os
# 加载目标图片的人脸特征
target_image = face_recognition.load_image_file("target_image.jpg")
target_face_encodings = face_recognition.face_encodings(target_image)
# 设置相似度阈值
threshold_similarity = 0.8
# 遍历目录中的图片文件
directory = "C:\User\Picture" # 修改为你的图片目录路径
for filename in os.listdir(directory):
if filename.endswith(".jpg") or filename.endswith(".png"):
image_path = os.path.join(directory, filename)
# 加载当前图片并提取人脸特征
current_image = face_recognition.load_image_file(image_path)
current_face_encodings = face_recognition.face_encodings(current_image)
# 检查当前图片中的每个人脸与目标图片的相似度
for current_face_encoding in current_face_encodings:
similarity = face_recognition.face_distance(target_face_encodings, current_face_encoding)
# 如果相似度高于阈值,打印出文件名和相似度
if similarity[0] < threshold_similarity:
print(f"找到一个图片 {filename} 人脸相似度为 {1 - similarity[0]:.2f}")
要在一个目录中遍历图片并找出与给定图片相似度高于80%的人脸图片,可以使用Face Recognition库来完成这个任务,用于图片搜索。