>
输入: 图片A + 图片B
↓
① 人脸检测 (YuNet 或 Haar Cascade)
↓
② 人脸区域裁剪 + 对齐
↓
③ 特征提取 (SFace ONNX 或 HOG+Patch)
↓
④ 余弦相似度计算
↓
输出: 相似度分数 (0~1) + 判断结论
用户上传的图片位于 /mnt/user-data/uploads/ 下,使用 view 工具列出可用文件:
bash
ls /mnt/user-data/uploads/
将两张图片路径记为 IMAGEA 和 IMAGEB。
根据环境自动选择最优方案:
| 方案 | 检测器 | 特征提取器 | 精度 | 条件 |
|---|---|---|---|---|
| 方案A(推荐) | YuNet ONNX | SFace ONNX | ★★★★★ | 需要 .onnx 模型文件 |
| 方案B(通用) |
如何判断用哪个方案:运行脚本时自动检测,优先使用方案A,若模型文件不存在则自动降级为方案B。
方案A 模型下载(可选,推荐):
https://github.com/opencv/opencvzoo/raw/main/models/facedetectionyunet/facedetectionyunet2023mar.onnx
https://github.com/opencv/opencvzoo/raw/main/models/facerecognitionsface/facerecognitionsface2021dec.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 |
注意:以上阈值基于方案B(HOG特征)。若使用方案A(SFace),推荐阈值为 >0.593(余弦距离)。
📊 人脸识别结果
━━━━━━━━━━━━━━━━━━━━
图片A:检测到 1 张人脸 ✓
图片B:检测到 1 张人脸 ✓
相似度分数:0.847
判断结论:✅ 很可能为同一人(高置信度)
使用算法:SFace (OpenCV FaceRecognizerSF)
━━━━━━━━━━━━━━━━━━━━
| 问题 | 原因 | 处理方式 |
|---|---|---|
| 未检测到人脸 | 图片质量差/无正脸 | 告知用户并建议换图 |
| 检测到多张人脸 |
→ 查看 scripts/face_compare.py 获取完整可执行代码
→ 查看 references/algorithm_notes.md 了解算法原理说明
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 portrait-compare-1776032283 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 portrait-compare-1776032283 技能
skillhub install portrait-compare-1776032283
文件大小: 9.58 KB | 发布时间: 2026-4-13 11:34