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).
Для комфортной разработки потребуется открыть три терминала (по одному на каждую часть системы) и настроить окружения.
Если вы планируете дообучать модель или экспериментировать с архитектурой.
Требования к железу: Рекомендуется 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
Слой, который держит загруженную модель в памяти и отвечает по 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
Клиентская часть крутится на 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
}
}
По умолчанию FastAPI (server/main.py) настроен на разрешение CORS-запросов только с http://localhost:5173. Если ваш фронтенд запустится на другом порту (например, 5174), вам потребуется обновить allow_origins в main.py.