Cómo Convertir un Menú de Papel en Fotos Apetitosas de Comida con Llama 3.2 y Flux
Una situación familiar: entras a un restaurante en el extranjero o pides a un servicio de entrega con cocina auténtica, y hay una larga lista de nombres de platos incomprensibles sin una sola foto. Terminas buscando cada plato a ciegas en Google o esperando lo mejor.
El desarrollador Hassan El Mghari (Nutlope) creó un pequeño proyecto de código abierto llamado PicMenu que resuelve este problema en un par de segundos. Subes una foto de un menú de papel, y el servicio reconoce todos los platos y genera una imagen realista de cada uno.
Cómo funciona internamente
No hay microservicios voluminosos ni modelos ML personalizados ejecutándose en granjas de GPU aquí. El proyecto está construido con Next.js y TypeScript, con toda la magia computacional manejada por una combinación de modelos abiertos a través del servicio de API de Together AI.
El pipeline de procesamiento es bastante elegante:
- Reconocimiento del menú: la foto se envía al modelo Llama 3.2 Vision 90B. Extrae los nombres de los platos incluso de formularios arrugados o con diseños complejos.
- Estructuración de datos: el modelo de texto rápido Llama 3.1 8B convierte el texto extraído en JSON limpio con nombres y descripciones de platos.
- Generación de fotos: el modelo generativo Flux Schnell crea una imagen para cada plato encontrado directamente basándose en su descripción.
- Almacenamiento y visualización: las imágenes generadas se almacenan en AWS S3 (o almacenamiento compatible), y la interfaz basada en Tailwind y Shadcn UI muestra el menú como tarjetas ordenadas.
La idea de dividir el reconocimiento y la estructuración en dos modelos Llama parece práctica. El modelo grande de 90B maneja la parte óptica pesada, mientras que el modelo ligero de 8B formatea rápidamente el resultado en JSON, ahorrando tiempo de respuesta y tokens.
Cómo desplegar el proyecto localmente
Puedes poner en marcha el repositorio en tu máquina en literalmente cinco minutos. Necesitarás una clave API de Together AI y cualquier almacenamiento compatible con S3 para subir imágenes.
Clona el repositorio:
git clone https://github.com/Nutlope/picmenu
cd picmenu
Crea un archivo .env basado en el ejemplo .env.example y completa las 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
Instala las dependencias e inicia el servidor de desarrollo:
npm install
npm run dev
Después de eso, la aplicación está disponible en http://localhost:3000.
Qué funciona ya y qué necesita mejora
Por ahora, PicMenu es un prototipo funcional sólido (MVP). La interfaz se ve ordenada gracias a los componentes de Shadcn, y la combinación del modelo Vision con Flux funciona sorprendentemente rápido.
Sin embargo, el proyecto tiene algunas limitaciones que el autor lista honestamente en la sección de tareas pendientes:
- Si el menú es demasiado grande, generar todos los platos puede tardar hasta un minuto. La aplicación carece de una advertencia sobre tiempos de respuesta largos o animaciones de carga suaves.
- Flux Schnell es rápido, pero a veces se queda corto en realismo comparado con la versión anterior Flux Dev.
- La versión actual carece de etiquetas de restricciones dietéticas (vegano, sin gluten, picante) y filtrado por ellas.
- Todavía no hay una ventana modal con información detallada del plato: calorías, ingredientes y perfil de sabor.
A quién le será útil este proyecto
Si estás planeando un servicio para turistas, un agregador de menús de restaurantes, o simplemente quieres ver cómo conectar prácticamente modelos de visión, modo JSON en LLMs y generación de imágenes a través de Flux, este repositorio servirá como una excelente plantilla. El código es directo, las dependencias son estándar y la arquitectura no está sobrecargada con abstracciones innecesarias.
Proyectos relacionados