# 🍽️ 个性化饮食推荐APP

一个基于机器学习和OCR技术的智能饮食推荐系统，具有现代化的移动端界面和强大的AI分析能力。

## ✨ 最新特性

### 📷 OCR热量识别
- **多引擎OCR支持**：Tesseract、PaddleOCR、EasyOCR
- **智能图片识别**：自动识别食物名称和热量信息
- **多级验证机制**：OCR结果 + 数据库匹配 + 用户确认
- **学习优化系统**：从用户修正中持续学习改进
- **一键记录**：拍照即可完成餐食记录

### 🎨 现代化界面设计
- **圆角设计系统**：统一的圆角主题，减少方形元素
- **多色主题支持**：主色、次色、强调色等多种配色
- **移动端适配**：专为手机屏幕优化的界面布局
- **卡片式设计**：清晰的信息层次和视觉反馈
- **响应式交互**：悬停效果和状态变化

## 🎯 核心功能

### 1. 智能数据采集
- **OCR图片识别**：📷 拍照识别食物热量信息
- **5天三餐数据记录**：详细记录早中晚三餐的饮食内容
- **用户偏好问卷**：口味偏好、饮食习惯、过敏信息等
- **生理周期跟踪**：针对女性的生理期、排卵期等特殊时期
- **个性化因素**：星座、性格特征等参考因素

### 2. 机器学习推荐引擎
- **个人饮食模型训练**：基于用户历史数据训练个性化模型
- **持续学习机制**：根据用户反馈不断优化推荐
- **偏好矫正**：用户不喜欢或已食用食物的反馈学习
- **多因素融合**：结合生理周期、星座等多维度因素

### 3. AI大模型分析
- **千问大模型集成**：智能营养分析和建议生成
- **热量分析**：每日饮食热量计算和评估
- **营养建议**：基于大模型的智能营养建议
- **个性化指导**：结合用户特征的定制化建议

### 4. 现代化应用界面
- **移动端设计**：模拟小程序/安卓App的界面体验
- **圆角美化**：统一的圆角设计语言
- **多色主题**：丰富的颜色搭配和视觉层次
- **实时推荐**：动态推荐系统
- **数据可视化**：饮食趋势、营养分析图表

## 🏗️ 技术架构

### 核心基座
- **统一基座架构**：模块化设计，支持功能扩展
- **SQLite数据库**：轻量级本地数据存储
- **事件总线系统**：模块间通信和事件处理
- **数据管理器**：统一的数据访问接口

### OCR识别技术
- **Tesseract OCR**：开源OCR引擎，支持中英文（**默认，轻量级，推荐**）
- **PaddleOCR**：百度开源OCR，中文识别优秀（可选，需要PaddlePaddle，占用内存较大）
- **EasyOCR**：简单易用的多语言OCR库（可选，需要PyTorch，占用内存很大）
- **OpenCV**：图像预处理和增强
- **PIL/Pillow**：图像处理和格式转换

**注意**：默认配置仅使用Tesseract OCR（轻量级，无需深度学习框架）。如需使用PaddleOCR或EasyOCR：
1. 取消注释`requirements.txt`中对应依赖
2. 安装依赖：`pip install paddleocr` 或 `pip install easyocr`
3. 在OCR模块配置中添加对应引擎到`ocr_methods`列表

### 机器学习
- **scikit-learn**：推荐算法实现
- **pandas/numpy**：数据处理和分析
- **joblib**：模型序列化和加载
- **TF-IDF向量化**：文本特征提取

### AI大模型集成
- **千问大模型**：阿里云通义千问API
- **智能分析**：用户意图分析和营养建议
- **个性化推理**：基于用户特征的智能推荐

### 现代化界面
- **CustomTkinter**：现代化Python GUI框架
- **移动端设计**：375x812像素，模拟手机界面
- **圆角美化系统**：统一的视觉设计语言
- **多色主题**：丰富的颜色配置系统

## 📁 项目结构

