- 添加 3 个新 API 端点 - 更新 app.py 行数统计 (5500+ → 9700+) - 添加健康模块智能分析功能说明 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
8.4 KiB
8.4 KiB
Vitals 代码结构地图
项目概览
Vitals 是一个本地优先的综合健康管理应用,支持运动、饮食、睡眠、体重、阅读等多维度健康数据记录与分析。
vitals/
├── src/vitals/ # 主要源代码
│ ├── cli.py # 命令行入口
│ ├── core/ # 核心业务逻辑
│ ├── vision/ # AI视觉识别模块
│ ├── web/ # Web应用 (FastAPI)
│ └── importers/ # 数据导入器
├── tests/ # 测试文件
├── scripts/ # 脚本工具
└── docs/ # 文档
核心模块详解
1. CLI 入口 (cli.py)
命令行界面,基于 Typer 构建。
| 命令 | 功能 |
|---|---|
vitals dashboard |
启动 Web 仪表盘 |
vitals log |
记录健康数据 |
vitals show |
查看健康数据 |
vitals config |
用户配置 |
vitals import |
导入外部数据 |
vitals report |
生成报告 |
vitals export |
数据导出 |
vitals backup |
数据备份 |
2. 核心业务 (core/)
models.py - 数据模型
@dataclass
class Exercise # 运动记录
class Meal # 饮食记录
class Sleep # 睡眠记录
class Weight # 体重记录
class Reading # 阅读记录
class User # 用户
class UserConfig # 用户配置
class Invite # 邀请码
database.py - 数据库操作
- MySQL 连接池管理
- CRUD 操作封装
- 用户隔离支持
主要函数:
init_db() # 初始化数据库表
get_connection() # 获取数据库连接
add_meal() / get_meals() # 饮食记录
add_exercise() / get_exercises() # 运动记录
add_sleep() / get_sleeps() # 睡眠记录
add_weight() / get_weights() # 体重记录
get_api_key() / set_api_key() # API Key 管理
calories.py - 卡路里计算
- 内置 94 种常见中文食物数据库
- 智能食物描述解析(支持中文数字、多种分隔符)
- 运动卡路里估算(基于 MET 代谢当量)
estimate_meal_calories(description) # 估算餐食卡路里
estimate_exercise_calories(type, mins) # 估算运动消耗
parse_food_description(text) # 解析食物描述
auth.py - 认证模块
- JWT Token 认证
- 密码哈希 (bcrypt)
- 邀请码机制
report.py - 报告生成
- 周报/月报生成
- PDF 导出 (WeasyPrint)
- 数据可视化
export.py - 数据导出
- JSON / CSV 格式导出
- 数据备份与恢复
backup.py - 备份模块
- 自动备份
- 增量备份支持
3. AI 视觉识别 (vision/)
analyzer.py - 分析器基类
class FoodAnalyzer:
def analyze(image_path) -> dict # 分析食物图片
class ClaudeFoodAnalyzer: # Claude Vision 实现
providers/qwen.py - 通义千问 VL
class QwenVisionAnalyzer:
def analyze_image(image_path) # 图片识别
def analyze_text(description) # 文字识别 ← 新增功能
providers/deepseek.py - DeepSeek Vision
class DeepSeekVisionAnalyzer:
def analyze_image(image_path)
def analyze_text(description)
4. Web 应用 (web/)
app.py - FastAPI 应用 (9700+ 行)
页面路由:
| 路由 | 页面 |
|---|---|
/ |
首页仪表盘 |
/exercise |
运动记录 |
/meal |
饮食记录 |
/sleep |
睡眠记录 |
/weight |
体重记录 |
/reading |
阅读记录 |
/report |
健康报告 |
/settings |
设置页面 |
/login |
登录页面 |
API 端点:
| 方法 | 路由 | 功能 |
|---|---|---|
| POST | /api/meal |
添加饮食记录 |
| GET | /api/meals |
查询饮食记录 |
| POST | /api/meal/recognize |
AI 食物识别 (图片/文字) |
| GET | /api/meals/nutrition |
营养统计 |
| POST | /api/exercise |
添加运动记录 |
| GET | /api/exercises |
查询运动记录 |
| POST | /api/steps |
同步步数(iOS 快捷指令调用) |
| GET | /api/steps |
查询步数记录 |
| GET | /api/steps/today |
获取今日步数 |
| POST | /api/sleep |
添加睡眠记录 |
| POST | /api/weight |
添加体重记录 |
| GET | /api/config |
获取用户配置 |
| POST | /api/config |
更新用户配置 |
| POST | /api/login |
用户登录 |
| POST | /api/register |
用户注册 |
| GET | /api/bmi/analysis |
BMI 分析(体重/目标/达成预估) |
| GET | /api/nutrition/recommendations |
营养建议(TDEE目标/缺口/配餐) |
| GET | /api/sleep/assessment |
睡眠评估(状态/健康影响/建议) |
前端架构:
- 纯原生 HTML/CSS/JavaScript
- Chart.js 图表库
- 响应式设计(PC/移动端适配)
5. 数据导入器 (importers/)
| 模块 | 功能 |
|---|---|
base.py |
导入器基类 |
csv_importer.py |
CSV 通用导入 |
garmin.py |
Garmin 数据导入 |
codoon.py |
咕咚数据导入 |
6. 测试 (tests/)
| 文件 | 测试内容 |
|---|---|
test_calories.py |
卡路里计算测试 |
test_database.py |
数据库操作测试 |
test_models.py |
数据模型测试 |
test_web.py |
Web API 测试 |
test_report.py |
报告生成测试 |
test_export.py |
导出功能测试 |
test_backup.py |
备份功能测试 |
test_deepseek.py |
DeepSeek API 测试 |
数据库设计
主要表结构
-- 用户表
user (id, username, password_hash, email, created_at)
-- 运动记录
exercise (id, user_id, date, exercise_type, duration, calories, distance, notes)
-- 饮食记录
meal (id, user_id, date, meal_type, description, calories, protein, carbs, fat, photo_path, food_items)
-- 睡眠记录
sleep (id, user_id, date, bedtime, wake_time, duration, quality, notes)
-- 体重记录
weight (id, user_id, date, weight, body_fat, notes)
-- 阅读记录
reading (id, user_id, date, book_title, pages, duration, notes)
-- 步数记录
steps (id, user_id, date, steps, distance, calories, source, synced_at)
-- 用户配置
user_config (id, user_id, height, weight, age, gender, activity_level, goal)
-- API Keys
api_keys (id, user_id, provider, api_key, created_at)
-- 邀请码
invite (id, code, created_by, used_by, used_at, expires_at)
技术栈
| 层级 | 技术 |
|---|---|
| 后端框架 | FastAPI + Uvicorn |
| 数据库 | MySQL 8 |
| CLI | Typer + Rich |
| AI 识别 | Qwen VL / DeepSeek / Claude |
| PDF 生成 | WeasyPrint |
| 前端 | 原生 HTML/CSS/JS + Chart.js |
| 认证 | JWT + bcrypt |
关键文件行数统计
| 文件 | 行数 | 说明 |
|---|---|---|
web/app.py |
9700+ | Web 应用主体 |
core/database.py |
800+ | 数据库操作 |
core/calories.py |
333 | 卡路里计算 |
core/models.py |
327 | 数据模型 |
vision/providers/qwen.py |
185 | 通义千问识别 |
vision/providers/deepseek.py |
176 | DeepSeek 识别 |
core/report.py |
300+ | 报告生成 |
最近更新
-
健康模块智能分析 (2026-01-27):运动、饮食、睡眠三大模块新增智能分析功能
- BMI 健康分析 (
/exercise页面)- API:
/api/bmi/analysis返回 BMI 状态、目标体重、达成预估 - 前端:BMI 刻度条(偏瘦/正常/偏重/肥胖)+ 目标达成预估卡片
- 计算:基于 TDEE - 摄入 + 运动 的每日净消耗
- API:
- 营养建议系统 (
/meal页面)- API:
/api/nutrition/recommendations返回 TDEE 目标、缺口分析、配餐建议 - 前端:营养进度条(热量/蛋白质/碳水/脂肪)+ 配餐建议卡片
- 图表:7 天趋势图增加建议摄入参考线
- API:
- 睡眠健康评估 (
/sleep页面)- API:
/api/sleep/assessment返回睡眠状态、健康影响、建议 - 前端:睡眠刻度条 + 警告/益处卡片(4 类健康影响)
- 图表:趋势图动态着色(理想区间绿色标记)
- API:
- BMI 健康分析 (
-
Apple Health 步数同步:支持通过 iOS 快捷指令同步 Apple Health 步数数据
- 数据库:新增
steps表存储每日步数 - API:
/api/steps(POST 同步, GET 查询),/api/steps/today(今日步数) - 前端:运动页面显示今日步数卡片,设置页面提供 iOS 快捷指令配置说明
- 数据库:新增
-
文字 AI 识别功能:在饮食页面添加"文字AI识别"按钮,支持输入文字描述后自动识别卡路里
- 前端:
web/app.py - 后端:
/api/meal/recognize支持text参数
- 前端: