Hoe je een papieren menu omzet in aantrekkelijke foodfoto's met Llama 3.2 en Flux
Een herkenbare situatie: je loopt een restaurant in het buitenland binnen of bestelt bij een bezorgservice met authentieke keuken, en daar staat een lange lijst met onbegrijpelijke gerechtnamen zonder één foto. Je eindigt met het googelen van elk gerecht of hopend op het beste.
Ontwikkelaar Hassan El Mghari (Nutlope) stelde een klein open-source project samen genaamd PicMenu dat dit probleem in een paar seconden oplost. Je uploadt een foto van een papieren menu, en de service herkent alle items en genereert een realistische afbeelding voor elk gerecht.
Hoe het werkt onder de motorkap
Er zijn hier geen logge microservices of custom ML-modellen die draaien op GPU-farms. Het project is gebouwd met Next.js en TypeScript, waarbij alle computationele magie wordt afgehandeld door een combinatie van open modellen via de Together AI API-service.
De verwerkingspijplijn is vrij elegant:
- Menu-herkenning: de foto wordt verzonden naar het Llama 3.2 Vision 90B-model. Het extraheert gerechtnamen, zelfs uit verkreukelde of complex ontworpen formulieren.
- Datastructurering: het snelle tekstmodel Llama 3.1 8B zet de geëxtraheerde tekst om in schone JSON met gerechtnamen en beschrijvingen.
- Fotogeneratie: het generatieve model Flux Schnell creëert een afbeelding voor elk gevonden gerecht direct op basis van de beschrijving.
- Opslag en visualisatie: gegenereerde afbeeldingen worden opgeslagen in AWS S3 (of compatibele opslag), en de interface op basis van Tailwind en Shadcn UI toont het menu als nette kaarten.
Het idee om herkenning en structurering op te splitsen in twee Llama-modellen ziet er praktisch uit. Het grote 90B-model handelt het zware optische deel af, terwijl het lichtgewicht 8B-model snel het resultaat formatteert naar JSON, wat responstijd en tokens bespaart.
Hoe het project lokaal te deployen
Je kunt de repository letterlijk in vijf minuten op je machine draaien. Je hebt een API-sleutel van Together AI nodig en elke S3-compatibele opslag voor het uploaden van afbeeldingen.
Kloon de repository:
git clone https://github.com/Nutlope/picmenu
cd picmenu
Maak een .env-bestand op basis van het voorbeeld .env.example en vul de variabelen in:
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
Installeer dependencies en start de dev server:
npm install
npm run dev
Daarna is de applicatie beschikbaar op http://localhost:3000.
Wat al werkt en wat verbetering nodig heeft
Op dit moment is PicMenu een solide werkend prototype (MVP). De interface ziet er netjes uit dankzij Shadcn-componenten, en de combinatie van het Vision-model met Flux werkt verrassend snel.
Het project heeft echter een paar beperkingen die de auteur eerlijk vermeldt in de todo-sectie:
- Als het menu te groot is, kan het genereren van alle items tot een minuut duren. De app mist een waarschuwing over lange responstijden of vloeiende laadanimaties.
- Flux Schnell is snel, maar soms minder realistisch in vergelijking met de oudere Flux Dev-versie.
- De huidige versie mist dieetrestrictie-tags (veganistisch, glutenvrij, pittig) en filteren daarop.
- Er is nog geen modaal venster met gedetailleerde gerechtinformatie: calorieën, ingrediënten en smaakprofiel.
Voor wie is dit project nuttig
Als je een service plant voor toeristen, een restaurantmenu-aggregator, of gewoon wilt zien hoe je vision-modellen, JSON-modus in LLM's en imagegeneratie via Flux praktisch kunt koppelen, dient deze repository als een uitstekend template. De codebase is eenvoudig, dependencies zijn standaard en de architectuur is niet overladen met onnodige abstracties.
Gerelateerde projecten