CPU 也能跑的人脸识别部署实录
要做一个能用的人脸识别系统,不一定非得先把 GPU、CUDA 和一堆版本依赖理顺。这个场景里,RetinaFace 负责检测人脸,CurricularFace 负责提特征,配上预置好的镜像,CPU 环境就能直接跑起来。省掉的不是'几条命令',而是最容易把人磨没耐心的那段环境排障。
这套方案的思路很简单:先找到脸,再判断是不是同一个人。RetinaFace 会在图片里定位人脸和五个关键点,CurricularFace 把对齐后的人脸编码成 512 维特征向量,最后用余弦相似度做比对。流程不复杂,重点是链路已经封好了,inference_face.py 把检测、对齐、特征提取和相似度计算都串了起来。
快速启动
先进入工作目录并激活预置环境:
cd /root/Retinaface_CurricularFace
conda activate torch25
环境里常用依赖已经装好,模型权重也在镜像里,不需要再额外下载。确认没问题后,直接运行示例脚本:
python inference_face.py
脚本默认会拿内置的两张图片做比对,终端里会输出检测到的人脸数量、相似度分数和最终判定结果。一般还能看到生成的结果图,检测框和关键点会一并画出来。
如果要换成自己的图片,把文件传到当前目录后,再指定输入路径即可:
python inference_face.py --input1 ./my_face1.jpg --input2 ./my_face2.jpg
也可以用简写:
python inference_face.py -i1 ./my_face1.jpg -i2 ./my_face2.jpg
参数怎么用
inference_face.py 主要就三个参数,够用了:
| 参数 | 简写 | 作用 | 默认值 |
|---|---|---|---|
--input1 | -i1 | 第一张图片路径,也支持 URL | 内置示例图 1 |
--input2 | -i2 | 第二张图片路径,也支持 URL | 内置示例图 2 |
--threshold | -t | 判定阈值,相似度高于它就认为是同一人 | 0.4 |
阈值没有统一答案,得看你要干什么。做门禁、支付这类场景,阈值一般要抬高一点,宁可保守;做相册整理、同人聚类,阈值可以松一些,目标是尽量把同一个人找全。0.4 不是标准答案,只是一个能跑起来的起点。
几个常见用法:
python inference_face.py -i1 ./employee_morning.jpg -i2 ./employee_afternoon.jpg --threshold 0.65
这个更适合严格比对,阈值提高后,误判为同一个人的概率会低一些,但漏掉也会更多。
python inference_face.py -i1 https://example.com/photo_a.jpg -i2 https://example.com/photo_b.jpg
直接喂网络图片也行,脚本会自己拉取并处理,做验证时挺省事。
如果要批量测,脚本本身没有把整个文件夹一次性扫完的接口,但可以自己包一层循环,思路大概这样:
import os
import subprocess
folder1 = './personA_photos'
folder2 = './personB_photos'
for img1 in os.listdir(folder1)[:5]:
for img2 in os.listdir(folder2)[:5]:
path1 = os.path.join(folder1, img1)
path2 = os.path.join(folder2, img2)
cmd = f'python inference_face.py -i1 {path1} -i2 {path2}'
print(f"\n比对:{img1} vs {img2}")
subprocess.run(cmd, shell=True)
这套流程实际做了什么
脚本跑起来后,背后就是几步固定动作:先加载模型,再读图,接着用 RetinaFace 找最大的人脸和关键点,做对齐,然后送进 CurricularFace 提特征,最后算余弦相似度并和阈值比较。逻辑没什么神秘的,真正影响结果的反而是输入图片质量和阈值设置。
这里有几个容易踩空的地方。
- 图片尽量清晰、正面、光线正常。人脸太小、遮挡太多,效果都会掉。
- 脚本默认只处理每张图里最大的那张脸。单人照没问题,多人合影就不太够用,想识别特定对象得先自己裁图。
- 侧脸、背光、极暗环境都会影响相似度,别指望模型在所有照片上都表现得一样稳。
- 美颜太重的图不太友好,脸部纹理和结构被改得太多,特征会跟着飘。
结论
这套方案的价值,不在于它有多'炫',而在于它够省事。预置镜像把环境和模型都准备好了,inference_face.py 把识别流程也封装好了,剩下的事就是换图片、调阈值、看结果。对课程作业、原型验证、简单 demo 来说,这已经够用了。
如果后面还想继续扩展,可以在这个比对链路上往外接:做相册分类、做考勤 demo,或者写个小工具去筛自己在社交媒体上的照片。底层这套检测 + 特征 + 比对的流程,能支撑的东西比看上去多一点。

