如何使用 Llama 3.2 和 Flux 将纸质菜单变成诱人的美食照片
一个熟悉的场景:你在国外走进一家餐厅,或者从提供正宗美食的外卖服务下单,面前是一长串看不懂的菜名,却没有一张照片。你只能盲目搜索每道菜,或者碰运气。
开发者 Hassan El Mghari (Nutlope) 制作了一个名为 PicMenu 的小型开源项目,可以在几秒钟内解决这个难题。你上传一张纸质菜单的照片,服务就会识别所有菜品,并为每道菜生成一张逼真的图片。
技术实现原理
这里没有笨重的微服务或运行在 GPU 集群上的自定义 ML 模型。该项目使用 Next.js 和 TypeScript 构建,所有计算魔法都通过 Together AI API 服务调用开源模型组合来完成。
处理流程相当优雅:
- 菜单识别:照片被发送到 Llama 3.2 Vision 90B 模型。即使是从皱巴巴的或设计复杂的菜单表单中,它也能提取菜名。
- 数据结构化:快速文本模型 Llama 3.1 8B 将提取的文本转换为干净的 JSON,包含菜名和描述。
- 照片生成:生成模型 Flux Schnell 直接根据每道菜的描述为其创建图像。
- 存储和可视化:生成的图像存储在 AWS S3(或兼容存储)中,基于 Tailwind 和 Shadcn UI 的界面将菜单显示为整洁的卡片。
将识别和结构化分离到两个 Llama 模型的想法看起来很实用。大型 90B 模型处理繁重的光学部分,而轻量级的 8B 模型快速将结果格式化为 JSON,节省响应时间和 token。
如何在本地部署项目
你实际上可以在五分钟内在你的机器上启动这个仓库。你需要从 Together AI 获取 API 密钥,以及任何 S3 兼容的存储来上传图片。
克隆仓库:
git clone https://github.com/Nutlope/picmenu
cd picmenu
根据示例 .env.example 创建 .env 文件并填写变量:
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
安装依赖并启动开发服务器:
npm install
npm run dev
之后,应用程序可在 http://localhost:3000 访问。
已经实现的功能和待改进的地方
目前,PicMenu 是一个稳定可用的原型(MVP)。由于 Shadcn 组件,界面看起来很整洁,而且 Vision 模型与 Flux 的组合运行速度快得惊人。
然而,该项目有一些局限性,作者在待办事项中坦诚地列出了这些问题:
- 如果菜单太大,生成所有项目可能需要长达一分钟。应用程序缺少关于长时间响应或平滑加载动画的提示。
- Flux Schnell 速度很快,但有时在真实感方面不如旧版 Flux Dev 版本。
- 当前版本缺少饮食限制标签(纯素、无麸质、辣)和按这些标签过滤的功能。
- 目前还没有包含详细菜品信息的模态窗口:卡路里、成分和口味特征。
谁会发现这个项目有用
如果你正在计划一个面向游客的服务、餐厅菜单聚合器,或者只是想了解如何实际连接视觉模型、LLM 中的 JSON 模式以及通过 Flux 生成图像,这个仓库将是一个极好的模板。代码库简单直接,依赖项标准,架构没有不必要的抽象负担。
相关项目