# detect **Repository Path**: brzhang/detect ## Basic Information - **Project Name**: detect - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-25 - **Last Updated**: 2026-03-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 智护康复助手 放疗后康复训练平台,包含 AI 姿态检测、个性化训练计划、医患沟通等功能。 三端架构:**Python 后端 (FastAPI)** + **微信小程序** + **Vue 3 管理后台** ## 项目结构 ``` backend/ # FastAPI 后端 ├── app.py # 入口,挂载路由 + WebSocket 检测 ├── models.py # SQLAlchemy 模型(9 张表) ├── database.py # SQLite 引擎(rehab.db) ├── auth_utils.py # JWT 鉴权 + SHA-256 密码哈希 ├── deps.py # FastAPI 依赖:get_current_user / get_admin_user ├── seed.py # 初始化数据库 + 种子数据 ├── routers/ # REST API 路由 │ ├── auth.py # 认证(微信登录、手机号登录) │ ├── user.py # 用户档案 │ ├── training.py # 训练计划 / 记录 / 统计 │ ├── video.py # 教学视频 │ ├── message.py # 医患消息 │ ├── content.py # 病症指南 / 轮播图 │ └── admin.py # 后台管理接口 └── detect/ # AI 姿态检测(MediaPipe) ├── server.py # WebSocket 路由分发 ├── main.py # 双手搭肩旋转检测(完整实现) └── *.py # 其余 11 个动作检测骨架 miniprogram/ # 微信小程序 ├── app.js # 全局配置(serverUrl / apiBaseUrl) ├── app.json # 页面与 tabBar 配置 └── pages/ # 12 个页面 admin/ # 管理后台(纯前端,无需构建) ├── index.html # Vue 3 + Element Plus(CDN 加载) ├── js/ │ ├── app.js # Vue Router + 路由守卫 │ ├── api.js # Fetch 封装(自动附加 token) │ └── views/ # 登录 / 用户 / 视频 / 医生 / 消息 / 内容 └── css/style.css ``` ## 快速开始 ### 1. 启动后端 ```bash cd backend pip install -r requirements.txt python seed.py # 首次运行,初始化数据库 + 默认账号 python app.py # 启动在 0.0.0.0:8000 ``` 启动后访问 http://localhost:8000/docs 查看 Swagger API 文档。 **默认账号:** | 角色 | 用户名 | 密码 | |------|--------|------| | 管理员 | admin | admin123 | | 医生 | doctor | doctor123 | ### 2. 配置微信密钥 在 `backend/.env` 中填入真实的微信小程序密钥: ``` WX_APPID=你的appid WX_SECRET=你的secret ``` ### 3. 启动小程序 用微信开发者工具导入 `miniprogram/` 目录,详见下方「真机测试」章节。 ### 4. 打开管理后台 浏览器直接打开 `admin/index.html`(需后端运行在 localhost:8000)。 --- ## 本地开发:真机测试小程序 ### 前置条件 - 后端已启动(`python app.py`) - 电脑和手机在 **同一局域网** - 已安装 [微信开发者工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html) ### 步骤 **1. 查看本机局域网 IP** ```bash # macOS ipconfig getifaddr en0 # Windows ipconfig | findstr IPv4 # Linux hostname -I ``` 假设得到 `192.168.1.7`。 **2. 修改小程序服务地址** 编辑 `miniprogram/app.js`,将 `globalData` 中的地址改为你的 IP: ```javascript globalData: { serverUrl: "ws://192.168.1.7:8000/detect/ws/detect", apiBaseUrl: "http://192.168.1.7:8000", // ... } ``` **3. 微信开发者工具配置** 1. 导入 `miniprogram/` 目录 2. 进入 **设置 → 项目设置**,勾选 **「不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书」** 3. 确保 AppID 与 `backend/.env` 中的 `WX_APPID` 一致 **4. 真机预览** 点击工具栏 **「预览」** 按钮,用手机微信扫码即可在真机上访问。 > 注意:开发者工具模拟器中 `getPhoneNumber` 返回的 code 无法换取真实手机号,后端会自动降级为 openid 登录(手机号留空,后续在个人中心补填)。**真机上可正常获取手机号。** **5. 常见问题** | 问题 | 原因 | 解决 | |------|------|------| | 请求超时 / 网络错误 | 手机和电脑不在同一网络 | 确保同一 WiFi,检查防火墙是否放行 8000 端口 | | 登录失败 | `WX_APPID` / `WX_SECRET` 未配置或错误 | 检查 `backend/.env` | | 模拟器登录后手机号为空 | 开发工具 code 无法换取手机号 | 正常现象,真机可正常获取 | | WebSocket 连接失败 | `serverUrl` IP 不正确 | 确认 `app.js` 中 IP 与电脑一致 | --- ## 本地开发:管理后台调试 ### 启动方式 管理后台是纯前端项目(Vue 3 + Element Plus 通过 CDN 加载),**无需 npm 安装或构建**。 **方式一:直接打开文件** ```bash open admin/index.html # macOS # 或在浏览器地址栏输入文件路径 ``` **方式二:用 HTTP 服务器(推荐,避免跨域问题)** ```bash # 任选一种 cd admin && python3 -m http.server 3000 # 或 npx serve admin -l 3000 ``` 然后访问 http://localhost:3000。 ### 配置后端地址 `admin/js/api.js` 第 2 行: ```javascript baseURL: 'http://localhost:8000' ``` 如果后端不在 localhost(例如在另一台机器),改为对应 IP: ```javascript baseURL: 'http://192.168.1.7:8000' ``` ### 登录与调试 1. 打开管理后台,输入默认账号 `admin` / `admin123` 2. 登录后可在侧边栏切换模块:用户管理、视频管理、医生工作台、消息管理、内容管理 3. 打开浏览器 DevTools (F12) 查看网络请求和控制台日志 4. 后端 API 文档可在 http://localhost:8000/docs 查看,方便对照调试 ### 后台功能概览 | 模块 | 路由 | 功能 | |------|------|------| | 用户管理 | `#/users` | 查看/编辑用户信息,绑定医生 | | 视频管理 | `#/videos` | 增删改查教学视频 | | 医生工作台 | `#/doctor` | 查看患者列表、训练数据监控 | | 消息管理 | `#/messages` | 医患消息查看与回复 | | 内容管理 | `#/content` | 病症指南、首页轮播图管理 | --- ## API 概览 | 模块 | 前缀 | 说明 | |------|------|------| | 认证 | `/api/auth/*` | 微信登录、手机号登录 | | 用户 | `/api/user/*` | 个人信息、绑定医生 | | 训练 | `/api/training/*` | 训练计划、记录、统计、打卡 | | 视频 | `/api/video/*` | 教学视频列表与详情 | | 消息 | `/api/message/*` | 医患消息收发 | | 内容 | `/api/content/*` | 病症指南、轮播图 | | 管理 | `/api/admin/*` | 后台管理(需管理员/医生权限) | | 检测 | `/detect/ws/detect/{type}` | WebSocket AI 姿态检测 | ### AI 检测支持的动作类型 | 分类 | training_type | 动作 | 状态 | |------|---------------|------|------| | 颞颌关节 | `jaw_slow_puff` | 吸气鼓腮(慢) | 骨架 | | | `jaw_fast_puff` | 吸气鼓腮(快) | 骨架 | | | `jaw_open` | 张口训练 | 骨架 | | | `jaw_tongue` | 舌部运动 | 骨架 | | 颈部 | `neck_rotate` | 颈部旋转 | 骨架 | | | `neck_flex` | 颈部前屈后伸 | 骨架 | | | `neck_side` | 侧颈拉伸 | 骨架 | | 肩部 | `shoulder_shrug` | 缩脖放松 | 骨架 | | | `shoulder_rotate` | 双手搭肩旋转 | 已实现 | | | `shoulder_abduct` | 外展 | 骨架 | | | `shoulder_raise` | 上举 | 骨架 | | | `shoulder_swing` | 摆动 | 骨架 | --- ## 注意事项 - SQLite 数据库路径为相对路径,**后端命令务必在 `backend/` 目录下执行** - 小程序 `