Jak zamienić papierowe menu w apetyczne zdjęcia potraw dzięki Llama 3.2 i Flux
Znana sytuacja: wchodzisz do restauracji za granicą lub zamawiasz z serwisu dostawczego z autentyczną kuchnią, a tam długa lista niezrozumiałych nazw potraw bez ani jednego zdjęcia. Kończysz na ślepym wyszukiwaniu każdej potrawy w internecie lub liczeniu na szczęście.
Developer Hassan El Mghari (Nutlope) stworzył niewielki projekt open-source o nazwie PicMenu, który rozwiązuje ten problem w kilka sekund. Wgrywasz zdjęcie papierowego menu, a serwis rozpoznaje wszystkie pozycje i generuje realistyczny obraz dla każdej potrawy.
Jak to działa pod maską
Nie znajdziesz tutaj rozbudowanych mikroserwisów ani niestandardowych modeli ML działających na farmach GPU. Projekt został zbudowany przy użyciu Next.js i TypeScript, a cała obliczeniowa magia jest obsługiwana przez kombinację otwartych modeli poprzez serwis API Together AI.
Potok przetwarzania jest dość elegancki:
- Rozpoznawanie menu: zdjęcie jest wysyłane do modelu Llama 3.2 Vision 90B. Wyodrębnia nazwy potraw nawet ze zmiętych lub skomplikowanie zaprojektowanych formularzy.
- Strukturyzacja danych: szybki model tekstowy Llama 3.1 8B konwertuje wyodrębniony tekst na czysty JSON z nazwami potraw i opisami.
- Generowanie zdjęć: model generatywny Flux Schnell tworzy obraz dla każdej znalezionej potrawy bezpośrednio na podstawie jej opisu.
- Przechowywanie i wizualizacja: wygenerowane obrazy są przechowywane w AWS S3 (lub kompatybilnym magazynie), a interfejs oparty na Tailwind i Shadcn UI wyświetla menu jako schludne karty.
Pomysł rozdzielenia rozpoznawania i strukturyzacji na dwa modele Llama wydaje się praktyczny. Duży model 90B zajmuje się ciężką częścią optyczną, podczas gdy lekki model 8B szybko formatuje wynik do JSON, oszczędzając czas odpowiedzi i tokeny.
Jak wdrożyć projekt lokalnie
Możesz uruchomić repozytorium na swojej maszynie dosłownie w pięć minut. Będziesz potrzebować klucza API od Together AI oraz dowolnego magazynu kompatybilnego z S3 do przesyłania obrazów.
Sklonuj repozytorium:
git clone https://github.com/Nutlope/picmenu
cd picmenu
Utwórz plik .env na podstawie przykładu .env.example i wypełnij zmienne:
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
Zainstaluj zależności i uruchom serwer deweloperski:
npm install
npm run dev
Po tym aplikacja będzie dostępna pod adresem http://localhost:3000.
Co już działa, a co wymaga poprawy
Na ten moment PicMenu to solidny działający prototyp (MVP). Interfejs wygląda schludnie dzięki komponentom Shadcn, a połączenie modelu Vision z Flux działa zaskakująco szybko.
Jednak projekt ma kilka ograniczeń, które autor szczerze wymienia w sekcji todo:
- Jeśli menu jest zbyt duże, generowanie wszystkich pozycji może zająć nawet minutę. Aplikacja nie ma ostrzeżenia o długim czasie odpowiedzi ani płynnych animacji ładowania.
- Flux Schnell jest szybki, ale czasami brakuje mu realizmu w porównaniu ze starszą wersją Flux Dev.
- Obecna wersja nie ma tagów ograniczeń dietetycznych (wegan, bezgluten, ostre) ani filtrowania według nich.
- Na razie nie ma okna modalnego z szczegółowymi informacjami o potrawie: kalorie, składniki i profil smakowy.
Dla kogo ten projekt będzie przydatny
Jeśli planujesz serwis dla turystów, agregator menu restauracyjnych lub po prostu chcesz zobaczyć, jak praktycznie połączyć modele wizyjne, tryb JSON w LLM-ach i generowanie obrazów przez Flux, to repozytorium posłuży jako doskonały szablon. Kod jest przejrzysty, zależności są standardowe, a architektura nie jest przeciążona niepotrzebnymi abstrakcjami.
Powiązane projekty