--- title: Backend Project emoji: 🚀 colorFrom: blue colorTo: indigo sdk: docker pinned: false --- # 🚀 Face Similarity API (FastAPI) āļĒāļīāļ™āļ”āļĩāļ•āđ‰āļ­āļ™āļĢāļąāļšāļŠāļđāđˆāļĢāļ°āļšāļš Backend āļŠāļģāļŦāļĢāļąāļšāļ§āļīāđ€āļ„āļĢāļēāļ°āļŦāđŒāđāļĨāļ°āđ€āļ›āļĢāļĩāļĒāļšāđ€āļ—āļĩāļĒāļšāđƒāļšāļŦāļ™āđ‰āļēāļ„āļĢāļąāļš āđ‚āļ›āļĢāđ€āļˆāļāļ•āđŒāļ™āļĩāđ‰āļ–āļđāļāļ­āļ­āļāđāļšāļšāļĄāļēāđƒāļŦāđ‰āļĢāļąāļ™āļšāļ™ Hugging Face Spaces āđ‚āļ”āļĒāđƒāļŠāđ‰ Docker. ## 🛠ïļ Tech Stack * **Framework:** FastAPI (Python 3.11). * **Database:** SQLAlchemy (Raw SQL). * **Security:** Argon2id & JWT Authentication. * **ML Models:** ConvNeXt & InceptionV3. ## ðŸ’ŧ āļāļēāļĢāļžāļąāļ’āļ™āļēāđāļĨāļ°āļ„āļģāļŠāļąāđˆāļ‡āļ—āļĩāđˆāļŠāļģāļ„āļąāļ (Development Commands) āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāļāļ•āđŒāļ™āļĩāđ‰ āđ€āļĢāļēāđƒāļŠāđ‰ `uv` āļŠāļģāļŦāļĢāļąāļšāļˆāļąāļ”āļāļēāļĢ Python environment āđāļĨāļ° dependencies: ### 1. āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Environment & Dependencies * `uv sync`: āļ•āļīāļ”āļ•āļąāđ‰āļ‡ dependencies āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ—āļĩāđˆāļĢāļ°āļšāļļāđƒāļ™āđ„āļŸāļĨāđŒ `pyproject.toml`. * `uv add `: āđ€āļžāļīāđˆāļĄ package āđƒāļŦāļĄāđˆāđ€āļ‚āđ‰āļēāđ„āļ›āđƒāļ™āđ‚āļ›āļĢāđ€āļˆāļāļ•āđŒ. ### 2. āļāļēāļĢāļĢāļąāļ™āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ (Running Server) * `uv run uvicorn app.main:app --reload`: āļĢāļąāļ™āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāļŠāļģāļŦāļĢāļąāļšāļžāļąāļ’āļ™āļē (Development Server) āđ‚āļ”āļĒāļˆāļ°āļĢāļĩāļŠāļ•āļēāļĢāđŒāļ—āļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļīāđ€āļĄāļ·āđˆāļ­āļĄāļĩāļāļēāļĢāđāļāđ‰āđ„āļ‚āđ‚āļ„āđ‰āļ”. * `--host 0.0.0.0 --port 8000`: (āļ•āļąāļ§āđ€āļĨāļ·āļ­āļāđ€āļŠāļĢāļīāļĄ) āļāļģāļŦāļ™āļ” host āđāļĨāļ° port. ### 3. āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ (Database Migrations) āđ€āļĢāļēāđƒāļŠāđ‰ **Alembic** āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļļāļĄāđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļ‚āļ­āļ‡āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ: * `alembic upgrade head`: āļ­āļąāļ›āđ€āļ”āļ•āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ (Schema) āđƒāļŦāđ‰āđ€āļ›āđ‡āļ™āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļĨāđˆāļēāļŠāļļāļ”. * `alembic revision --autogenerate -m "comment"`: āļŠāļĢāđ‰āļēāļ‡āđ„āļŸāļĨāđŒ migration āđƒāļŦāļĄāđˆāđ‚āļ”āļĒāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļīāļˆāļēāļāļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļ§āļēāļĄāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āđƒāļ™ `models`. * `alembic downgrade -1`: āļĒāđ‰āļ­āļ™āļāļĨāļąāļšāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ› 1 āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™. ### 4. āļāļēāļĢāļ—āļ”āļŠāļ­āļš (Testing) * `pytest`: āļĢāļąāļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļšāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđƒāļ™āđ‚āļŸāļĨāđ€āļ”āļ­āļĢāđŒ `tests/`. ## 📁 āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āđ‚āļ›āļĢāđ€āļˆāļāļ•āđŒ (Project Structure) * `app/api/`: āļˆāļąāļ”āļāļēāļĢ Endpoints āđāļĨāļ° API Logic āļ—āļąāđ‰āļ‡āļŦāļĄāļ” āđāļšāđˆāļ‡āđ€āļ›āđ‡āļ™āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™ (v1). * `app/crud/`: āļ•āļĢāļĢāļāļ°āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ (Create, Read, Update, Delete) āđ‚āļ”āļĒāđƒāļŠāđ‰ Raw SQL āļĢāđˆāļ§āļĄāļāļąāļš SQLAlchemy. * `app/models/`: āļāļēāļĢāļ™āļīāļĒāļēāļĄ Schema āļ‚āļ­āļ‡āļ•āļēāļĢāļēāļ‡āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļ”āđ‰āļ§āļĒ SQLAlchemy Models. * `app/schemas/`: āļāļēāļĢāļ™āļīāļĒāļēāļĄ Data Model āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļĢāļąāļš-āļŠāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ (Validation) āļ”āđ‰āļ§āļĒ Pydantic. * `app/services/`: āļŠāđˆāļ§āļ™āļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļŦāļĨāļąāļāļ‚āļ­āļ‡āļĢāļ°āļšāļš: * `prediction_service.py`: āļāļēāļĢāļ—āļģ ML Inference āļ”āđ‰āļ§āļĒ TensorFlow. * `storage_service.py`: āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđ„āļŸāļĨāđŒāļšāļ™ Cloudflare R2 (S3 Compatible). * `encoding_service.py`: āļāļēāļĢāđāļ›āļĨāļ‡āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™ Vector āđāļĨāļ°āđƒāļ™āļ—āļēāļ‡āļāļĨāļąāļšāļāļąāļ™. * `cosine_similarity_service.py`: āļāļēāļĢāļ„āļģāļ™āļ§āļ“āļ„āļ§āļēāļĄāļ„āļĨāđ‰āļēāļĒāļ„āļĨāļķāļ‡āļ‚āļ­āļ‡āđƒāļšāļŦāļ™āđ‰āļē. * `alembic/`: āđ€āļāđ‡āļšāđ„āļŸāļĨāđŒāđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļ‚āļ­āļ‡āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ (Database Migration Scripts). * `tests/`: āđ„āļŸāļĨāđŒāļŠāļģāļŦāļĢāļąāļšāļ—āļ”āļŠāļ­āļšāļĢāļ°āļšāļš (Unit & Integration Tests). ## 🌐 System URLs * **Live API (Production):** `https://jetsada117-backend-project.hf.space/` * **Interactive Documentation (Scalar):** `https://jetsada117-backend-project.hf.space/scalar` * **Alternative Documentation (Swagger UI):** `https://jetsada117-backend-project.hf.space//docs` ## 📊 Data Structure (25-Dimensional Vector) āļĢāļ°āļšāļšāļˆāļ°āđāļ›āļĨāļ‡āļœāļĨāļĨāļąāļžāļ˜āđŒāļˆāļēāļāļāļēāļĢāļ—āļģāļ™āļēāļĒāļŦāļĢāļ·āļ­āļ„āļģāļšāļĢāļĢāļĒāļēāļĒāđƒāļŦāđ‰āļāļĨāļēāļĒāđ€āļ›āđ‡āļ™ Vector āļ‚āļ™āļēāļ” 25 āļĄāļīāļ•āļī āđ€āļžāļ·āđˆāļ­āđƒāļŠāđ‰āļ„āļģāļ™āļ§āļ“āļ„āļ§āļēāļĄāļ„āļĨāđ‰āļēāļĒāļ„āļĨāļķāļ‡ (Similarity Score): * **Age (6 āļĄāļīāļ•āļī):** [2-6, 7-12, 13-25, 26-40, 41-65, 66+] * **Gender (2 āļĄāļīāļ•āļī):** [āļŠāļēāļĒ, āļŦāļāļīāļ‡] * **Hair Color (3 āļĄāļīāļ•āļī):** [āļ”āļģ, āļ™āđ‰āļģāļ•āļēāļĨ, āļ­āļ·āđˆāļ™āđ†] * **Hair Style (2 āļĄāļīāļ•āļī):** [āļŠāļąāđ‰āļ™, āļĒāļēāļ§] * **Eyebrows (4 āļĄāļīāļ•āļī):** āđāļĒāļāļ•āļēāļĄāļĢāļđāļ›āļ—āļĢāļ‡āļ„āļīāđ‰āļ§ * **Skin Tone (4 āļĄāļīāļ•āļī):** āđāļĒāļāļ•āļēāļĄāđ€āļ‰āļ”āļŠāļĩāļœāļīāļ§ * **Beard (4 āļĄāļīāļ•āļī):** āđāļĒāļāļ•āļēāļĄāļĨāļąāļāļĐāļ“āļ°āļŦāļ™āļ§āļ”āđ€āļ„āļĢāļē ## 🔒 Security & Performance * **Authentication:** āđƒāļŠāđ‰ **Argon2id** āđƒāļ™āļāļēāļĢāđāļŪāļŠāļĢāļŦāļąāļŠāļœāđˆāļēāļ™āđāļĨāļ° **JWT (JSON Web Token)** āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļ—āļĢāļąāļžāļĒāļēāļāļĢ. * **OTP Verification:** āļĢāļ°āļšāļšāļŠāđˆāļ‡āļĢāļŦāļąāļŠāļĒāļ·āļ™āļĒāļąāļ™āļ•āļąāļ§āļ•āļ™āļœāđˆāļēāļ™ Gmail SMTP āđ€āļžāļ·āđˆāļ­āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāđƒāļ™āļāļēāļĢāļŠāļĄāļąāļ„āļĢāļŠāļĄāļēāļŠāļīāļ. * **Cold Start Optimization:** āļĄāļĩāļĢāļ°āļšāļš Dummy Inference āđ€āļžāļ·āđˆāļ­āļ§āļ­āļĢāđŒāļĄāđ‚āļĄāđ€āļ”āļĨ (Warm-up) āļ—āļģāđƒāļŦāđ‰āļĨāļ”āđ€āļ§āļĨāļēāļāļēāļĢāļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ„āļĢāļąāđ‰āļ‡āđāļĢāļāļˆāļēāļ 35 āļ§āļīāļ™āļēāļ—āļĩ āđ€āļŦāļĨāļ·āļ­āđ€āļžāļĩāļĒāļ‡ 3-4 āļ§āļīāļ™āļēāļ—āļĩ. ## ðŸ›Ąïļ Role-Based Access * **Admin:** āļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāđāļĨāļ°āļ”āļđāļŠāļ–āļīāļ•āļīāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđ„āļ”āđ‰. * **User:** āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļ‡āļēāļ™āļāļēāļĢāļ—āļģāļ™āļēāļĒāđāļĨāļ°āļ„āđ‰āļ™āļŦāļēāđƒāļšāļŦāļ™āđ‰āļēāļ—āļĩāđˆāļ„āļĨāđ‰āļēāļĒāļāļąāļ™āđ„āļ”āđ‰.