# 人脸特征提取API - 项目总结 ## ✅ 已完成功能 ### 1. 核心API接口 (已实现) #### 📌 接口1: 人脸特征提取 - **路径**: `POST /api/extract_feature` - **输入**: 人脸图像文件 - **输出**: 1024维特征向量 + 质量评估 - **文件**: [app.py:138-197](app.py#L138-L197) #### 📌 接口2: 特征向量对比 - **路径**: `POST /api/compare_features` - **输入**: 两个1024维特征向量 - **输出**: 相似度分数 + 同一人判断 - **文件**: [app.py:200-244](app.py#L200-L244) #### 📌 接口3: 图像特征对比 (组合接口) - **路径**: `POST /api/compare_image_feature` - **输入**: 图像 + 特征向量 - **输出**: 相似度分数 + 同一人判断 - **文件**: [app.py:247-315](app.py#L247-L315) --- ## 📁 项目文件结构 ``` FaceFeatureExtractorAPI/ ├── app.py # FastAPI主应用 (新增) ├── face_feature_extractor.py # 核心特征提取器 ├── requirements.txt # 依赖包 (已更新) ├── README_API.md # API快速启动指南 (新增) ├── API_USAGE.md # 详细API使用文档 (新增) ├── FEATURE_DIMENSION.md # 特征维度说明 (新增) ├── examples/ │ ├── api_client_example.py # Python客户端示例 (新增) │ └── face_recognition_example.py # 人脸识别示例 ├── models/ # 模型实现 │ ├── facedetector.py │ ├── facerecoger.py # 特征提取 (1024维) │ ├── facelandmarks5er.py │ ├── facealign.py │ └── imgchecker.py └── checkpoints/ # ONNX模型文件 └── face_recognizer.onnx # 特征提取模型 (输出1024维) ``` --- ## 🚀 快速启动 ### 1. 安装依赖 ```bash pip install -r requirements.txt ``` 新增依赖: - `fastapi>=0.104.0` - Web框架 - `uvicorn[standard]>=0.24.0` - ASGI服务器 - `python-multipart>=0.0.6` - 文件上传支持 ### 2. 启动服务 ```bash python app.py ``` 或自定义启动: ```bash python app.py --host 0.0.0.0 --port 8000 --reload ``` ### 3. 访问文档 - **交互式文档**: http://localhost:8000/docs - **健康检查**: http://localhost:8000/health --- ## 📊 技术规格 ### 模型参数 - **输入尺寸**: 248×248 (人脸对齐后) - **特征维度**: 1024维 (固定,由模型决定) - **归一化**: L2归一化 - **相似度算法**: 余弦相似度 (点积) ### 质量检查 - ✅ 亮度检查 - ✅ 分辨率检查 - ✅ 清晰度检查 - ✅ 姿态检查 (正面/侧面/低头/抬头) ### 判断阈值 - **默认阈值**: 0.7 - **>= 0.7**: 判断为同一人 - **< 0.7**: 判断为不同人 --- ## 🎯 典型应用场景 ### 1. 人脸注册系统 ```python # 提取特征并存储 feature = extract_feature(user_image) database.save(user_id, feature) ``` ### 2. 人脸验证 (1:1) ```python # 使用接口3直接对比 result = compare_image_feature(live_image, stored_feature) if result['is_same_person']: grant_access() ``` ### 3. 人脸识别 (1:N) ```python # 提取特征后与数据库批量对比 query_feature = extract_feature(unknown_image) for user_id, stored_feature in database.items(): similarity = compare_features(query_feature, stored_feature) if similarity >= threshold: return user_id ``` ### 4. 人脸去重 ```python # 批量对比找出重复 for i, feat1 in enumerate(features): for j, feat2 in enumerate(features[i+1:]): if compare_features(feat1, feat2)['similarity'] >= 0.9: mark_as_duplicate(i, j) ``` --- ## 💡 重要说明 ### 特征维度 (重点) **当前模型输出: 1024维 (不可运行时调整)** - ❌ 无法通过配置修改 (由ONNX模型架构决定) - ✅ 可以使用PCA等降维技术优化存储 - ✅ 可以更换其他预训练模型(如512维的ArcFace) 详见: [FEATURE_DIMENSION.md](FEATURE_DIMENSION.md) ### API设计特点 1. **接口1 + 接口2**: 灵活组合,适合复杂场景 2. **接口3**: 便捷封装,适合简单验证场景 3. **质量过滤**: 自动过滤低质量人脸 4. **错误处理**: 完善的异常捕获和错误提示 --- ## 📖 文档索引 | 文档 | 说明 | |------|------| | [README_API.md](README_API.md) | 快速启动指南 | | [API_USAGE.md](API_USAGE.md) | 详细API文档 + 完整示例 | | [FEATURE_DIMENSION.md](FEATURE_DIMENSION.md) | 特征维度说明 | | [examples/api_client_example.py](examples/api_client_example.py) | Python客户端完整示例 | --- ## 🧪 测试 ### 使用交互式文档测试 访问 http://localhost:8000/docs 可以直接测试所有接口 ### Python代码测试 ```python import requests # 测试健康检查 resp = requests.get("http://localhost:8000/health") print(resp.json()) # 测试特征提取 with open("face.jpg", "rb") as f: resp = requests.post( "http://localhost:8000/api/extract_feature", files={"image": f} ) print(resp.json()) ``` --- ## ⚙️ 性能优化建议 ### 后端优化 1. **GPU加速**: 安装 `onnxruntime-gpu` (如有GPU) 2. **多实例部署**: 使用Nginx负载均衡 3. **异步处理**: 大批量请求使用异步队列 4. **特征缓存**: Redis缓存已提取特征 ### 存储优化 1. **降维**: PCA降到512维可节省50%存储 2. **压缩**: GZIP压缩特征JSON 3. **量化**: Float32 → Float16 (精度略有损失) --- ## 🔧 常见问题 ### Q: 如何修改相似度阈值? A: 在 [app.py:216](app.py#L216) 和 [app.py:296](app.py#L296) 修改 `threshold = 0.7` ### Q: 如何支持批量特征提取? A: 可以添加新接口,循环调用 `extract_features()` 方法 ### Q: 能否改为512维特征? A: 需要更换模型或使用降维技术,详见 [FEATURE_DIMENSION.md](FEATURE_DIMENSION.md) ### Q: 如何提高识别准确率? A: 1. 提高阈值 (0.75-0.85) 2. 确保输入图像质量 3. 收集更多训练数据重新训练模型 --- ## 📋 下一步建议 ### 可选增强功能 - [ ] 批量特征提取接口 - [ ] 特征降维接口 (PCA) - [ ] 活体检测集成 - [ ] 人脸质量评分接口 - [ ] Websocket实时识别 - [ ] 数据库集成 (PostgreSQL/MySQL) - [ ] 用户管理接口 - [ ] API密钥认证 ### 部署建议 - [ ] Docker容器化 - [ ] Kubernetes编排 - [ ] CI/CD流水线 - [ ] 监控和日志 (Prometheus + Grafana) --- ## 📞 支持 遇到问题请查看: 1. 交互式文档: http://localhost:8000/docs 2. 详细API文档: [API_USAGE.md](API_USAGE.md) 3. 客户端示例: [examples/api_client_example.py](examples/api_client_example.py) --- **项目状态**: ✅ 核心功能已完成,可投入使用 **最后更新**: 2025-10-17