@ -0,0 +1,34 @@ | |||||
# Python | |||||
__pycache__ | |||||
*.pyc | |||||
*.pyo | |||||
*.pyd | |||||
.Python | |||||
env/ | |||||
venv/ | |||||
.env | |||||
*.log | |||||
# Docker | |||||
Dockerfile | |||||
docker-compose.yml | |||||
.dockerignore | |||||
# Git | |||||
.git | |||||
.gitignore | |||||
# IDE | |||||
.vscode/ | |||||
.idea/ | |||||
# Face data (will be mounted as volume) | |||||
*.pkl | |||||
*.faiss | |||||
data/ | |||||
# Others | |||||
README.md | |||||
*.md | |||||
tests/ | |||||
.pytest_cache/ |
@ -0,0 +1,34 @@ | |||||
# Use Python 3.11 slim as base image | |||||
FROM python:3.11-slim | |||||
# Set working directory | |||||
WORKDIR /app | |||||
# Install system dependencies | |||||
RUN apt-get update && apt-get install -y \ | |||||
build-essential \ | |||||
cmake \ | |||||
libgl1-mesa-glx \ | |||||
libglib2.0-0 \ | |||||
libsm6 \ | |||||
libxext6 \ | |||||
libxrender-dev \ | |||||
&& rm -rf /var/lib/apt/lists/* | |||||
# Copy requirements first for better caching | |||||
COPY requirements.txt . | |||||
# Install Python dependencies | |||||
RUN pip install --no-cache-dir -r requirements.txt | |||||
# Copy application code | |||||
COPY . . | |||||
# Create directory for face data persistence | |||||
RUN mkdir -p /app/data | |||||
# Expose port | |||||
EXPOSE 8000 | |||||
# Command to run the application | |||||
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] |
@ -0,0 +1,34 @@ | |||||
version: '3.8' | |||||
services: | |||||
face-recognition-api: | |||||
build: . | |||||
container_name: face-recognition-api | |||||
ports: | |||||
- "8000:8000" | |||||
volumes: | |||||
- ./data:/app/data # For persisting face data | |||||
environment: | |||||
- PYTHONUNBUFFERED=1 | |||||
- MAX_WORKERS=4 | |||||
- FACE_DETECTION_SIZE=640 | |||||
- SIMILARITY_THRESHOLD=0.6 | |||||
deploy: | |||||
resources: | |||||
limits: | |||||
cpus: '2' | |||||
memory: 4G | |||||
reservations: | |||||
cpus: '1' | |||||
memory: 2G | |||||
restart: unless-stopped | |||||
healthcheck: | |||||
test: ["CMD", "curl", "-f", "http://localhost:8000/"] | |||||
interval: 30s | |||||
timeout: 10s | |||||
retries: 3 | |||||
start_period: 40s | |||||
networks: | |||||
default: | |||||
driver: bridge |