```
diet_recommendation_app/
├── core/                    # 核心基座架构
│   ├── base.py             # 基础类和配置
│   └── base_engine.py      # 基础引擎抽象类
├── modules/                # 功能模块
│   ├── data_collection.py  # 数据采集模块
│   ├── ai_analysis.py      # AI分析模块
│   ├── recommendation_engine.py # 推荐引擎模块
│   └── ocr_calorie_recognition.py # OCR热量识别模块
├── gui/                    # 现代化界面
│   ├── mobile_main_window.py # 移动端主界面
│   ├── ocr_calorie_gui.py  # OCR识别界面
│   ├── styles.py           # 样式配置系统
│   └── main_window.py      # 桌面端界面
├── llm_integration/        # 大模型集成
│   └── qwen_client.py      # 千问大模型客户端
├── smart_food/             # 智能食物数据库
│   └── smart_database.py   # 食物数据库管理
├── data/                   # 数据存储
│   ├── users/              # 用户数据
│   ├── training/           # 训练数据
│   └── app.db              # SQLite数据库
├── models/                 # 机器学习模型
├── logs/                   # 日志文件
├── main.py                 # 应用入口
├── requirements.txt        # 依赖包列表
├── OCR_USAGE_GUIDE.md      # OCR使用指南
├── UI_BEAUTIFICATION_SUMMARY.md # 界面美化总结
└── README.md               # 项目说明文档
```

## 🚀 快速开始

### 1. 环境要求
- Python 3.8+
- Windows/macOS/Linux

### 2. 安装依赖
```bash
# 克隆项目
git clone https://github.com/random-jason/diet_recommendation.git
cd diet_recommendation

# 安装基础依赖
pip install -r requirements.txt

# 安装OCR依赖（可选）
pip install pytesseract opencv-python paddleocr easyocr
```

### 3. 配置API密钥
```bash
# 方法1: 使用自动生成的模板
python -c "from config.api_keys import create_env_template; create_env_template()"

# 方法2: 手动创建.env文件
echo "QWEN_API_KEY=your_qwen_api_key_here" > .env
```

### 4. 验证配置
```bash
# 检查API密钥配置状态
python -c "from config.api_keys import get_api_status_report; print(get_api_status_report())"
```

### 5. OCR引擎配置（可选）

