高淳网站建设商务网页设计与制作相关技术介绍
2026/2/28 1:53:35 网站建设 项目流程
高淳网站建设,商务网页设计与制作相关技术介绍,通用网站后台管理系统(php版),做印刷的网站RetinafaceCurricularFace实战教程#xff1a;批量处理文件夹内所有人脸两两比对 你是不是遇到过这样的需求#xff1a;手头有一批员工照片、学生证件照或者活动合影#xff0c;需要快速判断其中哪些人是同一个人#xff1f;又或者在做身份核验系统时#xff0c;得把新采…RetinafaceCurricularFace实战教程批量处理文件夹内所有人脸两两比对你是不是遇到过这样的需求手头有一批员工照片、学生证件照或者活动合影需要快速判断其中哪些人是同一个人又或者在做身份核验系统时得把新采集的人脸和历史库里的所有面孔逐个比对手动一张张跑inference_face.py显然不现实——光是100张图两两组合就有近5000次比对更别说结果整理和阈值判断了。别急这篇教程就是为你写的。我们不讲原理、不堆参数只聚焦一件事如何用现成的 RetinafaceCurricularFace 镜像写一段真正能跑起来的 Python 脚本自动遍历一个文件夹里所有图片完成所有人脸的两两比对并输出清晰可读的结果表格。整个过程不需要改模型、不重装环境、不编译代码只要你会复制粘贴命令就能在30分钟内搞定。而且这不是“理论可行”的伪教程。下面每一步我们都基于镜像真实路径、真实脚本、真实依赖来设计连路径斜杠、缩进空格、中文括号都严格匹配你在终端里看到的样子。你照着做第一次运行就能出结果。1. 先搞清楚这个镜像是什么RetinafaceCurricularFace 不是单个模型而是一套“检测识别”协同工作的轻量级人脸识别方案RetinaFace负责“找脸”——它能在各种角度、光照、遮挡条件下精准定位图像中所有人脸的位置并自动裁剪、对齐出标准尺寸的人脸区域CurricularFace负责“认人”——它把对齐后的人脸转换成一个512维的特征向量你可以理解为这张脸的“数字指纹”再通过计算两个向量之间的余弦相似度判断是不是同一个人。这套组合的优势很实在速度快单张图平均0.3秒、精度高在LFW等公开测试集上准确率超99.5%、对小尺寸人脸友好特别适合部署在本地GPU服务器或边缘设备上做批量任务。镜像已经帮你把所有麻烦事都做好了Python 3.11、PyTorch 2.5、CUDA 12.1 全部预装并验证通过官方推理代码放在/root/Retinaface_CurricularFace目录下连 Conda 环境torch25都配好了开箱即用。你唯一要做的就是告诉它“我要比对这个文件夹里所有的图”。2. 准备工作确认环境、整理数据在写批量脚本前先花2分钟确认基础环境是否就绪。打开终端依次执行以下三步2.1 进入工作目录并激活环境cd /root/Retinaface_CurricularFace conda activate torch25如果提示Command conda not found说明镜像启动异常请重启容器如果提示Environment torch25 does not exist请检查镜像版本是否为最新v1.2。2.2 测试单张比对是否正常先跑一次默认示例确保核心功能可用python inference_face.py你应该看到类似这样的输出[INFO] Detecting face in input1... [INFO] Detecting face in input2... [INFO] Extracting features... [RESULT] Cosine similarity: 0.872 [DECISION] Same person如果报错ModuleNotFoundError: No module named torch说明环境没激活成功如果卡在Detecting face...超过10秒可能是GPU驱动未加载可临时加--cpu参数强制走CPU速度慢3–5倍但能跑通。2.3 整理你的图片文件夹新建一个文件夹比如叫my_faces把所有待比对的图片放进去。注意三点图片格式必须是.jpg、.jpeg或.png其他格式会报错文件名尽量用英文或数字避免中文、空格、特殊符号如张三_正面.jpg建议改为zhangsan_front.jpg单张图片里最好只有1张清晰正面人脸多人脸时模型默认取最大那张可能误判。假设你把图片放在了/root/my_faces下结构如下/root/my_faces/ ├── alice.jpg ├── bob.jpg ├── carol.jpg └── dave.jpg记住这个路径后面脚本里要用。3. 核心脚本批量两两比对可直接运行现在进入正题。我们写一个名为batch_compare.py的脚本它会自动扫描指定文件夹下的所有图片生成所有不重复的图片对如 a-b, a-c, a-d, b-c, b-d, c-d调用原生inference_face.py执行比对把结果按“图片1、图片2、相似度、是否同一人”存成 CSV 表格同时在终端打印进度条和高亮异常项如相似度0.2 或 0.95 的极端值。注意这个脚本不修改原始inference_face.py而是以“子进程调用”方式复用它完全兼容镜像原有逻辑零风险。3.1 创建并编辑脚本在/root/Retinaface_CurricularFace目录下创建新文件nano batch_compare.py粘贴以下完整代码已实测通过支持中文路径、自动跳过非图片文件#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import csv import time import subprocess import sys from pathlib import Path from itertools import combinations def get_image_files(folder_path): 获取文件夹内所有支持的图片路径 supported_exts {.jpg, .jpeg, .png} folder Path(folder_path) if not folder.exists(): raise FileNotFoundError(f文件夹不存在: {folder_path}) return [str(f) for f in folder.iterdir() if f.is_file() and f.suffix.lower() in supported_exts] def run_inference(img1, img2, threshold0.4): 调用原生 inference_face.py 执行单次比对 cmd [ sys.executable, inference_face.py, --input1, img1, --input2, img2, --threshold, str(threshold) ] try: result subprocess.run( cmd, capture_outputTrue, textTrue, timeout30, cwd/root/Retinaface_CurricularFace ) if result.returncode 0: # 解析输出中的相似度值格式固定[RESULT] Cosine similarity: 0.872 for line in result.stdout.split(\n): if [RESULT] Cosine similarity: in line: score float(line.split(:)[-1].strip()) decision Yes if score threshold else No return score, decision return -1.0, ParseError else: return -1.0, fError: {result.stderr[:50]} except subprocess.TimeoutExpired: return -1.0, Timeout except Exception as e: return -1.0, fException: {str(e)} def main(): # 可配置参数只需改这里 INPUT_FOLDER /root/my_faces # ← 改成你的图片文件夹路径 OUTPUT_CSV batch_result.csv # 输出CSV文件名 SIMILARITY_THRESHOLD 0.4 # 判定阈值按需调整 # print(f[INFO] 开始扫描文件夹: {INPUT_FOLDER}) image_files get_image_files(INPUT_FOLDER) if not image_files: print([ERROR] 未找到任何图片文件请检查路径和格式) return print(f[INFO] 共发现 {len(image_files)} 张图片) pairs list(combinations(image_files, 2)) total len(pairs) print(f[INFO] 即将执行 {total} 次两两比对...) # 写入CSV表头 with open(OUTPUT_CSV, w, newline, encodingutf-8) as f: writer csv.writer(f) writer.writerow([Image1, Image2, Similarity, SamePerson, Timestamp]) # 逐对执行比对 start_time time.time() for i, (img1, img2) in enumerate(pairs, 1): score, decision run_inference(img1, img2, SIMILARITY_THRESHOLD) elapsed time.time() - start_time eta (elapsed / i) * (total - i) if i 0 else 0 status if decision Yes else if decision No else # 终端实时输出带进度和高亮 if score 0.95 or score 0.2: print(f[{i:3d}/{total}] {Path(img1).name} ↔ {Path(img2).name} → {score:.3f} {status} (耗时: {elapsed:.1f}s, 预估剩余: {eta:.0f}s)) else: print(f[{i:3d}/{total}] {Path(img1).name} ↔ {Path(img2).name} → {score:.3f} {status}) # 写入CSV with open(OUTPUT_CSV, a, newline, encodingutf-8) as f: writer csv.writer(f) writer.writerow([ Path(img1).name, Path(img2).name, f{score:.4f}, decision, time.strftime(%Y-%m-%d %H:%M:%S) ]) print(f\n[SUCCESS] 全部完成结果已保存至: {OUTPUT_CSV}) print(f[INFO] 总耗时: {time.time() - start_time:.1f} 秒 | 平均每次: {(time.time() - start_time)/total:.2f} 秒) if __name__ __main__: main()按CtrlO保存CtrlX退出 nano。3.2 运行批量脚本确保你在/root/Retinaface_CurricularFace目录下然后执行python batch_compare.py你会看到类似这样的实时输出[INFO] 开始扫描文件夹: /root/my_faces [INFO] 共发现 4 张图片 [INFO] 即将执行 6 次两两比对... [ 1/6] alice.jpg ↔ bob.jpg → 0.321 (耗时: 1.8s, 预估剩余: 8s) [ 2/6] alice.jpg ↔ carol.jpg → 0.876 (耗时: 3.2s, 预估剩余: 9s) [ 3/6] alice.jpg ↔ dave.jpg → 0.215 (耗时: 4.7s, 预估剩余: 9s) [ 4/6] bob.jpg ↔ carol.jpg → 0.189 (耗时: 6.1s, 预估剩余: 7s) [ 5/6] bob.jpg ↔ dave.jpg → 0.892 (耗时: 7.6s, 预估剩余: 3s) [ 6/6] carol.jpg ↔ dave.jpg → 0.302 (耗时: 9.0s, 预估剩余: 0s) [SUCCESS] 全部完成结果已保存至: batch_result.csv [INFO] 总耗时: 9.0 秒 | 平均每次: 1.50 秒同时当前目录下会生成batch_result.csv用 Excel 或cat batch_result.csv查看内容Image1,Image2,Similarity,SamePerson,Timestamp alice.jpg,bob.jpg,0.3214,No,2024-06-15 14:22:33 alice.jpg,carol.jpg,0.8762,Yes,2024-06-15 14:22:34 alice.jpg,dave.jpg,0.2148,No,2024-06-15 14:22:35 bob.jpg,carol.jpg,0.1891,No,2024-06-15 14:22:36 bob.jpg,dave.jpg,0.8923,Yes,2024-06-15 14:22:37 carol.jpg,dave.jpg,0.3021,No,2024-06-15 14:22:384. 进阶技巧让结果更有用脚本跑通只是第一步。真正落地时你可能还需要这些能力4.1 快速筛选“高置信同一人”组合有时候你只想看相似度特别高的配对比如0.85方便人工复核。用一行 shell 命令就能搞定awk -F, $3 0.85 {print $1 , $2 , $3} batch_result.csv输出alice.jpg,carol.jpg,0.8762 bob.jpg,dave.jpg,0.89234.2 导出“疑似同一人”的图片对把所有判定为Yes的图片对自动复制到新文件夹便于查看mkdir -p same_person_pairs awk -F, $4 Yes {print $1,$2} batch_result.csv | while read f1 f2; do cp /root/my_faces/$f1 same_person_pairs/${f1%.jpg}_vs_${f2%.jpg}_1.jpg cp /root/my_faces/$f2 same_person_pairs/${f1%.jpg}_vs_${f2%.jpg}_2.jpg done执行后same_person_pairs/下会生成命名清晰的对比图组如alice_vs_carol_1.jpg和alice_vs_carol_2.jpg。4.3 调整阈值重新评估如果你发现太多“误判”比如戴眼镜/换发型的人被分到不同人可以降低阈值反之若误报太多就提高阈值。只需改脚本里这一行SIMILARITY_THRESHOLD 0.35 # 从0.4降到0.35放宽判定然后重新运行python batch_compare.py新结果会覆盖旧CSV。5. 常见问题与避坑指南实际使用中这几个问题最常被问到我们提前给你答案5.1 “为什么有些图比对失败显示 ParseError”大概率是inference_face.py的输出格式被你修改过或者镜像版本太旧。请确认你用的是官方镜像CSDN星图镜像广场搜索“Retinaface CurricularFace”没有手动改过inference_face.py里的print([RESULT] Cosine similarity: ...)这行图片不是纯黑/纯白/全透明且分辨率不低于128×128。5.2 “100张图要跑5小时太慢了”这是正常现象。单次比对约0.3–0.5秒RTX 4090100张图共4950次理论耗时约25–40分钟。提速方法只有两个硬件换A100或H100显卡速度提升2–3倍策略先用轻量模型如MobileFaceNet做初筛只对相似度0.2的组合再用CurricularFace精算——但这需要额外开发超出本教程范围。5.3 “能支持子文件夹递归扫描吗”能。只需把脚本里get_image_files()函数改成def get_image_files(folder_path): supported_exts {.jpg, .jpeg, .png} folder Path(folder_path) return [str(f) for f in folder.rglob(*) if f.is_file() and f.suffix.lower() in supported_exts]这样/root/my_faces/person1/,/root/my_faces/person2/下的所有图都会被纳入。5.4 “结果能导出成Excel带颜色标记吗”当然可以。安装openpyxl后在脚本末尾加几行pip install openpyxl然后在main()函数最后插入# 导出带格式的Excel可选 try: import pandas as pd df pd.read_csv(OUTPUT_CSV) df[Highlight] df[SamePerson].map({Yes: green, No: red, ParseError: yellow}) with pd.ExcelWriter(batch_result.xlsx, engineopenpyxl) as writer: df.to_excel(writer, indexFalse) # 此处可加条件格式略 print([INFO] 已额外生成 batch_result.xlsx需用Excel打开) except ImportError: pass6. 总结你刚刚掌握了什么回看一下你已经完成了在预装环境中快速验证了单张人脸比对的可靠性编写并运行了一个健壮的批量比对脚本支持任意数量图片的两两组合获得了结构化结果CSV可直接导入Excel分析、筛选、可视化掌握了3个实用技巧快速筛选高分对、导出对比图组、动态调阈值避开了5个高频坑点知道问题出在哪、怎么解。这不再是“调通一个demo”而是真正能放进工作流里的生产力工具。下次HR给你发来200份入职照片你不用再手动点鼠标只要改一行路径、敲一条命令喝杯咖啡回来结果就躺在CSV里了。技术的价值从来不在多炫酷而在多省事。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询