开源人脸库,免费的人脸识别face recognition

这个库安装起来稍微有点麻烦

第一步下载微软的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库来完成这个任务,用于图片搜索。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值