Spaces:
Running
Running
| title: HCP Face Analysis Service | |
| emoji: π¬ | |
| colorFrom: blue | |
| colorTo: purple | |
| sdk: docker | |
| app_port: 7860 | |
| pinned: false | |
| # HCP Face Analysis Microservice | |
| FastAPI service that runs ten specialised analyzers over a single | |
| photo and returns a merged dictionary of facial attributes plus a | |
| face-recognition embedding and an aesthetic "chopped score." | |
| ## Models | |
| | # | Component | Model | Task | Size | | |
| |---|-----------|-------|------|------| | |
| | 1 | InsightFace | `buffalo_l` (SCRFD + ArcFace ResNet50, ONNX) | Detection + 512-d recognition embedding + 106 landmarks (99.83% LFW) + piecewise-calibrated age | ~280 MB | | |
| | 2 | MediaPipe Face Landmarker | `face_landmarker.task` (Google) | 478 3D landmarks + 52 ARKit blendshapes β geometric features, smiling, mouth-open | ~4 MB | | |
| | 3a | Gender | `dima806/fairface_gender_image_detection` (ViT) | Binary gender + softmax confidence (~93.4% acc) | ~340 MB | | |
| | 3b | Ethnicity | `cledoux42/Ethnicity_Test_v003` (ViT) | 5-class ethnicity (~79.6% acc) | ~340 MB | | |
| | 4 | Human parsing | `matei-dorian/segformer-b5-finetuned-human-parsing` | 18-class pixel segmentation β masks + hair length + hat | ~340 MB | | |
| | 5 | Emotion | HSEmotion `enet_b0_8_best_afew` (EfficientNet-B0) | 8-class emotion + valence/arousal | ~20 MB | | |
| | 6 | Color analysis | (no model β OpenCV LAB/HSV) | Skin tone, hair color, eye color, lip color | 0 MB | | |
| | 7 | Obstruction | `dima806/face_obstruction_image_detection` (ViT-B/16) | glasses / sunglasses / mask (~99% precision) | ~340 MB | | |
| | 8 | Hair type | `dima806/hair_type_image_detection` (ViT-B/16) | curly/dreadlocks/kinky/straight/wavy (~93% acc) | ~340 MB | | |
| | 9 | Beauty regression | timm ResNet-50, fine-tuned on SCUT-FBP5500 | 1.0β5.0 beauty score (~Pearson r β₯ 0.85 expected) | ~100 MB | | |
| | 10 | Aesthetic aggregator | (no model β Python rules) | Combines learned beauty + heuristic factors β chopped_score (0β100) | 0 MB | | |
| InsightFace `buffalo_l` is pre-downloaded at Docker build time. The | |
| MediaPipe weight file is pre-downloaded too. All Hugging Face models | |
| lazy-load on first inference and cache locally for the lifetime of | |
| the process. The SCUT-FBP5500-trained beauty regressor must be | |
| produced via [`training/beauty/`](../training/beauty/) β until you | |
| drop weights in `models/beauty_regressor.pt` (or set | |
| `BEAUTY_HF_REPO_ID`), `beauty_score` returns null and the chopped | |
| score uses heuristics only. | |
| ## API endpoints | |
| - `GET /` β service info | |
| - `GET /health` β liveness check | |
| - `POST /analyze` β multipart file upload | |
| - `POST /analyze-base64` β JSON `{ "image": "<base64>" }` | |
| ## Usage | |
| ```bash | |
| curl -X POST https://YOUR-SPACE.hf.space/analyze-base64 \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"image": "<base64-encoded-image>"}' | |
| ``` | |
| See [architecture.md](./architecture.md) for the pipeline diagram and | |
| the full per-attribute β source map. | |