# reaction **Repository Path**: franzkafka/reaction ## Basic Information - **Project Name**: reaction - **Description**: AI 算法参赛 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-20 - **Last Updated**: 2025-11-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI 健身教练 一个使用 Streamlit 构建的多页面健身应用,包含首页、教程、瑜伽姿态跟踪、训练计数与营养计算器,以及一个 OpenAI 聊天机器人页面。 本说明以 Linux + fish shell 为例,其他平台类似。 ## 目录结构 # AI 健身教练(Streamlit 多页应用) - `models/1_🏠_首页.py` 首页(入口) - `models/pages/2_📘_教程.py` 教程 - `models/pages/3_🧘_瑜伽.py` 瑜伽姿态跟踪(摄像头) - `models/pages/4_🏃_训练.py` 训练(摄像头 + 计数) 1) 安装 uv(若已安装可跳过) # 确保 uv 在 PATH 中(安装脚本通常提示 ~/.local/bin) set -Ux PATH $HOME/.local/bin $PATH ``` 2) 使用 uv 创建虚拟环境并安装依赖 ```fish # 在项目根目录 reaction 下 uv venv .venv uv pip install -r requirements.txt ``` 提示:使用 uv 时可以不激活虚拟环境,直接用 `uv run` 运行命令即可。 (可选)如果你更习惯传统方式,可参考文末“备用方案:pip + venv”。 2) 配置 OpenAI 密钥(仅聊天机器人页面需要) - 方式 A:环境变量 ```fish set -Ux OPENAI_API_KEY "你的密钥" ``` - 方式 B:Streamlit secrets(可选) 在项目根目录创建 `.streamlit/secrets.toml` 文件: ```fish mkdir -p .streamlit printf "OPENAI_API_KEY = \"你的密钥\"\n" > .streamlit/secrets.toml ``` 3) 摄像头权限 - 瑜伽与训练页面使用 OpenCV/Mediapipe,请确保系统有可用摄像头且应用有权限访问。 ```fish # 使用 uv 直接运行(无需手动激活虚拟环境) uv run streamlit run models/1_🏠_首页.py --server.headless true # 若提示找不到 streamlit(极少数情况),也可以: uv run python -m streamlit run models/1_🏠_首页.py --server.headless true ``` 打开浏览器访问终端输出的本地地址即可看到首页,左侧侧边栏可切换到其他页面。 提示:如果你的终端/系统对带有 emoji 的文件名支持不好,也可以复制首页为不含 emoji 的文件名后启动,例如: ``` 本项目已对 `models/styles/styles.css` 进行了现代化改造: - 主题变量与自动暗/亮模式(使用 `prefers-color-scheme`) - 输入框/文本域的悬浮与聚焦高亮、柔和阴影与边框、可访问性优化 - 按钮采用渐变主题、轻微悬浮/按压动效与阴影 - 微交互:表单分组在 `:focus-within` 时轻微上移,强调当前区域 你可以在 `:root` 中快速调色(示例变量): ```css :root { --primary: #6ee7ff; --primary-600: #22d3ee; --primary-700: #06b6d4; --bg: #0b0d10; --surface: #111418; --text: #e6eaf0; } ``` 提示:保存文件后,正在运行的 Streamlit 会自动热重载;刷新浏览器即可看到效果。 ## 已做修复与改动 - 移除 Windows 绝对路径,统一改为相对路径: - `models/1_🏠_首页.py` 使用 `Path(__file__).parent` 加载 `styles.css` 与 `images/首页.jpg`。 - `models/pages/3_🧘_瑜伽.py` 使用相对路径加载 GIF/图片/铃声,`playsound` 不存在或失败时不会中断。 - 移除硬编码的 OpenAI API Key,改为从环境变量或 Streamlit `secrets` 读取,未配置时禁用输入并给出警告。 - 新增 `requirements.txt` 覆盖运行所需依赖。 - 样式升级:`models/styles/styles.css` 引入主题变量、自动暗/亮模式、现代化输入与按钮、微动效与更好的可访问性。 ## 已知问题与改进建议 - OpenAI SDK 版本:当前代码使用 `openai.ChatCompletion.create`(0.28.x 老版接口)。若升级到 1.x,需要改用 `from openai import OpenAI` 并更新调用方式。 - 文件名中的 emoji:在部分系统/终端会导致路径问题。若遇到启动错误,可按上面提示复制为不含 emoji 的文件名启动。 - 资源路径:个别页面仍使用相对路径(如 `./gif/...`、`./images/...`)。如果从非 `models` 目录运行,可能找不到文件。建议统一通过 `Path(__file__)` 解析资源。 - playsound 在 Linux:不同发行版可能需要额外音频后端。我们已做降级处理(没有声音也不报错)。 - 提示:默认未安装 `playsound` 以避免 Py3.12 下的构建问题;若你需要铃声音效,可尝试: ```fish uv pip install playsound==1.3.0 ``` 若安装失败,建议跳过(功能不受影响,仅无铃声)。 - 摄像头与权限:在某些 Wayland 或容器环境下,OpenCV 访问摄像头需额外配置。 - Nutrition 页面编码:`food1.csv` 若非 UTF-8,可能在某些系统编码下报错。需要时请明确 `encoding` 或转换文件编码。 - CSS 可选:如未提供 `models/styles/styles.css`,页面会使用默认样式。 - 如果你想自定义主题,只需修改 `styles.css` 中的变量;若暂时不想使用自定义样式,可在首页去掉样式注入的相关代码。 ## 故障排查 - ImportError: 没有某些包 - 重新执行 `pip install -r requirements.txt`。 - 摄像头黑屏/打不开 - 检查设备权限;尝试 `cv2.VideoCapture(0)` 是否可用;关闭占用摄像头的其他应用。 - Chatbot 页面提示未检测到密钥 - 设置 `OPENAI_API_KEY` 环境变量或在 `.streamlit/secrets.toml` 中配置。 ## 备用方案:pip + venv 如果不使用 uv,也可以用传统方式: ```fish # 在项目根目录 reaction 下 python3 -m venv .venv source .venv/bin/activate.fish pip install -U pip pip install -r requirements.txt # 启动(任选其一) streamlit run models/1_🏠_首页.py --server.headless true python -m streamlit run models/1_🏠_首页.py --server.headless true .venv/bin/streamlit run models/1_🏠_首页.py --server.headless true ``` ## 许可证 无