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}")
关键点说明:
- 图像预处理:增强对比度能让面部特征更明显
- 使用CNN模型:
model="cnn"比默认的HOG模型更准确 - 增加编码抖动:
num_jitters=3通过轻微扰动生成多个编码取平均 - 使用large模型:获取128维的面部特征点,比small模型更详细
- 调整匹配阈值:
tolerance=0.55稍微放宽匹配标准
如果识别率还是不够,可以考虑:
- 增加已知人脸的样本数量(不同角度、光照)
- 确保人脸在图像中足够大(至少100x100像素)
- 使用更高质量的原图
总结:预处理图像和调整参数是关键。
用的哪家的 api ?

