You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用face_recognition库单人脸比对出现AxisError的解决求助

人脸比对报错:AxisError 问题解决

问题描述

执行matches = face_recognition.compare_faces(pessoas[c], original_face_encodings[b])进行单张人脸比对时触发AxisError,但直接传入整个pessoas数组进行批量比对时能正常运行。

报错信息

Traceback (most recent call last):   
File "face.py", line 43, in <module>
    matches = face_recognition.compare_faces(pessoas[c], original_face_encodings[b])
File "C:\face-recognition\course\face_recognition\api.py", line 226, in compare_faces
    return list(face_distance(known_face_encodings, face_encoding_to_check) <= tolerance)   
File "C:\face-recognition\course\face_recognition\api.py", line 75, in face_distance
    return np.linalg.norm(face_encodings - face_to_compare, axis=1)
File "C:\Users\user\Anaconda3\lib\site-packages\numpy\linalg\linalg.py", line 2481, in norm
    return sqrt(add.reduce(s, axis=axis, keepdims=keepdims)) numpy.AxisError: axis 1 is out of bounds for array of dimension 1

相关代码

a = 110
pessoas = []
photos = []
b = 0
c = 0
r = 0
for i in range(100,a):   
    test_image = cv2.imread('test1/' + str(i) + '.jpeg')
    all_face_locations = face_recognition.face_locations(test_image, model='CNN')
    original_face_encodings = face_recognition.face_encodings(test_image, all_face_locations)
    print(i)
    for b in range(len(all_face_locations)):
        if not pessoas:
            for r in range(len(all_face_locations)):
                pessoas.insert(r, original_face_encodings[r])
        else:
            for c in range(len(pessoas)):
                matches = face_recognition.compare_faces(pessoas[c], original_face_encodings[b])
                if(matches):
                    photos.insert(i, i) 
                else:
                    pessoas.insert(i, original_face_encodings[b]) 
print(pessoas)
print(photos)

解决方法

face_recognition.compare_faces的第一个参数known_face_encodings要求传入人脸编码的列表/数组,而不是单个人脸编码。你传入的pessoas[c]是单个维度为1的人脸编码数组,导致内部计算时axis=1超出维度范围。

修改方法很简单,把单个编码包装成列表传入:

matches = face_recognition.compare_faces([pessoas[c]], original_face_encodings[b])

另外注意代码里的其他潜在问题:

  • pessoas.insert(i, original_face_encodings[b])这里的i是100-109的循环变量,当pessoas长度小于i时,会在列表末尾插入(Python列表insert索引超出长度时自动追加),但逻辑上可能应该用pessoas.append(original_face_encodings[b])更合理。
  • photos.insert(i, i)同样存在索引问题,建议改用photos.append(i)。

内容的提问来源于stack exchange,提问作者Pedro Gonçalves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:15:33