Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📷 配料表镜头 · Ingredient Lens

拍一张食品配料表照片,AI 自动分析健康度、解读每个成分、标出风险配料

License: MIT GitHub stars GitHub forks GitHub issues GitHub PRs Last Commit

Backend: FastAPI Mobile: React Native AI: 通义千问 Python TypeScript

功能 · 架构 · 快速开始 · API · 部署 · 贡献 · 路线图


✨ 功能特性

  • 📷 拍即分析 — 拍摄或从相册选择配料表照片,一键上传分析
  • 🩺 健康度评分 — 0-100 分 + 优秀/良好/一般/较差四级,红黄绿直观展示
  • 🧪 逐个成分解读 — 点击任意配料查看详细说明(别名、E 编码、ADI、作用、适宜/避免人群、参考来源)
  • ⚠️ 风险配料高亮 — 自动列出对身体可能有影响的配料,说明影响并给出消费建议
  • 🔬 AI + 规则双评分 — 大模型语义判断 + 透明启发式规则交叉校验,评分稳定可解释
  • 🌐 中英文双语 — 配料关键词表覆盖中英文别名与 E 编码,国内外食品都能识别
  • 🇨🇳 国产模型 — 通义千问 VL 多模态,国内访问稳定,无需翻墙

🏗️ 技术架构

技术 选型理由
移动端 React Native + Expo (TypeScript) 一套代码 iOS/Android 双端,开源生态成熟,相机能力原生
后端 Python FastAPI 异步高性能、自动生成 OpenAPI 文档、社区易贡献
AI 通义千问 VL (qwen-vl-max) + qwen-turbo 多模态一次完成 OCR+分析,国内可直连
集成方式 DashScope OpenAI 兼容端点 复用 openai SDK,可低成本切换到其它兼容模型

完整的架构原理、数据流图、设计决策详见 📄 docs/ARCHITECTURE.md

数据流概览

┌─────────────────┐      HTTPS       ┌──────────────────────┐      ┌─────────────┐
│  React Native   │  ──────────────► │      FastAPI         │ ───► │ 通义千问 VL  │
│  拍照 → 上传     │   POST /analyze  │  AI识别 + 规则评分    │      │ (OCR+分类)  │
│  展示评分/配料   │  ◄────────────── │  融合 → 结构化返回    │ ◄─── │  JSON 输出  │
└─────────────────┘   AnalysisResp   └──────────────────────┘      └─────────────┘

📁 项目结构

ingredient-lens/
├── backend/                 # FastAPI 后端
│   ├── app/
│   │   ├── main.py          # 应用入口 (CORS / 异常 / 路由装配)
│   │   ├── api/routes.py    # API 路由 (/analyze, /ingredient/{name})
│   │   ├── services/
│   │   │   ├── ai_service.py          # 通义千问封装 (VL 识别 + 文本解读)
│   │   │   ├── health_scorer.py       # 规则评分器 (透明可调)
│   │   │   └── ingredient_analyzer.py # 编排: AI + 规则 + 校验
│   │   ├── models/schemas.py          # Pydantic 数据契约 (前后端共享)
│   │   └── core/config.py             # 环境变量配置
│   ├── requirements.txt
│   ├── Dockerfile
│   └── .env.example
├── mobile/                  # React Native + Expo 移动端
│   ├── App.tsx              # 导航入口
│   ├── src/
│   │   ├── screens/         # Camera / Result / IngredientDetail
│   │   ├── components/      # HealthScore / IngredientCard / WarningList
│   │   ├── services/api.ts  # 后端 API 客户端
│   │   ├── types/index.ts   # 与后端 schemas 对齐的 TS 类型
│   │   ├── theme/colors.ts  # 主题与等级配色
│   │   └── navigation.ts    # 路由参数类型
│   ├── app.json
│   └── package.json
├── docs/ARCHITECTURE.md     # 架构原理详解
├── CONTRIBUTING.md          # 贡献指南
└── CODE_OF_CONDUCT.md       # 行为准则

🚀 快速开始

前置准备

  1. 通义千问 API Key — 在 DashScope 控制台 申请,新用户有免费额度
  2. Python 3.10+
  3. Node.js 18+ + Expo CLI (npm i -g expo-cli)

