从零到二开:Good-Badminton AI 羽毛球鹰眼系统代码架构导读与自定义数据集接入完整指南

发布时间:2026/10/22 1:25:17
从零到二开:Good-Badminton AI 羽毛球鹰眼系统代码架构导读与自定义数据集接入完整指南 【免费下载链接】Good-Badminton AI Badminton Hawk-Eye System项目地址https://gitcode.com/gh_mirrors/go/Good-Badminton点击查看免费下载Good-Badminton 是一款基于计算机视觉的AI 羽毛球鹰眼Hawk-Eye视频分析系统只需上传一段固定机位的比赛视频它就能自动识别球员姿态、追踪羽毛球轨迹、映射标准球场坐标并输出带骨架、轨迹、速度统计与回合编号的标注视频以及热力图 / 散点图和结构化检测数据。本文面向想读懂代码、二次开发、接入自己数据集的新手带你从零走通「架构 → 关键源码 → 自定义数据集」的完整路径。一、项目速览它能做什么Good-Badminton 的核心能力可以概括为「输入一段视频输出完整分析结果」球员姿态检测支持 RTMPose / RTMO / YOLO Pose 三种人体关键点模型。羽毛球检测使用 YOLO 模型定位羽毛球并在视频中绘制飞行轨迹。球场坐标映射把图像像素坐标映射到 6.1m × 13.4m 的标准球场坐标系。自动球场检测基于球场线模型自动匹配四角支持手动修正。运动统计移动距离、当前 / 最大速度、回合数量。可视化输出标注视频、球员位置热力图与散点图、detections.jsonl逐帧数据。 无论是做教学、科研还是打造自己的「智能羽毛球分析工具」读懂它的数据流是二开的第一步。二、整体代码架构一图看懂数据流Good-Badminton 采用「入口层 → 主流程编排 → 功能模块」的三层结构。你几乎只需要盯住一个核心类 BadmintonAnalysisSystem 就能看懂整个流程。main.py / webui/app.py ← 入口层解析参数、提供界面 │ ▼ badminton_analysis/system.py ← 主编排逐帧调度各模块 │ ├── court/ 球场标注与图像→球场坐标映射 ├── detection/ 羽毛球检测 姿态检测 ├── tracking/ 球员追踪与运动统计 ├── visualization/ 视频叠加层、热力图/散点图 ├── data/ JSON / JSONL 数据输出 └── media/ 视频音频处理模块目录职责关键文件badminton_analysis/court/球场四角标注、自动检测、坐标映射mapper.py、detector.pybadminton_analysis/detection/羽毛球 YOLO 检测、姿态模型shuttlecock.py、rtmpose.pybadminton_analysis/tracking/上下半场球员追踪、速度距离统计player.pybadminton_analysis/visualization/骨架/轨迹绘制、位置图表player_pose.py、player_positions_zh.pybadminton_analysis/data/metadata.json与detections.jsonl写入writer.pybadminton_analysis/media/H.264 转码、音频合并video_audio.pywebui/基于 Gradio 的浏览器界面app.py、pipeline.py入口层CLI 与 WebUI 双通道命令行入口main.py用argparse解析全部参数构建BadmintonAnalysisSystem后调用process_video()。WebUI 入口webui/app.py基于 Gradio上传视频与模板图、点击「检测球场」并「运行分析」。其流程编排集中在 webui/pipeline.py 的run_analysis()最终复用的是同一个BadmintonAnalysisSystem。主流程编排BadmintonAnalysisSystem.process_video()system.py 中的process_video()是整条流水线的「总指挥」逐帧执行以下六步读视频 载入模板cv2.VideoCapture打开视频读取球场模板图并缩放到与帧一致。球场标注_setup_court_annotation()优先复用输出目录里已有的court_annotations.txt否则调用annotate_court()自动检测 手动四角标注。构建坐标映射CourtMapper(corners)建立图像坐标 ↔ 标准球场坐标6.1×13.4 米的双向变换。逐帧检测_process_frame()is_court_view()用模板匹配判断当前帧是否为比赛视角用于回合开始/结束判定PlayerPoseVisualizer.detect_players()在 ROI 内做姿态检测ShuttlecockTracker.detect_ball()做羽毛球检测并维护轨迹PlayerTracker.update()追踪上下半场球员、写检测记录各Visualizer把骨架、轨迹、统计、球场轨迹画回帧上。写输出每帧追加detections.jsonl逐帧写入临时视频。收尾_cleanup()关闭数据写入器用 FFmpeg 把临时视频转码为浏览器兼容的 H.264 并合并音频。三、关键源码导读二开必看1. 球场映射 court/像素 → 米的桥梁court/mapper.py 的CourtMapper是整套统计的地基。它用cv2.getPerspectiveTransform算出「四角点 → 标准矩形」的透视矩阵image_to_court()把球员像素位置换算成球场坐标单位米。court_to_image()反向换算用于把球场轨迹画回画面。compute_expanded_roi()由四角自动生成姿态检测 ROI减少推理区域、提速。自动检测则交给 court/detector.pyauto_detect_court_corners()先提取水平/侧边球场线段再枚举「上、下、左、右」线段组合求交点用 reference.py 的标准球场线模型打分选出最可信的四角。2. 检测 detection/羽毛球 姿态羽毛球detection/shuttlecock.pyShuttlecockTracker在整帧上跑 YOLO 检测再经过「面积比 / 长宽比 / ROI 范围 / 跳变门限 / 轨迹外点」多重过滤用deque维护最近 30 帧轨迹抗抖动效果稳定。姿态支持三族detection/rtmpose.pyRTMPose/RTMOONNX Runtime 推理自动选 GPU/CPU与 detection/yolo_pose.pyUltralytics YOLO Pose。两者统一输出 COCO 17 关键点便于上层无差别使用。3. 追踪与统计 tracking/tracking/player.py 的PlayerTracker按「中线高度」把球员分成upper/lower两区维护各自的图像历史与球场坐标历史并计算当前速度、回合平均/最大速度、总距离。write_detection_record()负责把每帧结构化数据交给数据写入器。4. 可视化 visualization/visualization/player_pose.py 负责绘制骨架、球员轨迹并用球场坐标过滤场外人员visualization/court_trajectory.py 绘制球场坐标系轨迹visualization/stats.py 渲染统计信息。player_positions_zh.py/player_positions_en.py则在分析结束后读取detections.jsonl生成球员位置热力图与散点图。5. 数据输出 data/data/writer.py 提供write_json()与JsonlDetectionWriter前者写metadata.json视频参数、模型、球场标注、坐标系后者逐帧追加detections.jsonl。这份 JSONL 是所有下游分析热力图、自定义指标、导出表格的数据源也是二开最重要的抓手。四、自定义数据集接入完整指南想分析自己的比赛视频、训练自己的检测模型只需按下述四步走无需改动框架代码。第 1 步准备输入视频与球场模板视频建议固定机位、球场线清晰。仓库自带示例 videos/demo.mp4。模板图从视频里挑一帧「视角稳定、球场线完整」的画面保存为 PNG。可参考 templates/demo1.png 的形态。# 最简命令使用仓库自带示例视频 python main.py --video-path videos/demo.mp4第 2 步标注球场四角关键点模板图决定了整套坐标映射的精度务必认真标注不传--template-path时程序会弹出选框传了则直接读取。程序先尝试自动检测并保存auto_court_preview.png窗口按Enter/Y接受按M/R/Esc进入手动标注。手动标注时依次点击左上、右上、右下、左下四个角点如下方示例。标注结果缓存到outputs/视频名/court_annotations.txt同目录再次运行会自动复用。⚠️ 换了拍摄视角 / 裁切方式 / 模板图后记得删除对应输出目录里的court_annotations.txt重新标注否则映射会错位。第 3 步接入 / 训练你自己的 YOLO 羽毛球检测模型框架默认使用weights/yolo11s-ball.pt。要换成自己数据集训练的模型流程是标准的 Ultralytics YOLO 单类目标检测整理数据集按 YOLO 格式组织images/视频抽帧与labels/每帧一个.txt格式class x_center y_center width height均为归一化值。编写配置data.yamlpath: ./datasets/badminton train: images/train val: images/val nc: 1 names: [shuttlecock]训练模型示例按需调整yolo detect train datadata.yaml modelyolo11s.pt epochs50 imgsz640接入系统把导出的.pt权重放到weights/下通过参数指定即可无需改代码python main.py --video-path 你的视频.mp4 --ball-model weights/你的模型.pt同理姿态模型也可替换--pose-family yolo-pose --yolo-pose-model 你的姿态模型.pt。第 4 步运行分析并查看输出python main.py \ --video-path 你的视频.mp4 \ --template-path 你的模板.png \ --ball-model weights/你的模型.pt \ --language zh运行结束后在outputs/视频名/下会得到文件说明detect_视频名.mp4带骨架、轨迹、统计、回合编号的标注视频detections.jsonl逐帧检测记录球员/手部/球场坐标/速度/羽毛球metadata.json视频、模型、球场标注与坐标系元数据court_annotations.txt球场标注坐标缓存position_visualizations/球员位置热力图与散点图也完全可以用 WebUIpip install -r requirements-webui.txt后python -m webui.app在浏览器里上传、检测球场、配置参数、查看结果无需命令行。五、二次开发路线与常见问题常见二开切入点新增统计指标基于 data/writer.py 产出的detections.jsonl自行聚合或在 tracking/player.py 的get_player_movement_stats()里扩展字段。换检测模型 / 加过滤逻辑在 detection/shuttlecock.py 与 detection/rtmpose.py 中调整阈值、门限。改坐标 / 球场模型调整 court/reference.py 的标准尺寸常量与 court/mapper.py 的映射逻辑。做批量视频分析以 webui/pipeline.py 的run_analysis()为蓝本写一个遍历目录的脚本README 中标注为开发计划项。FAQCPU 能跑吗能但姿态与羽毛球检测会明显变慢更适合短视频或功能验证GPU建议 6GB 显存体验最佳。为什么检测总是「出界」大概率是模板图 / 四角标错导致球场坐标映射偏移请重新标注四角。如何换语言--language en切换中英文可视化文字分别对应player_positions_en.py与player_positions_zh.py。击球点 / 技术动作统计目前仍是实验功能适合研究与二次开发analyze_shuttlecock()预留了扩展位。 小结Good-Badminton 的架构以 system.py 为中枢、六大模块各司其职数据流清晰。读懂「球场映射 → 检测 → 追踪 → 数据输出」这条主线后无论是接入自己的数据集还是扩展统计与可视化都有章可循。赞分享【免费下载链接】Good-Badminton AI Badminton Hawk-Eye System项目地址https://gitcode.com/gh_mirrors/go/Good-Badminton点击查看免费下载相关推荐一场羽毛球赛是如何被逐帧解析的Good-Badminton AI 鹰眼 system.py 主流程代码逐段拆解一场羽毛球赛是如何被逐帧解析的Good Badminton AI 鹰眼 system.py 主流程代码逐段拆解 Good Badminton 是一个 AI 羽如何自动识别羽毛球场边界Good-Badminton 球场线检测与四角点评分算法深度剖析如何自动识别羽毛球场边界Good Badminton 球场线检测与四角点评分算法深度剖析 Good Badminton 是一个基于计算机视觉的羽毛球 AI 鹰Anomalib 数据集系统完全指南从 DataFrame 结构到自定义数据集实现Anomalib 数据集系统完全指南从 DataFrame 结构到自定义数据集实现 本指南以 datasets.md https://link.gitcode人工智能计算机视觉深度学习模型评测上一篇eksctl 使用指南为 Amazon EKS 集群启用 KMS Envelope Encryption信封加密下一篇QGroundControl 中的 Qt 6 静态资源管理从 CMake 配置到源码实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询