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

如何提升Python face_recognition库compare_faces万级人脸比对速度

人脸比对速度优化方法

以下是针对你当前场景可直接落地的优化方案:

  • 去掉冗余IO操作
    你当前循环内两次print调用属于性能损耗极高的控制台IO操作,Windows系统下该类操作的耗时远高于计算逻辑,可直接删除这两行打印,仅保留匹配成功时的打印逻辑即可,单这一项就能提升30%以上的运行速度。
  • 预缓存人脸编码,避免重复计算
    你当前方案的90%以上耗时都集中在face_encodings提取人脸特征的步骤,比对逻辑本身开销极低。你可以首次运行时将10000张图的人脸编码序列化保存到本地(比如用pickle库存为.pkl文件),后续所有比对任务直接读取本地缓存的编码列表即可,无需反复加载图片、提取特征,后续比对速度可提升到每秒数千次。
    示例序列化代码片段:
    import pickle
    import os
    # 首次生成编码时运行
    encodings = []
    filenames = []
    for f in files:
        # 只处理jpg文件,避免异常
        if not f.lower().endswith('.jpg'):
            continue
        img = face_recognition.load_image_file(os.path.join(path, f))
        face_enc = face_recognition.face_encodings(img)
        # 跳过检测不到人脸的图片
        if not face_enc:
            continue
        encodings.append(face_enc[0])
        filenames.append(f)
    # 保存到本地
    with open('face_encodings.pkl', 'wb') as f:
        pickle.dump({'encodings': encodings, 'filenames': filenames}, f)
    
    # 后续比对时直接读取,无需再遍历图片
    with open('face_encodings.pkl', 'rb') as f:
        data = pickle.load(f)
    all_encodings = data['encodings']
    all_filenames = data['filenames']
    # 批量比对效率远高于循环单次比对
    results = face_recognition.compare_faces(all_encodings, known_encoding)
    
  • 开启并行特征提取
    face_encodings方法支持num_jobs参数,传入你的CPU线程数即可开启并行提取,比如4线程CPU就设置num_jobs=4,特征提取速度可提升3-4倍:
    unknown_encoding = face_recognition.face_encodings(unknown_image, num_jobs=4)[0]
    
  • 优化运行环境
    1. 不要在Visual Studio 2019中运行脚本,直接使用系统命令行执行Python脚本,可减少IDE占用的内存和CPU资源,避免系统资源争抢
    2. 关闭所有后台不必要的进程,你当前仅4GB内存,Windows7系统本身就会占用2GB左右内存,内存不足触发虚拟内存分页会大幅降低运行速度
    3. 可编译安装支持OpenVINO加速的dlib依赖,适配你的Intel HD Graphics核显,特征提取速度可再提升2-3倍

内容的提问来源于stack exchange,提问作者данил куролесов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:06:03