Python中如何提高face_recognition库的识别率

face_recognition 识别率低,有没有办法提高识别率 使用 face_recognition.compare_faces(face_encodings, unknown_encoding,tolerance=0.34) 参数 0.34 已经有漏识别,也有错误识别,正确数量较多。。0.3 基本没有错误,但出现照片无法识别,如何按默认参数 0.6 左右,错误率较高,感觉 并没有网上介绍的 99.38%的准确率
Python中如何提高face_recognition库的识别率

2 回复

要提高face_recognition库的识别率,核心是优化输入图像的质量和调整识别参数。直接上代码,下面这个函数封装了几个关键步骤:

import face_recognition
from PIL import Image, ImageEnhance
import numpy as np

def enhance_and_recognize(image_path, known_face_encodings, known_face_names):
    """
    增强图像并识别人脸
    
    参数:
        image_path: 待识别图片路径
        known_face_encodings: 已知人脸的编码列表
        known_face_names: 已知人脸的名称列表
    """
    # 1. 加载并预处理图像
    image = Image.open(image_path)
    
    # 增强对比度(有助于边缘检测)
    enhancer = ImageEnhance.Contrast(image)
    image = enhancer.enhance(1.5)  # 1.5倍对比度
    
    # 转换为RGB(确保颜色通道正确)
    if image.mode != 'RGB':
        image = image.convert('RGB')
    
    # 转换为numpy数组
    image_array = np.array(image)
    
    # 2. 人脸检测(使用更准确的模型)
    face_locations = face_recognition.face_locations(
        image_array, 
        model="cnn",  # 使用CNN模型,更准确但较慢
        number_of_times_to_upsample=1  # 上采样次数,可适当增加
    )
    
    # 3. 获取人脸编码
    face_encodings = face_recognition.face_encodings(
        image_array, 
        face_locations,
        num_jitters=3,  # 增加抖动次数以提高准确性
        model="large"   # 使用large模型获取更多面部特征
    )
    
    # 4. 进行识别匹配
    recognized_names = []
    for face_encoding in face_encodings:
        # 使用更宽松的阈值(默认0.6,可调整)
        matches = face_recognition.compare_faces(
            known_face_encodings, 
            face_encoding, 
            tolerance=0.55  # 降低阈值以增加匹配机会
        )
        
        # 计算距离并找到最佳匹配
        face_distances = face_recognition.face_distance(
            known_face_encodings, 
            face_encoding
        )
        best_match_index = np.argmin(face_distances)
        
        if matches[best_match_index]:
            recognized_names.append(known_face_names[best_match_index])
        else:
            recognized_names.append("Unknown")
    
    return recognized_names, face_locations

# 使用示例
if __name__ == "__main__":
    # 准备已知人脸数据
    known_image = face_recognition.load_image_file("known_person.jpg")
    known_encoding = face_recognition.face_encodings(known_image)[0]
    
    # 识别新图片
    names, locations = enhance_and_recognize(
        "unknown_person.jpg",
        [known_encoding],
        ["Known Person"]
    )
    print(f"识别结果: {names}")

关键点说明:

  1. 图像预处理:增强对比度能让面部特征更明显
  2. 使用CNN模型model="cnn"比默认的HOG模型更准确
  3. 增加编码抖动num_jitters=3通过轻微扰动生成多个编码取平均
  4. 使用large模型:获取128维的面部特征点,比small模型更详细
  5. 调整匹配阈值tolerance=0.55稍微放宽匹配标准

如果识别率还是不够,可以考虑:

  • 增加已知人脸的样本数量(不同角度、光照)
  • 确保人脸在图像中足够大(至少100x100像素)
  • 使用更高质量的原图

总结:预处理图像和调整参数是关键。


用的哪家的 api ?

回到顶部