Comment transformer un menu papier en photos appetissantes avec Llama 3.2 et Flux
Une situation familière : vous entrez dans un restaurant à l'étranger ou commandez auprès d'un service de livraison proposant une cuisine authentique, et vous vous retrouvez face à une longue liste de plats aux noms incompréhensibles, sans la moindre photo. Vous finissez par googler chaque plat à l'aveugle ou par espérer que tout ira bien.
Le développeur Hassan El Mghari (Nutlope) a mis en place un petit projet open-source appelé PicMenu qui résout ce problème en quelques secondes. Vous téléchargez une photo d'un menu papier, et le service reconnaît tous les plats et génère une image réaliste pour chacun d'eux.
Comment ça fonctionne en coulisses
Pas de microservices volumineux ni de modèles ML personnalisés tournant sur des fermes de GPU ici. Le projet est construit avec Next.js et TypeScript, avec toute la magie computationnelle gérée par une combinaison de modèles open source via le service d'API Together AI.
Le pipeline de traitement est assez élégant :
- Reconnaissance du menu : la photo est envoyée au modèle Llama 3.2 Vision 90B. Il extrait les noms des plats même à partir de formulaires froissés ou au design complexe.
- Structuration des données : le modèle texte rapide Llama 3.1 8B convertit le texte extrait en JSON propre avec les noms et descriptions des plats.
- Génération de photos : le modèle génératif Flux Schnell crée une image pour chaque plat trouvé directement à partir de sa description.
- Stockage et visualisation : les images générées sont stockées dans AWS S3 (ou un stockage compatible), et l'interface basée sur Tailwind et Shadcn UI affiche le menu sous forme de cartes nettes.
L'idée de séparer la reconnaissance et la structuration en deux modèles Llama semble pratique. Le grand modèle 90B gère la partie optique lourde, tandis que le modèle léger 8B formate rapidement le résultat en JSON, ce qui permet de gagner du temps de réponse et des tokens.
Comment déployer le projet en local
Vous pouvez lancer le dépôt sur votre machine en literally cinq minutes. Vous aurez besoin d'une clé API de Together AI et d'un stockage compatible S3 pour télécharger les images.
Clonez le dépôt :
git clone https://github.com/Nutlope/picmenu
cd picmenu
Créez un fichier .env basé sur l'exemple .env.example et remplissez les variables :
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
Installez les dépendances et lancez le serveur de développement :
npm install
npm run dev
Après cela, l'application est disponible à l'adresse http://localhost:3000.
Ce qui fonctionne déjà, et ce qui mérite d'être amélioré
Pour l'instant, PicMenu est un prototype fonctionnel solide (MVP). L'interface semble soignée grâce aux composants Shadcn, et la combinaison du modèle Vision avec Flux fonctionne étonnamment vite.
Cependant, le projet présente quelques limitations que l'auteur liste honnêtement dans la section todo :
- Si le menu est trop volumineux, la génération de tous les plats peut prendre jusqu'à une minute. L'application manque d'un avertissement sur les longs temps de réponse ou d'animations de chargement fluides.
- Flux Schnell est rapide, mais parfois insuffisant en termes de réalisme par rapport à l'ancienne version Flux Dev.
- La version actuelle manque de tags de restrictions alimentaires (végan, sans gluten, épicé) et de filtrage par ceux-ci.
- Il n'y a pas encore de fenêtre modale avec des informations détaillées sur les plats : calories, ingrédients et profil gustatif.
Qui trouvera ce projet utile
Si vous prévoyez un service pour touristes, un agrégateur de menus de restaurants, ou si vous voulez simplement voir comment connecter concrètement des modèles de vision, le mode JSON dans les LLM et la génération d'images via Flux, ce dépôt servira d'excellent modèle. La base de code est simple, les dépendances sont standard et l'architecture n'est pas surchargée d'abstractions inutiles.
Projets similaires