SOLO生成的智能乒乓球训练系统
一. 摘要
利用 TRAE SOLO 辅助开发了一套基于 Python + MediaPipe 的乒乓球动作比对桌面应用,解决了传统训练中动作标准难量化、比对效率低、教练依赖度高等问题。最终实现了手势免接触控制、12秒固定帧数录像、AI姿态分析与帧同步比对、专业评分播报等完整功能,将教练员一对一指导的碎片化时间转化为可重复、可量化的自主训练流程。
二. 背景
我是一名项目经理,平时负责信息化项目的解决方案、系统交付工作。乒乓球爱好者朋友找我吐槽:练球时不知道自己动作哪里不对,拍视频回去又懒得逐帧对比,请教练又贵又难约。于是我发现SOLO,于是试着用它开发一个“AI动作比对系统”,能自动录下用户动作,并与专业模型视频同屏比对、给出评分。这个项目前后花了一个月,迭代了20多个版本。借助 TRAE SOLO 的代码生成、问题定位和重构能力,我才能在一个月内从零完成这样一套完整桌面应用。
三. 实践过程
1. 任务拆解
我把整个系统拆成 7 大模块,每个模块再细分子任务:
-
视频采集与存储:摄像头控制、固定帧数录制(360帧/12秒)、日期目录存储
-
手势识别:基于 MediaPipe 识别手指数量,不同模式响应不同手势
-
模式管理:待机、录像、播放、比对、AI+比对五个状态机
-
UI 与文字渲染:OpenCV 原生不支持中文,需要解决字体渲染和性能问题
-
视频同步与比对:计算用户与专业视频的姿态差异,实现帧同步、场景匹配
-
评分卡片:圆环进度条、渐变进度条、随机夸赞语、语音播报
-
登录与介绍视频:启动界面、模式选择
2. 用了 SOLO 哪些能力
-
代码生成:根据自然语言描述生成 MediaPipe 姿态关键点提取、帧同步算法等核心函数
-
代码解释:帮我理解 OpenCV 视频编码参数、MediaPipe 关键点索引(头、肩、肘、腕、腰)
-
错误修复:录像只有 258 字节、手势识别卡顿、中文方块字等坑,均由 SOLO 定位原因并给出修复方案
-
重构建议:将原先散落在 main.py 中的 UI 渲染抽取为
ui_module.py,加入字体缓存和批量渲染 -
文档生成:根据代码自动生成功能说明书(即用户提供的附件)
3. 关键 Prompt 与操作过程
典型 Prompt 示例:
“MediaPipe 中如何分别检测左手和右手的食指伸展?我需要识别 1指、2指、5指、10指四种手势。”
SOLO 给出了手指夹角和指尖坐标的判断逻辑,并封装成 gesture_recognition_module.py。
“我现在有一个专业视频和一个用户录像,想按动作快慢自动同步帧:用户动作快就暂停等待,用户动作慢就跳帧追赶。请给出算法思路。”
SOLO 建议基于“累积运动量比率”——计算相邻帧之间关键点位移之和,比较两个视频的滑动窗口运动量,动态调整当前播放帧。最终实现了 video_synchronizer.py 中的 sync_frame_by_motion 函数。
“cv2.putText 无法显示中文,改用 PIL 后每帧都加载字体文件特别慢,怎么优化?”
SOLO 给出字体缓存方案:全局只加载一次 ImageFont.truetype,将多个中文文字收集后批量渲染成一幅 PIL 图像,再转回 OpenCV BGR。这就是 put_chinese_texts() 的由来。
4. 踩过的坑及解决方案
| 坑 | 表象 | SOLO 帮助找到的根因 | 最终方案 |
|---|---|---|---|
| 录像文件损坏 | 录出来的 mp4 只有 258 字节 | OpenCV 写入帧时的分辨率与编码器预期不一致 | 固定设置 cv2.VideoWriter 的分辨率为 1280×720,且录制期间不允许改变窗口大小 |
| 手势识别 CPU 飙升 | 录像过程中依然在跑 MediaPipe,导致帧率掉到 10fps | 录像模式不需要识别手势 | 在 Recorder 类中加标志位,录像期间跳过 hand_landmarks 检测 |
| 评分卡片动画卡顿 | 圆环进度条逐帧重绘,界面掉帧 | 每帧都重新生成整个图像,未做增量更新 | 改为仅当评分值变化时才重绘,且使用 numpy 切片绘制圆弧,避免 PIL 转换 |
| 两段视频长度不同 | 专业视频 12 秒,用户录像因为采集延迟变成 11.8 秒 | 摄像头帧率不稳定 | 改为固定帧数录制:不管时间长短,只录 360 帧,回放时按 30fps 播放,保证严格 12 秒 |
| 场景匹配误判 | 用户随便挥拍和正手攻球也被拿来比对,相似度很低导致无意义评分 | 缺少前置场景匹配 | 增加前 15 帧姿态余弦相似度阈值(≥0.25 才进入比对),否则提示“与专业视频不同”并自动跳过 |
四. 成果展示
产出物: 一套完整的 Python 桌面应用,包含以下文件:
text
gesture_camera_app_new/
├── main.py # 主循环、模式切换
├── mode_manager.py # 五个模式的状态机 + AI比对评分逻辑
├── recording_module.py # 固定帧数录制(360帧)
├── gesture_recognition_module.py
├── ui_module.py # 中文批量渲染 + 字体缓存
├── video_synchronizer.py # 帧同步 + 场景匹配
├── login_module.py # 介绍视频 + 手势选择界面
├── praise_*.txt # 三个等级的随机夸赞语
├── MODEL/ # 存放专业模型视频(如 MODEL.mp4)
└── RECORD/ # 按日期存储用户录像
关键功能截图说明:
(由于社区不支持上传图片,用文字描述)
-
待机模式:摄像头画面右下角显示当前手势提示(“二指→录像”、“手掌→播放”、“双手→比对”)
-
AI+比对模式:左右分屏,左侧专业视频,右侧用户录像;用户头部、右肩、右肘、右腕、腰部五处关键点及连线实时显示;偏差超过阈值时点和线变为红色。
-
评分卡片:半透明浮层,中央圆形进度条从 0% 旋转至最终评分,底部渐变进度条带刻度(0–100),右上角随机夸赞语(如“神还原!马龙附体”),同时 TTS 语音播报“您的得分是 92 分,打得很好”。
代码仓库:
-
代码仓库(已脱敏): new5: SOLO生成的智能乒乓球训练系统
-
图片:
五. 效果与总结
提效了多少?
如果没有 TRAE SOLO,这个项目我估计需要 3 个月以上(尤其是帧同步算法、MediaPipe 手势识别优化、中文渲染性能这三大难点)。在实际开发中,SOLO 帮我完成了大约 60% 的代码编写(特别是模块间的胶水代码和配置参数),以及 80% 的 debug 定位。最终 1 个月实现 20 次迭代交付,提效约 3 倍。
SOLO 在我流程中做了什么?
-
替代了频繁查文档:MediaPipe、OpenCV 的函数参数不用再翻官方手册,直接问 SOLO
-
替代了手动写样板代码:文件保存、日期目录创建、异常捕获等重复逻辑由 SOLO 生成
-
替代了大段逻辑调试:帧同步算法写出后出现索引越界,SOLO 直接指出循环边界问题和帧缓冲区管理错误
-
提供了设计替代方案:当我纠结“用 SAPI 还是 pyttsx3”时,SOLO 对比了二者在 Windows 上的稳定性,最终选 SAPI
可复用的方法
-
面向 SOLO 的“伪代码先行”策略:不要直接让 SOLO 写完整模块,而是先写注释伪代码(例如
# 步骤1: 提取两段视频的前15帧姿态矩阵→# 步骤2: 计算余弦相似度矩阵),然后让 SOLO 逐段细化。这样生成的代码逻辑更清晰。 -
错误日志喂给 SOLO:遇到异常时,直接把完整的 traceback 和现象描述发给 SOLO,比自己去 Stack Overflow 搜快 10 倍。
-
小步迭代 + 保留可回滚点:每个功能(例如“加入评分卡片动画”)先让 SOLO 生成一个最小可行版本,测试通过后再要求扩展(“再加渐变进度条”)。每次改动都 commit,SOLO 即使写错也能快速回滚。
-
用 SOLO 生成单元测试:对于帧同步、评分计算这类数值敏感的模块,让 SOLO 自动生成几组模拟数据并断言期望结果,减少人工验证。
这次经历让我意识到:AI 不会取代开发者,但会用 AI 的开发者会取代不用 AI 的开发者。尤其对于个人开发者和独立创作者,SOLO 类工具极大降低了从想法到成品的技术门槛。未来我会继续把 SOLO 深度嵌入到开发流程中——让它承担“副驾驶”的角色,自己则专注于系统架构和用户体验。
