使用face_recognition.compare_faces未获匹配True值的技术求助
解决face_recognition.compare_faces未匹配到正确人脸的问题
修正后的完整代码
import face_recognition # 加载已知名人图片 obama_image = face_recognition.load_image_file("famous_figures/barack_obama.jpg") john_image = face_recognition.load_image_file("famous_figures/john_cena.jpg") bruce_image = face_recognition.load_image_file("famous_figures/bruce_willis.jpg") # 加载未知图片(实际为Barack Obama) unknown_image = face_recognition.load_image_file("unknown_obama.jpg") # 生成人脸编码(取每张图片的第一个人脸编码) obama_face_encoding = face_recognition.face_encodings(obama_image)[0] john_face_encoding = face_recognition.face_encodings(john_image)[0] bruce_face_encoding = face_recognition.face_encodings(bruce_image)[0] unknown_face_encoding = face_recognition.face_encodings(unknown_image)[0] # 存储已知人脸编码及对应人名 known_faces = [ obama_face_encoding, john_face_encoding, bruce_face_encoding ] known_names = [ "Barack Obama", "John Cena", "Bruce Willis" ] # 对比人脸编码 matches = face_recognition.compare_faces(known_faces, unknown_face_encoding) # 匹配成功时输出指定结果 if True in matches: matched_index = matches.index(True) print(f"Yes there is a match. The image is {known_names[matched_index]}.") else: print("No match found.")
错误分析与修正点
- 核心错误:原代码的
known_faces列表误用了未定义的justin_face_encoding和ryan_face_encoding,这两个变量既没有对应图片加载逻辑,也未生成有效编码,导致对比时只有无效数据,输出(False, False)。 - 修正操作:将
known_faces替换为实际生成的john_face_encoding和bruce_face_encoding,同时保留obama_face_encoding,确保所有目标名人的编码都被纳入对比范围。
关键步骤说明
- 图片加载:使用
face_recognition.load_image_file分别加载famous_figures文件夹内的三张名人图片,以及待匹配的未知图片。 - 人脸编码生成:通过
face_recognition.face_encodings将每张图片转换为128维人脸特征编码,取列表第一个元素(默认每张图片仅包含单人脸)。 - 人脸对比:调用
face_recognition.compare_faces将未知人脸编码与所有已知编码逐一对比,返回布尔值列表。 - 结果输出:检查布尔列表中是否存在
True,若存在则定位对应人名并输出指定内容。
内容的提问来源于stack exchange,提问作者timothylee
相关产品推荐
相关产品推荐

