人脸识别与相似度比对技能。用户上传两张照片并询问是否为同一人、计算人脸相似度、进行人脸比对或身份核验等场景时使用。适用任务包括人证比对、照片对比、身份核验、人脸匹配等。
text
输入: 图片A + 图片B
↓
① 人脸检测 (YuNet 或 Haar Cascade)
↓
② 人脸区域裁剪 + 对齐
↓
③ 特征提取 (SFace ONNX 或 HOG+Patch)
↓
④ 余弦相似度计算
↓
输出: 相似度分数 (0~1) + 判断结论
用户上传的图片位于 /mnt/user-data/uploads/ 下,使用 view 工具列出可用文件:
bash
ls /mnt/user-data/uploads/
将两张图片路径记为 IMAGE_A 和 IMAGE_B。
根据环境自动选择最优方案:
方案检测器特征提取器精度条件**方案A(推荐)YuNet ONNXSFace ONNX★★★★★需要 .onnx 模型文件方案B(通用)**Haar CascadeHOG + Patch Histogram★★★☆☆仅需 OpenCV 内置
如何判断用哪个方案:运行脚本时自动检测,优先使用方案A,若模型文件不存在则自动降级为方案B。
方案A 模型下载(可选,推荐):
text
https://github.com/opencv/opencv_zoo/raw/main/models/face_detection_yunet/face_detection_yunet_2023mar.onnx
https://github.com/opencv/opencv_zoo/raw/main/models/face_recognition_sface/face_recognition_sface_2021dec.onnx
将两个 .onnx 文件放在工作目录或 /tmp/ 下。
使用以下脚本(也可直接调用 scripts/face_compare.py):
bash
python3 /home/claude/face-recognition/scripts/face_compare.py \
--img1 IMAGE_A \
--img2 IMAGE_B \
--output /tmp/face_result.jpg
脚本会自动:
相似度分数判断结论0.90 ~ 1.00✅ 极高概率为同一人(强烈匹配)0.75 ~ 0.90✅ 很可能为同一人(高置信度)0.60 ~ 0.75⚠️ 可能为同一人(中等置信度,建议人工核验)0.40 ~ 0.60❓ 不确定(低置信度)0.00 ~ 0.40❌ 很可能不是同一人
注意:以上阈值基于方案B(HOG特征)。若使用方案A(SFace),推荐阈值为 >0.593(余弦距离)。
text
📊 人脸识别结果
━━━━━━━━━━━━━━━━━━━━
图片A:检测到 1 张人脸 ✓
图片B:检测到 1 张人脸 ✓
相似度分数:0.847
判断结论:✅ 很可能为同一人(高置信度)
使用算法:SFace (OpenCV FaceRecognizerSF)
━━━━━━━━━━━━━━━━━━━━
问题原因处理方式未检测到人脸图片质量差/无正脸告知用户并建议换图检测到多张人脸图中有多人取最大人脸(面积最大)处理,提示用户图片无法读取格式不支持提示支持 JPG/PNG/BMP/WEBP相似度结果异常光线/角度差异大在结果中加注"受光照/角度影响,结果仅供参考"
→ 查看 scripts/face_compare.py 获取完整可执行代码
→ 查看 references/algorithm_notes.md 了解算法原理说明