Spaces:
Running
Running
| # Dockerfile | |
| FROM python:3.10-slim | |
| WORKDIR /app | |
| # ── System deps (OpenCV headless needs libGL) ──────────────────── | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| libgl1 libglib2.0-0 libgomp1 git \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # ── Python deps ─────────────────────────────────────────────────── | |
| COPY requirements.txt . | |
| RUN pip install --no-cache-dir --compile -r requirements.txt | |
| # ── Copy application code ──────────────────────────────────────── | |
| COPY . . | |
| RUN mkdir -p temp_uploads saved_images && chmod -R 777 temp_uploads saved_images | |
| # ── Pre-download all AI models at BUILD time ───────────────────── | |
| # This bakes the weights into the Docker image layer. | |
| # Cold-start on HF Spaces goes from ~3-5 min → ~10 sec. | |
| # Remove this block if your image size budget is tight (<5 GB limit on free HF). | |
| RUN python - <<'EOF' | |
| from transformers import AutoProcessor, AutoModel, AutoImageProcessor | |
| from ultralytics import YOLO | |
| from deepface import DeepFace | |
| import numpy as np | |
| print("Pre-downloading SigLIP …") | |
| AutoProcessor.from_pretrained("google/siglip-base-patch16-224", use_fast=True) | |
| AutoModel.from_pretrained("google/siglip-base-patch16-224") | |
| print("Pre-downloading DINOv2 …") | |
| AutoImageProcessor.from_pretrained("facebook/dinov2-base") | |
| AutoModel.from_pretrained("facebook/dinov2-base") | |
| print("Pre-downloading YOLO …") | |
| YOLO("yolo11n.pt") | |
| print("Pre-downloading GhostFaceNet + RetinaFace …") | |
| dummy = np.zeros((112, 112, 3), dtype=np.uint8) | |
| try: | |
| DeepFace.represent(img_path=dummy, model_name="GhostFaceNet", | |
| detector_backend="retinaface", enforce_detection=False) | |
| except Exception: | |
| pass # first run just downloads weights; inference error is fine here | |
| print("✅ All models cached in image layer") | |
| EOF | |
| EXPOSE 7860 | |
| # ── Two uvicorn workers for true parallelism ───────────────────── | |
| # WEB_CONCURRENCY can be overridden via HF Space env vars | |
| ENV WEB_CONCURRENCY=2 | |
| CMD uvicorn main:app \ | |
| --host 0.0.0.0 \ | |
| --port 7860 \ | |
| --workers ${WEB_CONCURRENCY} \ | |
| --timeout-keep-alive 75 |