OpenCV人脸识别项目:预编码人脸及Numpy Arrays提速加载咨询
预先编码人脸特征优化启动速度的可行方案
当然可行,预先计算并保存人脸编码(特征向量)是解决启动耗时问题的标准做法,能大幅缩短程序启动后的初始化时间,完全是正确的优化方向。
具体实现步骤
1. 预先编码并保存人脸特征
遍历所有目标人脸图像,用人脸识别库(比如face_recognition)提取特征编码(numpy数组形式),再将编码与对应标签(比如人名)一起保存。推荐用numpy.savez(适合批量存储numpy数组)或pickle(可存储包含数组和标签的字典)。
示例代码:
import face_recognition import numpy as np import os def pre_encode_faces(images_dir, save_path): known_face_encodings = [] known_face_names = [] for filename in os.listdir(images_dir): if filename.lower().endswith((".jpg", ".png", ".jpeg")): image_path = os.path.join(images_dir, filename) image = face_recognition.load_image_file(image_path) # 提取人脸编码(假设单张图仅含一个人脸,可添加异常判断避免报错) face_encodings = face_recognition.face_encodings(image) if face_encodings: face_encoding = face_encodings[0] # 从文件名提取人名(比如"张三.jpg"取"张三") name = os.path.splitext(filename)[0] known_face_encodings.append(face_encoding) known_face_names.append(name) # 保存编码与标签 np.savez(save_path, encodings=known_face_encodings, names=known_face_names) print(f"人脸编码已保存至 {save_path}") # 调用示例:人脸图像存储在"known_faces"文件夹 pre_encode_faces("known_faces", "face_encodings.npz")
2. 启动程序时直接加载预存编码
无需再处理原始图像,直接读取保存的文件即可获取特征向量和标签,直接用于人脸识别逻辑。
示例代码:
import numpy as np import face_recognition def load_pre_encoded_faces(save_path): data = np.load(save_path) known_face_encodings = data["encodings"] known_face_names = data["names"] return known_face_encodings, known_face_names # 程序启动时加载预存数据 known_face_encodings, known_face_names = load_pre_encoded_faces("face_encodings.npz") # 后续人脸识别逻辑示例 unknown_image = face_recognition.load_image_file("unknown_person.jpg") unknown_encodings = face_recognition.face_encodings(unknown_image) for encoding in unknown_encodings: matches = face_recognition.compare_faces(known_face_encodings, encoding) name = "Unknown" if True in matches: first_match_idx = matches.index(True) name = known_face_names[first_match_idx] print(f"识别结果:{name}")
你之前尝试失败的可能原因
- 保存逻辑缺失标签关联:只存了特征数组但没对应人名,导致加载后无法匹配身份
- 编码提取时未做异常处理:比如图像中未检测到人脸,直接取
face_encodings[0]会报错 - 文件路径错误:加载时的路径与保存路径不一致,导致读取失败
内容的提问来源于stack exchange,提问作者Deeptangshu Saha
相关产品推荐
相关产品推荐

