SOLO生成的智能乒乓球训练系统

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 分,打得很好”。

代码仓库:

五. 效果与总结

提效了多少?

如果没有 TRAE SOLO,这个项目我估计需要 3 个月以上(尤其是帧同步算法、MediaPipe 手势识别优化、中文渲染性能这三大难点)。在实际开发中,SOLO 帮我完成了大约 60% 的代码编写(特别是模块间的胶水代码和配置参数),以及 80% 的 debug 定位。最终 1 个月实现 20 次迭代交付,提效约 3 倍

SOLO 在我流程中做了什么?

  • 替代了频繁查文档:MediaPipe、OpenCV 的函数参数不用再翻官方手册,直接问 SOLO

  • 替代了手动写样板代码:文件保存、日期目录创建、异常捕获等重复逻辑由 SOLO 生成

  • 替代了大段逻辑调试:帧同步算法写出后出现索引越界,SOLO 直接指出循环边界问题和帧缓冲区管理错误

  • 提供了设计替代方案:当我纠结“用 SAPI 还是 pyttsx3”时,SOLO 对比了二者在 Windows 上的稳定性,最终选 SAPI

可复用的方法

  1. 面向 SOLO 的“伪代码先行”策略:不要直接让 SOLO 写完整模块,而是先写注释伪代码(例如 # 步骤1: 提取两段视频的前15帧姿态矩阵# 步骤2: 计算余弦相似度矩阵),然后让 SOLO 逐段细化。这样生成的代码逻辑更清晰。

  2. 错误日志喂给 SOLO:遇到异常时,直接把完整的 traceback 和现象描述发给 SOLO,比自己去 Stack Overflow 搜快 10 倍。

  3. 小步迭代 + 保留可回滚点:每个功能(例如“加入评分卡片动画”)先让 SOLO 生成一个最小可行版本,测试通过后再要求扩展(“再加渐变进度条”)。每次改动都 commit,SOLO 即使写错也能快速回滚。

  4. 用 SOLO 生成单元测试:对于帧同步、评分计算这类数值敏感的模块,让 SOLO 自动生成几组模拟数据并断言期望结果,减少人工验证。

这次经历让我意识到:AI 不会取代开发者,但会用 AI 的开发者会取代不用 AI 的开发者。尤其对于个人开发者和独立创作者,SOLO 类工具极大降低了从想法到成品的技术门槛。未来我会继续把 SOLO 深度嵌入到开发流程中——让它承担“副驾驶”的角色,自己则专注于系统架构和用户体验。