Как превратить бумажное меню в аппетитные фото блюд с помощью Llama 3.2 и Flux

16 авг 2026
457
93
5
2 месяца

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

Разработчик Хассан Эль Мгари (Nutlope) собрал небольшой опенсорс-проект PicMenu, который решает эту проблему за пару секунд. Вы загружаете фотографию бумажного меню, а сервис распознает все позиции и генерирует реалистичное изображение для каждого блюда.

PicMenu

Как это устроено под капотом

Здесь нет громоздких микросервисов или собственных ML-моделей на GPU-ферме. Проект написан на Next.js с TypeScript, а вся магия вычислений держится на связке открытых моделей через API сервиса Together AI.

Конвейер обработки устроен довольно изящно:

Реклама
  1. Распознавание меню: фотография отправляется в модель Llama 3.2 Vision 90B. Она вытаскивает текст блюд даже с мятых или сложных дизайнерских бланков.
  2. Структурирование данных: быстрая текстовая модель Llama 3.1 8B переводит полученный текст в чистый JSON с названиями и описаниями позиций.
  3. Генерация фото: генеративная модель Flux Schnell создает изображение для каждого найденного блюда прямо по его описанию.
  4. Хранение и визуализация: сгенерированные картинки складываются в AWS S3 (или совместимое хранилище), а интерфейс на базе Tailwind и Shadcn UI выводит меню в виде аккуратных карточек.

Идея разделить распознавание и структурирование на две модели Llama выглядит практично. Большая 90B-модель берет на себя тяжелую оптическую часть, а легкая 8B-модель быстро форматирует результат в JSON, экономя время ответа и токены.

Как развернуть проект локально

Запустить репозиторий у себя можно буквально за пять минут. Потребуется ключ API от Together AI и любое S3-совместимое хранилище для загрузки изображений.

Клонируем репозиторий:

git clone https://github.com/Nutlope/picmenu
cd picmenu

Создаем файл .env на основе примера .env.example и заполняем переменные:

TOGETHER_API_KEY=your_together_api_key # Настройки AWS S3 для загрузки картинок NEXT_PUBLIC_S3_BUCKET_NAME=your_bucket S3_UPLOAD_KEY=your_access_key S3_UPLOAD_SECRET=your_secret_key S3_UPLOAD_BUCKET=your_bucket_name S3_UPLOAD_REGION=your_region

Устанавливаем зависимости и запускаем dev-сервер:

npm install
npm run dev

После этого приложение доступно по адресу http://localhost:3000.

Что уже работает, а над чем стоит поработать

Сейчас PicMenu — это добротный рабочий прототип (MVP). Интерфейс выглядит опрятно благодаря компонентам Shadcn, а связка Vision-модели с Flux работает на удивление шустро.

Правда, у проекта есть несколько ограничений, о которых автор честно пишет в списке задач:

  • Если меню слишком большое, генерация всех позиций может занимать до минуты. Приложению не хватает предупреждения о долгом ответе или плавной анимации загрузки.
  • Flux Schnell работает быстро, но иногда уступает по реалистичности старшей версии Flux Dev.
  • В текущей версии нет тегов диетических ограничений (веганское, без глютена, острое) и фильтрации по ним.
  • Пока нет модального окна с подробной информацией о блюде: калорийностью, составом и вкусовым профилем.

Кому проект пригодится

Если вы планируете сервис для туристов, агрегатор ресторанных меню или просто хотите посмотреть, как на практике связывать vision-модели, JSON-режим в LLM и генерацию картинок через Flux, этот репозиторий послужит отличным шаблоном. Кодовая база понятная, зависимости стандартные, а архитектура не перегружена лишними абстракциями.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.