# 人脸识别 **Repository Path**: yang230147961/face-recognition ## Basic Information - **Project Name**: 人脸识别 - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-12-24 - **Last Updated**: 2026-04-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 人脸相似度对比工具 基于 DeepFace 的人脸相似度对比工具,支持本地图片和网络图片的混合比较。 ## 功能特性 - 自动识别本地图片和网络图片 - 支持多种人脸识别模型 - 灵活的相似度阈值设置 - 支持多种距离度量方法 - 提供Web界面进行交互式操作 - 提供RESTful API接口供程序调用 ## 一键部署 项目提供了一键部署脚本,可自动完成环境搭建、依赖安装、模型下载和项目启动: ### Linux/macOS ```bash # 给脚本添加执行权限 chmod +x deploy.sh # 运行部署脚本 ./deploy.sh ``` ### Windows ```bash # 直接运行批处理文件 deploy.bat ``` 一键部署脚本会自动完成以下步骤: 1. 检查Python环境(需要Python 3.7+) 2. 创建并激活虚拟环境 3. 升级pip 4. 安装所有依赖包 5. 设置模型目录 6. 下载人脸识别模型 7. 启动Web服务 ## 安装依赖 ```bash pip install deepface requests ``` ## 使用方法 ### Web界面使用 部署完成后,访问 `http://localhost:5001` 即可使用图形化界面进行人脸对比操作: 1. 上传或输入两张人脸图片(支持本地图片和网络图片URL) 2. 选择人脸识别模型(VGG-Face, Facenet, Facenet512, OpenFace, DeepFace, ArcFace) 3. 选择距离度量方法(余弦距离, 欧几里得距离, 欧几里得L2距离) 4. 设置相似度阈值(可选) 5. 点击"开始对比"按钮进行人脸相似度分析 ### 命令行使用 ``` # 本地图片与网络图片对比 python main.py --img1 /Users/returnzero/AllCode/face-recognition/1766541157900.png --img2 /Users/returnzero/AllCode/face-recognition/1766541288048.png # 两张本地图片对比 python main.py --img1 path/to/image1.jpg --img2 path/to/image2.jpg # 两张网络图片对比 python main.py --img1 https://example.com/image1.jpg --img2 https://example.com/image2.jpg ``` ### 高级用法 ``` # 指定相似度阈值 python main.py --img1 image1.jpg --img2 image2.jpg --threshold 0.3 # 指定相似度百分比阈值 (0-100) python main.py --img1 image1.jpg --img2 image2.jpg --threshold-percent 85 # 使用不同模型 python main.py --img1 image1.jpg --img2 image2.jpg --model ArcFace # 输出JSON格式结果 python main.py --img1 image1.jpg --img2 image2.jpg --json # 显示调试信息 python main.py --img1 image1.jpg --img2 image2.jpg --debug ``` ### 参数说明 | 参数 | 类型 | 必需 | 默认值 | 说明 | |------|------|------|--------|------| | `--img1` | 字符串 | 是 | 无 | 第一张图片路径或URL | | `--img2` | 字符串 | 是 | 无 | 第二张图片路径或URL | | `--threshold` | 浮点数 | 否 | 模型默认值 | 距离阈值 | | `--threshold-percent` | 浮点数 | 否 | 无 | 相似度百分比阈值 (0-100) | | `--model` | 字符串 | 否 | Facenet512 | 人脸识别模型 | | `--metric` | 字符串 | 否 | cosine | 距离度量方法 | | `--json` | 布尔值 | 否 | False | 输出JSON格式结果 | | `--debug` | 布尔值 | 否 | False | 显示调试信息 | ### 支持的模型 - `VGG-Face`: VGG模型,速度较快 - `Facenet`: Google的FaceNet模型 - `Facenet512`: FaceNet的512维版本,准确性更高(默认) - `OpenFace`: CMU的OpenFace模型 - `DeepFace`: Facebook的DeepFace模型 - `ArcFace`: ArcFace模型,准确性较高 ### 支持的距离度量 - `cosine`: 余弦距离(默认) - `euclidean`: 欧几里得距离 - `euclidean_l2`: L2归一化欧几里得距离 ## API 接口 系统提供RESTful API接口,方便程序集成调用: ### 健康检查接口 - **GET** `/api/health` - 用途:检查服务健康状态 - 响应示例: ``` { "status": "healthy", "message": "Face recognition API is running" } ``` ### 人脸对比接口 - **POST** `/api/face/compare` - 用途:进行人脸相似度对比 - 请求参数: - `img1`: 第一张图片(可以是文件或URL) - `img2`: 第二张图片(可以是文件或URL) - `model`: 人脸识别模型(默认:Facenet512) - `distance_metric`: 距离度量方法(默认:cosine) - `threshold`: 相似度阈值(可选) - 请求示例: ```bash # 上传文件方式 curl -X POST -F "img1=@image1.jpg" -F "img2=@image2.jpg" -F "model=Facenet512" -F "distance_metric=cosine" http://localhost:5001/api/face/compare # URL方式 curl -X POST -F "img1=https://example.com/image1.jpg" -F "img2=https://example.com/image2.jpg" http://localhost:5001/api/face/compare ``` - 响应示例: ```json { "success": true, "data": { "distance": 0.3256, "verified": true, "similarity_percent": 67.44, "model": "Facenet512", "distance_metric": "cosine", "threshold_used": 0.4, "facial_areas": { "img1": {"x": 100, "y": 100, "w": 200, "h": 200}, "img2": {"x": 120, "y": 110, "w": 180, "h": 180} } } } ``` ## 常见问题 ### 人脸检测失败 如果程序提示"对比失败",请检查: 1. 图片中是否包含清晰可见的人脸 2. 人脸没有被遮挡或角度过于倾斜 3. 图片分辨率是否过低 ### 网络图片无法下载 1. 检查网络连接是否正常 2. 确认图片URL是否有效 3. 检查是否有访问限制或防盗链 ### 模型下载问题 首次运行时,DeepFace会自动下载模型文件,这可能需要一些时间。 ## 示例 ```bash # 基本人脸对比 python main.py --img1 photo1.jpg --img2 photo2.jpg # 使用ArcFace模型进行高精度对比 python main.py --img1 photo1.jpg --img2 photo2.jpg --model ArcFace --metric cosine # 设置80%相似度阈值 python main.py --img1 photo1.jpg --img2 photo2.jpg --threshold-percent 80 # 同时输出JSON格式结果 python main.py --img1 photo1.jpg --img2 photo2.jpg --json --debug ```