svelte-fastapi-calorie-estimator Svelte Themes

Svelte Fastapi Calorie Estimator

AI-приложение для распознавания еды по фото и расчета КБЖУ.

🥗 Nutrition AI

AI-приложение для распознавания еды по фото и расчета КБЖУ. Проект представляет собой монорепозиторий, включающий клиентскую часть на Svelte, серверную часть на FastAPI для инференса и пайплайн обучения нейросети (ConvNeXt V2 Nano).


🏗 Архитектура / Структура проекта

Проект разделен на три независимые зоны ответственности, что позволяет легко масштабировать каждую часть и управлять зависимостями:

.
├── client/          # 🎨 Frontend (Svelte 5, Vite, TailwindCSS 4)
│                    # SPA приложение для взаимодействия с пользователем.
├── server/          # ⚙️ Backend (FastAPI, Uvicorn, PyTorch)
│                    # API для загрузки фото и получения предиктов от модели.
└── ml_pipeline/     # 🧠 ML Pipeline (Jupyter, PyTorch, Torchvision)
                     # Скрипты подготовки данных и обучения (ResNet18).

🚀 Локальное развертывание (Developer Experience)

Для комфортной разработки потребуется открыть три терминала (по одному на каждую часть системы) и настроить окружения.

1. ML Pipeline (Обучение нейросети)

Если вы планируете дообучать модель или экспериментировать с архитектурой.

Требования к железу: Рекомендуется CUDA-совместимая GPU (минимум 4GB VRAM для ResNet18).

cd ml_pipeline

# Создаем изолированное окружение для Data Science
python -m venv venv_ml
venv_ml\Scripts\activate  # Для Windows (на Linux/Mac: source venv_ml/bin/activate)

# ⚠️ ВАЖНО: Устанавливаем PyTorch со специфичным индексом для поддержки CUDA (например, cu118)
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
pip install jupyter Pillow timm

# Проверяем видимость GPU
python check_gpu.py

# Запускаем Jupyter для работы с train.ipynb
jupyter notebook

2. Server (Backend & Inference)

Слой, который держит загруженную модель в памяти и отвечает по API.

cd server

# Создаем отдельное окружение для бэкенда (без тяжелых ML-зависимостей вроде Jupyter)
python -m venv venv
venv\Scripts\activate  # Для Windows (на Linux/Mac: source venv/bin/activate)

# Установка базовых зависимостей
pip install fastapi uvicorn python-multipart torch torchvision timm Pillow

# Запуск dev-сервера
uvicorn main:app --reload

3. Client (Frontend)

Клиентская часть крутится на Vite.

cd client

# Установка зависимостей
npm install
# или
yarn install

# Запуск dev-сервера (по умолчанию на http://localhost:5173)
npm run dev
# или
yarn run dev

🔒 Скрытые камни и конфигурация (Обязательно к прочтению)

В репозитории уже находятся необходимые файлы весов и конфигурации.

Файлы весов модели (weights.pt)

В директории server/ лежит файл weights.pt (~45 MB), содержащий обученные веса ConvNeXt V2 Nano.

База данных КБЖУ (calories_db.json)

В папке server/ лежит файл calories_db.json. Бэкенд использует его для маппинга классов нейросети в информацию о еде.

⚠️ Данные КБЖУ — моки. Значения калорий, белков, жиров и углеводов сгенерированы скриптом на основе формулы Атвотера с добавлением случайного шума. Они не являются научно достоверными и предназначены только для отладки пайплайна, вёрстки интерфейса и тестирования логики бэкенда. Не используйте этот файл для реального учёта питания.

Структура файла:

{
    "0": {
        "name": "Яблоко",
        "calories": 52,
        "protein": 0.3,
        "fat": 0.2,
        "carbs": 14
    }
}

CORS и Порты

По умолчанию FastAPI (server/main.py) настроен на разрешение CORS-запросов только с http://localhost:5173. Если ваш фронтенд запустится на другом порту (например, 5174), вам потребуется обновить allow_origins в main.py.

Top categories

Loading Svelte Themes