1️⃣ 启动后端

cd backend
python -m venv .venv && source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -r requirements.txt

cp .env.example .env
# 编辑 .env, 填入 DASHSCOPE_API_KEY=sk-xxxxx

uvicorn app.main:app --reload --port 8000

启动后访问:

2️⃣ 启动移动端

cd mobile
npm install

# 配置后端地址 (真机用电脑局域网 IP, 安卓模拟器用 10.0.2.2)
export EXPO_PUBLIC_API_BASE_URL=http://192.168.x.x:8000

npx expo start

按提示用 Expo Go App 扫码即可在手机上预览(iOS/Android 均可)。

⚠️ 移动端访问本机后端:iOS 模拟器用 localhost,Android 模拟器用 10.0.2.2,真机用电脑局域网 IP 且确保同一 WiFi、防火墙放行 8000 端口。

3️⃣(可选)图标与启动图

mobile/app.json 引用了 assets/ 下的图标,首次开发可自行添加 icon.pngsplash.pngadaptive-icon.pngfavicon.png,或用 npx expo customize 生成。不添加也能在 Expo Go 中运行(仅缺少图标)。

🔌 API 一览

方法 路径 说明
GET /api/health 健康检查
POST /api/analyze 上传配料表图片 (multipart file),返回整体分析
GET /api/ingredient/{name} 获取单个配料的详细解读

请求/响应结构详见 backend/app/models/schemas.py 或启动后的 /docs

📖 POST /api/analyze 响应示例
{
  "product_name": "Cream Filled Biscuit",
  "health_score": 39,
  "score_level": "poor",
  "summary": "含多种添加剂,包括人工色素和甜味剂,整体健康度中等偏低,建议适量食用。",
  "ingredients": [
    {
      "name": "Tartrazine",
      "category": "色素",
      "safety_level": "avoid",
      "brief": "人工合成黄色色素,争议较大。",
      "potential_effects": "可能引发儿童多动症或过敏反应。"
    }
  ],
  "warnings": [
    {
      "ingredient_name": "Tartrazine",
      "level": "high",
      "effect": "可能引发过敏或儿童多动症。",
      "suggestion": "敏感人群应避免食用,尤其儿童。"
    }
  ],
  "request_id": "4deb8874c83d"
}

🐳 Docker 部署后端

cd backend
docker build -t ingredient-lens-api .
docker run -p 8000:8000 --env-file .env ingredient-lens-api

🗺️ 路线图

  • 拍照识别 + AI 分析 + 健康度评分
  • 风险配料高亮与影响说明
  • 单成分深度解读(懒加载)
  • AI + 规则双评分融合
  • 中英文配料关键词表
  • Redis 缓存层(同一配料详情不重复调 AI)
  • 扫描历史记录(本地存储)
  • 扫描统计与趋势图表
  • 配料数据库预置(GB 2760 常见添加剂)
  • 国际化(i18n,英文 UI)
  • Web 版(Next.js 复用后端 API)
  • 单元测试覆盖

有想做的功能?欢迎在 Discussions 讨论。

🤝 参与贡献

欢迎提交 Issue 和 PR!详见 📄 CONTRIBUTING.md

可贡献的方向:

  • 扩充 health_scorer.py 中的添加剂关键词表
  • 优化 prompt 以提升识别准确率
  • 增加配料数据库缓存层(Redis)
  • 国际化(英文配料表支持)
  • 新增产品历史记录、扫描统计等

🌟 贡献者

12siii
12siii
contributors

遵循 Contributor Covenant 行为准则。

⚖️ 免责声明

本项目分析结果由 AI 基于公开食品标准(GB 2760、JECFA、EFSA 等)生成,仅供学习参考,不构成医疗或营养建议。如有特定健康问题请咨询专业人士。

📄 License

MIT © Ingredient Lens Contributors


如果这个项目对你有帮助,欢迎 ⭐ Star 支持一下!

⭐ Star · 🐛 Report Bug · ✨ Request Feature · 💬 Discuss

About

📷 配料表镜头 — 拍摄食品配料表, AI 自动分析健康度、解读每个成分、标出风险配料。React Native + FastAPI + 通义千问 VL。

Topics

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages