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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:15:40