#### Tesseract安装
- **Windows**: 下载 [Tesseract安装包](https://github.com/UB-Mannheim/tesseract/wiki)
- **macOS**: `brew install tesseract`
- **Linux**: `sudo apt-get install tesseract-ocr`

#### 其他OCR引擎（可选，需要深度学习框架）
```bash
# PaddleOCR（可选，需要PaddlePaddle，占用内存较大）
pip install paddleocr

# EasyOCR（可选，需要PyTorch，占用内存很大，通常需要1-2GB）
pip install easyocr

# 注意：安装后需要在OCR模块配置中添加对应引擎：
# self.ocr_methods = ['tesseract', 'paddleocr']  # 添加需要的引擎
```

### 4. 配置环境
```bash
# 创建环境配置文件
echo "QWEN_API_KEY=your_qwen_api_key_here" > .env
```

### 5. 运行应用
```bash
python main.py
```

### 6. 使用OCR功能
1. 打开应用，进入"记录"页面
2. 点击食物输入框右侧的"📷"按钮
3. 选择包含食物信息的图片
4. 点击"开始识别"进行OCR识别
5. 查看和编辑识别结果
6. 确认保存到餐食记录

## 🔐 API密钥管理

### 统一密钥管理
项目采用统一的API密钥管理系统，所有API密钥都通过 `config/api_keys.py` 进行管理：

- **千问API密钥** (必需): 用于主要AI分析服务
- **OpenAI API密钥** (可选): 备用AI服务
- **Anthropic API密钥** (可选): 备用AI服务
- **其他API密钥** (可选): Google、百度、腾讯等

### 配置方法
```python
from config.api_keys import get_qwen_key, get_api_status_report

# 获取API密钥
qwen_key = get_qwen_key()

# 检查配置状态
status = get_api_status_report()
print(f"可用提供商: {status['available_list']}")
```

### 安全特性
- ✅ 环境变量隔离
- ✅ 密钥格式验证
- ✅ 运行时状态监控
- ✅ 多提供商支持
- ✅ 自动配置建议

详细配置指南请参考：[API_KEY_SETUP_GUIDE.md](API_KEY_SETUP_GUIDE.md)

## 🔄 工作流程

### 1. 智能数据采集（5天）
- **OCR图片识别**：📷 拍照识别食物热量信息
- **手动数据记录**：详细记录三餐饮食内容
- **用户偏好问卷**：口味偏好、饮食习惯、过敏信息
- **个性化画像**：生理周期、星座、性格特征

### 2. AI模型训练
- **个人推荐模型**：基于采集数据训练个性化模型
- **多因素融合**：结合生理期、星座等多维度因素
- **OCR学习优化**：从用户修正中持续改进识别准确性

### 3. 智能推荐与学习
- **个性化推荐**：第6天开始提供智能推荐
- **用户反馈收集**：喜欢/不喜欢/已食用反馈
- **持续模型优化**：基于反馈数据不断改进
- **OCR准确性提升**：学习用户修正习惯

### 4. AI智能分析
- **千问大模型分析**：每日营养状况智能分析
- **个性化健康建议**：基于用户特征的定制建议
- **营养趋势分析**：长期饮食模式分析

## 🎨 特色功能

### 📷 OCR智能识别
- **多引擎支持**：Tesseract、PaddleOCR、EasyOCR
- **智能验证**：OCR + 数据库 + 用户确认三级验证
- **学习优化**：从用户修正中持续改进
- **一键记录**：拍照即可完成餐食记录

### 🎨 现代化界面
- **移动端设计**：375x812像素，模拟手机界面
- **圆角美化**：统一的圆角设计语言
- **多色主题**：丰富的颜色搭配和视觉层次
- **响应式交互**：悬停效果和状态变化

### 🤖 AI智能分析
- **千问大模型**：阿里云通义千问API集成
- **智能推理**：用户意图分析和营养建议
- **个性化指导**：基于用户特征的定制建议

### 👩 女性专属优化
- **生理周期智能调整**：月经期、排卵期等特殊时期
- **营养需求分析**：不同生理阶段的营养需求
- **个性化建议**：结合生理周期的饮食建议

### ⭐ 个性化因素
- **星座参考**：个性化因素融合
- **性格特征**：基于性格的饮食偏好分析
- **持续学习**：避免随机推荐问题

## 📚 文档说明

- **[OCR使用指南](OCR_USAGE_GUIDE.md)**：详细的OCR功能使用说明
- **[界面美化总结](UI_BEAUTIFICATION_SUMMARY.md)**：界面设计和技术实现
- **[项目总结](PROJECT_SUMMARY.md)**：项目整体架构和功能说明

## 🧪 测试验证

### 功能测试
```bash
# 测试OCR系统
python test_ocr_system.py

# 测试界面美化
python test_ui_beautification.py

# 测试核心功能
python test_core.py
```

### 应用启动测试
```bash
# 启动应用
python main.py

# 检查日志
tail -f logs/app.log
```

## 🚀 技术亮点

### 1. 统一基座架构
- **模块化设计**：所有功能模块基于统一基座构建
- **事件驱动**：模块间通过事件总线通信
- **数据统一**：统一的数据管理和访问接口
- **扩展性强**：支持新功能模块的快速集成

### 2. OCR多引擎融合
- **多引擎并行**：同时使用多个OCR引擎提高准确性
- **智能合并**：基于置信度的结果合并策略
- **学习优化**：从用户修正中持续学习改进
- **数据库匹配**：结合食物数据库进行智能验证

### 3. 现代化界面设计
- **移动端优先**：专为手机屏幕优化的界面设计
- **圆角美化**：统一的圆角设计语言
- **多色主题**：丰富的颜色配置和视觉层次
- **响应式交互**：流畅的用户交互体验

### 4. AI智能分析
- **千问大模型**：集成阿里云通义千问API
- **智能推理**：基于用户数据的智能分析
- **个性化建议**：结合多维度因素的定制建议
- **持续学习**：从用户反馈中不断优化

## 📈 项目状态

- ✅ **核心功能**：数据采集、推荐引擎、AI分析
- ✅ **OCR识别**：多引擎支持、智能验证、学习优化
- ✅ **界面美化**：圆角设计、多色主题、移动端适配
- ✅ **文档完善**：使用指南、技术文档、测试脚本
- 🔄 **持续优化**：性能提升、功能扩展、用户体验改进

## 🤝 贡献指南

欢迎提交Issue和Pull Request来改进项目！

### 开发环境设置
```bash
# 克隆项目
git clone <repository-url>
cd diet_recommendation_app

# 安装开发依赖
pip install -r requirements.txt

# 运行测试
python test_ocr_system.py
python test_ui_beautification.py
```

### 代码规范
- 遵循PEP 8代码风格
- 添加适当的注释和文档字符串
- 编写单元测试
- 更新相关文档

## 📄 许可证

本项目采用MIT许可证 - 查看 [LICENSE](LICENSE) 文件了解详情

## 🙏 致谢

感谢以下开源项目的支持：
- [CustomTkinter](https://github.com/TomSchimansky/CustomTkinter) - 现代化Python GUI框架
- [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) - 开源OCR引擎
- [PaddleOCR](https://github.com/PaddlePaddle/PaddleOCR) - 百度开源OCR
- [EasyOCR](https://github.com/JaidedAI/EasyOCR) - 简单易用的OCR库
- [scikit-learn](https://scikit-learn.org/) - 机器学习库

---

**🍽️ 让AI为您的饮食健康保驾护航！**