[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-ArtLabss--tennis-tracking":3,"tool-ArtLabss--tennis-tracking":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",151918,2,"2026-04-12T11:33:05",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":76,"owner_twitter":76,"owner_website":77,"owner_url":78,"languages":79,"stars":88,"forks":89,"last_commit_at":90,"license":91,"difficulty_score":10,"env_os":92,"env_gpu":93,"env_ram":94,"env_deps":95,"category_tags":103,"github_topics":105,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":114,"updated_at":115,"faqs":116,"releases":146},6979,"ArtLabss\u002Ftennis-tracking","tennis-tracking","Open-source Monocular Python HawkEye for Tennis","tennis-tracking 是一款开源的网球视频分析工具，被誉为“单目摄像头版的鹰眼系统”。它旨在通过普通摄像机拍摄的视频，自动完成三项核心任务：精准追踪高速飞行的网球、识别球场界线以及检测场上球员位置。\n\n对于希望低成本实现网球比赛数字化分析的用户来说，tennis-tracking 解决了传统专业鹰眼系统昂贵且依赖多机位的问题。它让仅凭单个摄像头录制的比赛视频也能获得专业的轨迹数据和视觉标注，非常适合体育科技开发者、计算机视觉研究人员以及网球数据分析爱好者使用。\n\n在技术实现上，tennis-tracking 展现了独特的深度学习架构：针对网球高速运动的特点，采用了专为追踪高速物体设计的 TrackNet 网络；而在球员检测方面，则运用了成熟的 ResNet50 模型。这种组合确保了在复杂运动场景下的准确性。需要注意的是，为了获得最佳效果，输入视频应为纯粹的比赛回合，避免包含广告、暂停或观众画面。由于涉及深度学习推理，运行该工具需要配备兼容的 GPU 环境，用户既可以在本地配置，也可以便捷地使用 Google Colab 云端资源进行部署和测试。","\u003Cp align='center'>\n  \u003Ca href=\"https:\u002F\u002Fwww.artlabs.tech\">\u003Cimg src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FArtLabss_tennis-tracking_readme_a71e999a9d17.jpg' width=\"150\" height=\"170\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Ch1 align='center'>Tennis Tracking 🎾\u003C\u002Fh1>\n\u003Cp align='center'>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002FArtLabss\u002Ftennis-tracking.svg\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FArtLabss\u002Ftennis-tracking.svg\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fwatchers\u002FArtLabss\u002Ftennis-tracking.svg\">\n  \n  \u003Cbr>\n  \n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flast-commit\u002FArtLabss\u002Ftennis-tracking.svg\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-Unlicense-blue.svg\">\n  \u003Cimg src=\"https:\u002F\u002Fhits.sh\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking.svg\"\u002F>\n  \u003Cbr>\n  \u003Ccode>With ❤️ by ArtLabs\u003C\u002Fcode>\n  \n\u003C\u002Fp>\n\n\u003C!-- \n![Forks](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002FArtLabss\u002Ftennis-tracking.svg)\n![Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FArtLabss\u002Ftennis-tracking.svg)\n![Watchers](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fwatchers\u002FArtLabss\u002Ftennis-tracking.svg)\n![Last Commit](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flast-commit\u002FArtLabss\u002Ftennis-tracking.svg)  \n-->\n\n\u003Ch3>Objectives\u003C\u002Fh3>\n\u003Cul>\n  \u003Cli>Track the ball \u003C\u002Fli>\n  \u003Cli>Detect court lines \u003C\u002Fli>\n  \u003Cli>Detect the players\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Cp>To track the ball we used \u003Ca href='https:\u002F\u002Fnol.cs.nctu.edu.tw:234\u002Fopen-source\u002FTrackNet'>TrackNet\u003C\u002Fa> - deep learning network for tracking high-speed objects. For players detection ResNet50 was used. See \u003Ca href=\"https:\u002F\u002Fartlabs.tech\u002Fprojects\u002F\"> ArtLabs\u002Fprojects\u003C\u002Fa> for more or similar projects.\u003C\u002Fp>\n\n\n\u003Ch3>Example using \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Ftree\u002Fmain\u002FVideoInput\">sample videos\u003C\u002Fa>\u003C\u002Fh3>\n\n  \nInput            |  Output\n:-------------------------:|:-------------------------:\n![input_img1](https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Fblob\u002F00cfe10b18db1e6a68800921dfbda010f90a74bb\u002FVideoOutput\u002Fezgif.com-gif-maker(3).gif)  |  ![output_img1](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FArtLabss_tennis-tracking_readme_6acd489aef79.gif)\n![input_img2](https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Fblob\u002F579fb3344935bbf4c5d08e27c99ffc6b56bed896\u002FVideoOutput\u002Fezgif.com-gif-maker(1).gif)  |  ![output_img2](https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Fblob\u002F579fb3344935bbf4c5d08e27c99ffc6b56bed896\u002FVideoOutput\u002Fezgif.com-gif-maker(2).gif)\n![input_img3](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FArtLabss_tennis-tracking_readme_758447261a9e.gif)  |  ![output_img3](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FArtLabss_tennis-tracking_readme_20ceb6499167.gif)\n\n\u003Ch3>How to run\u003C\u002Fh3>\n\n\u003Cp>This project requires compatible \u003Cb>GPU\u003C\u002Fb> to install tensorflow, you can run it on your local machine in case you have one or use \u003Ca href='https:\u002F\u002Fwww.google.com\u002Furl?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwissLL5-MvxAhXwlYsKHbkBDEUQFnoECAMQAw&url=https%3A%2F%2Fcolab.research.google.com%2Fnotebooks%2F&usg=AOvVaw0eDNVclINNdlOuD-YTYiiB'>Google Colaboratory\u003C\u002Fa> with \u003Cb>Runtime Type\u003C\u002Fb> changed to \u003Cb>GPU\u003C\u002Fb>.\u003C\u002Fp>\n\n- [ ] Input videos have to be rallies of the game and shouldn't contain any \u003Cstrong>commercials, breaks or spectators\u003C\u002Fstrong>.\n  \n\u003Col>\n  \u003Cli>\n    Clone this repository\n  \u003C\u002Fli>\n  \n  ```git\n  git clone https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking.git\n  ```\n  \n   \u003Cli>\n     Download yolov3 weights (237 MB) from \u003Ca href=\"https:\u002F\u002Fpjreddie.com\u002Fmedia\u002Ffiles\u002Fyolov3.weights\">here\u003C\u002Fa> and add it to your \u003Ca href=\"\u002FYolov3\">Yolov3 folder\u003C\u002Fa>.\n  \u003C\u002Fli>\n  \n  \u003Cli>\n    Install the requirements using pip \n  \u003C\u002Fli>\n  \n  ```python\n  pip install -r requirements.txt\n  ```\n  \n   \u003Cli>\n    Run the following command in the command line\n  \u003C\u002Fli>\n  \n  ```python\n  python3 predict_video.py --input_video_path=VideoInput\u002Fvideo_input3.mp4 --output_video_path=VideoOutput\u002Fvideo_output.mp4 --minimap=0 --bounce=0\n  ```\n  \n  \u003Cli>If you are using Google Colab upload all the files to Google Drive, including yolov3 weights from step \u003Cstrong>2.\u003C\u002Fstrong>\u003C\u002Fli>\n  \n   \u003Cli>\n    Create a Google Colaboratory Notebook in the same directory as \u003Ccode>predict_video.py\u003C\u002Fcode>, change Runtime Type to \u003Cstrong>GPU\u003C\u002Fstrong> and connect it to Google drive\n  \u003C\u002Fli>\n  \n  ```python\n  from google.colab import drive\n  drive.mount('\u002Fcontent\u002Fdrive')\n  ```\n  \n  \u003Cli>\n    Change the working directory to the one where the Colab Notebook and \u003Ccode>predict_video.py\u003C\u002Fcode> are. In my case,\n  \u003C\u002Fli>\n  \n  ```python\n  import os \n  os.chdir('drive\u002FMyDrive\u002FColab Notebooks\u002Ftennis-tracking')\n  ```\n  \n  \u003Cli>\n    Install only 2 requirements, because Colab already has the rest\n  \u003C\u002Fli>\n  \n  ```python\n  !pip install filterpy sktime\n  ```\n  \n  \u003Cli>\n    Inside the notebook run \u003Ccode>predict_video.py\u003C\u002Fcode>\n  \u003C\u002Fli>\n  \n  ```\n   !python3 predict_video.py --input_video_path=VideoInput\u002Fvideo_input3.mp4 --output_video_path=VideoOutput\u002Fvideo_output.mp4 --minimap=0 --bounce=0\n  ```\n  \n  \u003Cp>After the compilation is completed, a new video will be created in \u003Ca href=\"\u002FVideoOutput\" target=\"_blank\">VideoOutput folder\u003C\u002Fa> if \u003Ccode>--minimap\u003C\u002Fcode> was set \u003Ccode>0\u003C\u002Fcode>, if \u003Ccode>--minimap=1\u003C\u002Fcode> three videos will be created: video of the game, video of minimap and a combined video of both\u003C\u002Fp>\n  \u003Cp>\u003Ci>P.S. If you stumble upon an \u003Cb>error\u003C\u002Fb> or have any questions feel free to open a new \u003Ca href='https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Fissues'>Issue\u003C\u002Fa> \u003C\u002Fi>\u003C\u002Fp>\n  \n\u003C\u002Fol>\n\n\n\u003Ch3>What's new?\u003C\u002Fh3>\n\u003Cul>\n  \u003Cli>Court line detection improved\u003C\u002Fli>\n  \u003Cli>Player detection improved\u003C\u002Fli>\n  \u003Cli>The algorithm now works practically with any court colors\u003C\u002Fli>\n  \u003Cli>Faster algorithm\u003C\u002Fli>\n  \u003Cli>Dynamic Mini-Map with players and ball added, to activate use argument \u003Ccode>--minimap\u003C\u002Fcode>\u003C\u002Fli>\n  \u003C\u002Ful>\n  \n`--minimap=0`            |  `--minimap=1`\n:-------------------------:|:-------------------------:\n![input_img1](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FArtLabss_tennis-tracking_readme_d0d7ec3a2f31.gif)  |  ![output_img1](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FArtLabss_tennis-tracking_readme_7491c2344a00.gif)\n\n\u003Cp>\n  To predict bounce points machine learning library for time series \u003Ca href=\"https:\u002F\u002Fwww.sktime.org\u002Fen\u002Fstable\u002Findex.html\">sktime\u003C\u002Fa> was used. Specifically, \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Fblob\u002F90652b4547311423ea49c4195dde9da9a81f1893\u002Fclf.pkl\">TimeSeriesForestClassifier\u003C\u002Fa> was trained on 3 variables:  \u003Ccode>x\u003C\u002Fcode>, \u003Ccode>y\u003C\u002Fcode> coordinates of the ball and \u003Ccode>V\u003C\u002Fcode> for velocity (\u003Ccode>V2-V1\u002Ft2-t1\u003C\u002Fcode>). Data for training the model - \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Fblob\u002Fmain\u002FbigDF.csv\" >df.csv\u003C\u002Fa>\n\u003Cp>\n\u003Cul>\n  \u003Cli>By specifiying \u003Ccode>--bounce=1\u003C\u002Fcode> bounce points can be detected and displayed\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp align=\"center\">\n  \u003Ckbd>\n  \u003Cimg width=500 src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FArtLabss_tennis-tracking_readme_52cda2baf09f.gif\">\n  \u003C\u002Fkbd>\n\u003C\u002Fp>\n\n\u003Cp>\n  The model predicts true negatives (not bounce) with accuracy of \u003Cstrong>98%\u003C\u002Fstrong> and true positives (bounce) with \u003Cstrong>83%\u003C\u002Fstrong>.\n\u003C\u002Fp>\n\n\n\u003Ch3>Further Developments\u003C\u002Fh3>\n\u003Cul>\n  \u003Cli>\u003Cstrike>Improve line detection of the court and remove overlapping lines\u003C\u002Fstrike>\u003C\u002Fli>\n  \u003Cli>\u003Cstrike>Algorithm fails to detect players when the court colors aren't similar to the sample video\u003C\u002Fstrike>\u003C\u002Fli>\n  \u003Cli>\u003Cstrike>Don't detect the ballboys\u002Fballgirls\u003C\u002Fstrike>\u003C\u002Fli>\n  \u003Cli>\u003Cstrike>Don't contour the banners\u003C\u002Fstrike>\u003C\u002Fli>\n  \u003Cli>\u003Cstrike>Find the coordinates of the ball touching the court and display them\u003C\u002Fstrike>\u003C\u002Fli>\n  \u003Cli>Code Optimization\u003C\u002Fli>\n  \u003Cli>\u003Cstrike>Dynamic court mini-map with players and the ball\u003C\u002Fstrike>\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch3>Current Drawbacks\u003C\u002Fh3>\n\u003Cul>\n  \u003Cli>Slow algorithms (to process 15 seconds video (6.1 Mb) it takes \u003Cstrike>28 minutes\u003C\u002Fstrike> 16 minutes)\u003Cbr>\u003Cul>\u003Cli>Instead of writing a new video, a faster way would be to show the frame right after it has been processed\u003C\u002Fli>\u003C\u002Ful>\u003C\u002Fli>\n  \u003Cli>Algorithm works only on official match videos\u003C\u002Fli>\n\u003C\u002Ful>\n \n\u003Ch3>Helpful Repositories\u003C\u002Fh3>\n\u003Cul>\n  \u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FMaximeBataille\u002Ftennis_tracking\">Tennis Tracking\u003C\u002Fa> @MaximeBataille\u003C\u002Fli>\n  \u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Favivcaspi\u002FTennisProject\">Tennis Project\u003C\u002Fa> @avivcaspi\u003C\u002Fli>\n  \u003Cli>\u003Ca href=\"https:\u002F\u002Fnol.cs.nctu.edu.tw:234\u002Fopen-source\u002FTrackNet\u002Ftree\u002Fmaster\u002FCode_Python3\">TrackNet\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch3>Contribution\u003C\u002Fh3>\n\n\u003Cp>Help us by contributing, check out the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Fblob\u002Fmain\u002FCONTRIBUTING.md\">CONTRIBUTING.md\u003C\u002Fa>. Contributing is easy!\u003C\u002Fp>\n\n\u003Ch3>References\u003C\u002Fh3>\n\n- Yu-Chuan Huang, \"TrackNet: Tennis Ball Tracking from Broadcast Video by Deep Learning Networks,\" Master Thesis, advised by Tsì-Uí İk and Guan-Hua Huang, National Chiao Tung University, Taiwan, April 2018. \n\n- Yu-Chuan Huang, I-No Liao, Ching-Hsuan Chen, Tsì-Uí İk, and Wen-Chih Peng, \"TrackNet: A Deep Learning Network for Tracking High-speed and Tiny Objects in Sports Applications,\" in the IEEE International Workshop of Content-Aware Video Analysis (CAVA 2019) in conjunction with the 16th IEEE International Conference on Advanced Video and Signal-based Surveillance (AVSS 2019), 18-21 September 2019, Taipei, Taiwan.\n\n- Joseph Redmon, Ali Farhadi, \"YOLOv3: An Incremental Improvement\", University of Washington, https:\u002F\u002Farxiv.org\u002Fpdf\u002F1804.02767.pdf\n","\u003Cp align='center'>\n  \u003Ca href=\"https:\u002F\u002Fwww.artlabs.tech\">\u003Cimg src='https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FArtLabss_tennis-tracking_readme_a71e999a9d17.jpg' width=\"150\" height=\"170\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Ch1 align='center'>网球追踪 🎾\u003C\u002Fh1>\n\u003Cp align='center'>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002FArtLabss\u002Ftennis-tracking.svg\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FArtLabss\u002Ftennis-tracking.svg\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fwatchers\u002FArtLabss\u002Ftennis-tracking.svg\">\n  \n  \u003Cbr>\n  \n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flast-commit\u002FArtLabss\u002Ftennis-tracking.svg\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-Unlicense-blue.svg\">\n  \u003Cimg src=\"https:\u002F\u002Fhits.sh\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking.svg\"\u002F>\n  \u003Cbr>\n  \u003Ccode>由 ArtLabs 真心制作\u003C\u002Fcode>\n  \n\u003C\u002Fp>\n\n\u003C!-- \n![Forks](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002FArtLabss\u002Ftennis-tracking.svg)\n![Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FArtLabss\u002Ftennis-tracking.svg)\n![Watchers](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fwatchers\u002FArtLabss\u002Ftennis-tracking.svg)\n![Last Commit](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flast-commit\u002FArtLabss\u002Ftennis-tracking.svg)  \n-->\n\n\u003Ch3>项目目标\u003C\u002Fh3>\n\u003Cul>\n  \u003Cli>追踪球的运动轨迹\u003C\u002Fli>\n  \u003Cli>检测球场边界线\u003C\u002Fli>\n  \u003Cli>识别并定位球员\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Cp>为了追踪球的运动，我们使用了 \u003Ca href='https:\u002F\u002Fnol.cs.nctu.edu.tw:234\u002Fopen-source\u002FTrackNet'>TrackNet\u003C\u002Fa>——一个用于高速物体跟踪的深度学习网络。而对于球员检测，则采用了 ResNet50 模型。更多类似项目，请访问 \u003Ca href=\"https:\u002F\u002Fartlabs.tech\u002Fprojects\u002F\">ArtLabs\u002Fprojects\u003C\u002Fa>。\u003C\u002Fp>\n\n\n\u003Ch3>示例：使用 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Ftree\u002Fmain\u002FVideoInput\">示例视频\u003C\u002Fa>\u003C\u002Fh3>\n\n输入            |  输出\n:-------------------------:|:-------------------------:\n![input_img1](https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Fblob\u002F00cfe10b18db1e6a68800921dfbda010f90a74bb\u002FVideoOutput\u002Fezgif.com-gif-maker(3).gif)  |  ![output_img1](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FArtLabss_tennis-tracking_readme_6acd489aef79.gif)\n![input_img2](https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Fblob\u002F579fb3344935bbf4c5d08e27c99ffc6b56bed896\u002FVideoOutput\u002Fezgif.com-gif-maker(1).gif)  |  ![output_img2](https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Fblob\u002F579fb3344935bbf4c5d08e27c99ffc6b56bed896\u002FVideoOutput\u002Fezgif.com-gif-maker(2).gif)\n![input_img3](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FArtLabss_tennis-tracking_readme_758447261a9e.gif)  |  ![output_img3](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FArtLabss_tennis-tracking_readme_20ceb6499167.gif)\n\n\u003Ch3>运行方法\u003C\u002Fh3>\n\n\u003Cp>本项目需要兼容的 \u003Cb>GPU\u003C\u002Fb> 来安装 TensorFlow。您可以在本地机器上运行，或者使用 \u003Ca href='https:\u002F\u002Fwww.google.com\u002Furl?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwissLL5-MvxAhXwlYsKHbkBDEUQFnoECAMQAw&url=https%3A%2F%2Fcolab.research.google.com%2Fnotebooks%2F&usg=AOvVaw0eDNVclINNdlOuD-YTYiiB'>Google Colaboratory\u003C\u002Fa>，并将\u003Cb>运行时类型\u003C\u002Fb>更改为\u003Cb>GPU\u003C\u002Fb>。\u003C\u002Fp>\n\n- [ ] 输入视频必须是比赛中的连续回合，不应包含任何\u003Cstrong>广告、暂停或观众画面\u003C\u002Fstrong>。\n  \n\u003Col>\n  \u003Cli>\n    克隆本仓库\n  \u003C\u002Fli>\n  \n  ```git\n  git clone https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking.git\n  ```\n  \n   \u003Cli>\n     从 \u003Ca href=\"https:\u002F\u002Fpjreddie.com\u002Fmedia\u002Ffiles\u002Fyolov3.weights\">这里\u003C\u002Fa>下载 YOLOv3 权重文件（237 MB），并将其放入您的 \u003Ca href=\"\u002FYolov3\">Yolov3 文件夹\u003C\u002Fa>中。\n  \u003C\u002Fli>\n  \n  \u003Cli>\n    使用 pip 安装所需依赖\n  \u003C\u002Fli>\n  \n  ```python\n  pip install -r requirements.txt\n  ```\n  \n   \u003Cli>\n    在命令行中运行以下命令\n  \u003C\u002Fli>\n  \n  ```python\n  python3 predict_video.py --input_video_path=VideoInput\u002Fvideo_input3.mp4 --output_video_path=VideoOutput\u002Fvideo_output.mp4 --minimap=0 --bounce=0\n  ```\n  \n  \u003Cli>如果您使用 Google Colab，请将所有文件上传至 Google Drive，包括第 \u003Cstrong>2.\u003C\u002Fstrong> 步中的 YOLOv3 权重文件。\u003C\u002Fli>\n  \n   \u003Cli>\n    在与 \u003Ccode>predict_video.py\u003C\u002Fcode> 同一目录下创建一个 Google Colaboratory 笔记本，将运行时类型设置为 \u003Cstrong>GPU\u003C\u002Fstrong>,并连接到 Google Drive\n  \u003C\u002Fli>\n  \n  ```python\n  from google.colab import drive\n  drive.mount('\u002Fcontent\u002Fdrive')\n  ```\n  \n  \u003Cli>\n    将工作目录切换到 Colab 笔记本和 \u003Ccode>predict_video.py\u003C\u002Fcode> 所在的目录。以我的为例，\n  \u003C\u002Fli>\n  \n  ```python\n  import os \n  os.chdir('drive\u002FMyDrive\u002FColab Notebooks\u002Ftennis-tracking')\n  ```\n  \n  \u003Cli>\n    由于 Colab 已经预装了大部分依赖，只需安装另外两项：\n  \u003C\u002Fli>\n  \n  ```python\n  !pip install filterpy sktime\n  ```\n  \n  \u003Cli>\n    在笔记本中运行 \u003Ccode>predict_video.py\u003C\u002Fcode>\n  \u003C\u002Fli>\n  \n  ```\n   !python3 predict_video.py --input_video_path=VideoInput\u002Fvideo_input3.mp4 --output_video_path=VideoOutput\u002Fvideo_output.mp4 --minimap=0 --bounce=0\n  ```\n  \n  \u003Cp>编译完成后，如果 \u003Ccode>--minimap\u003C\u002Fcode> 设置为 \u003Ccode>0\u003C\u002Fcode>,将在 \u003Ca href=\"\u002FVideoOutput\" target=\"_blank\">VideoOutput 文件夹\u003C\u002Fa>中生成一段新视频；若 \u003Ccode>--minimap=1\u003C\u002Fcode>,则会生成三段视频：比赛原视频、迷你地图视频以及两者的合成视频。\u003C\u002Fp>\n  \u003Cp>\u003Ci>附注：如果您遇到\u003Cb>错误\u003C\u002Fb>或有任何疑问，欢迎随时打开一个新的\u003Ca href='https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Fissues'>问题\u003C\u002Fa>\u003C\u002Fi>\u003C\u002Fp>\n  \n\u003C\u002Fol>\n\n\n\u003Ch3>更新内容\u003C\u002Fh3>\n\u003Cul>\n  \u003Cli>球场边界线检测功能得到改进\u003C\u002Fli>\n  \u003Cli>球员检测精度进一步提升\u003C\u002Fli>\n  \u003Cli>算法现已几乎适用于所有颜色的球场\u003C\u002Fli>\n  \u003Cli>运行速度更快\u003C\u002Fli>\n  \u003Cli>新增动态迷你地图功能，可显示球员和球的位置。启用该功能需使用参数 \u003Ccode>--minimap\u003C\u002Fcode>\u003C\u002Fli>\n  \u003C\u002Ful>\n  \n`--minimap=0`            |  `--minimap=1`\n:-------------------------:|:-------------------------:\n![input_img1](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FArtLabss_tennis-tracking_readme_d0d7ec3a2f31.gif)  |  ![output_img1](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FArtLabss_tennis-tracking_readme_7491c2344a00.gif)\n\n\u003Cp>\n  为了预测球的弹跳点，我们使用了时间序列机器学习库 \u003Ca href=\"https:\u002F\u002Fwww.sktime.org\u002Fen\u002Fstable\u002Findex.html\">sktime\u003C\u002Fa>。具体来说，基于 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Fblob\u002F90652b4547311423ea49c4195dde9da9a81f1893\u002Fclf.pkl\">TimeSeriesForestClassifier\u003C\u002Fa>，利用三个变量进行训练：球的 \u003Ccode>x\u003C\u002Fcode> 和 \u003Ccode>y\u003C\u002Fcode> 坐标，以及速度 \u003Ccode>V\u003C\u002Fcode>（计算公式为 \u003Ccode>V2-V1\u002Ft2-t1\u003C\u002Fcode>)。用于训练模型的数据集位于 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Fblob\u002Fmain\u002FbigDF.csv\" >df.csv\u003C\u002Fa>\n\u003Cp>\n\u003Cul>\n  \u003Cli>通过指定 \u003Ccode>--bounce=1\u003C\u002Fcode>,可以检测并显示球的弹跳点\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp align=\"center\">\n  \u003Ckbd>\n  \u003Cimg width=500 src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FArtLabss_tennis-tracking_readme_52cda2baf09f.gif\">\n  \u003C\u002Fkbd>\n\u003C\u002Fp>\n\n\u003Cp>\n  该模型对真阴性（非出界）的预测准确率为\u003Cstrong>98%\u003C\u002Fstrong>,对真阳性（出界）的预测准确率为\u003Cstrong>83%\u003C\u002Fstrong>。\n\u003C\u002Fp>\n\n\n\u003Ch3>后续改进\u003C\u002Fh3>\n\u003Cul>\n  \u003Cli>\u003Cstrike>改进球场线条检测，去除重叠线条\u003C\u002Fstrike>\u003C\u002Fli>\n  \u003Cli>\u003Cstrike>当球场颜色与示例视频不一致时，算法无法检测到球员\u003C\u002Fstrike>\u003C\u002Fli>\n  \u003Cli>\u003Cstrike>不要检测球童\u003C\u002Fstrike>\u003C\u002Fli>\n  \u003Cli>\u003Cstrike>不要勾勒横幅轮廓\u003C\u002Fstrike>\u003C\u002Fli>\n  \u003Cli>\u003Cstrike>找到球触碰球场的坐标并显示出来\u003C\u002Fstrike>\u003C\u002Fli>\n  \u003Cli>代码优化\u003C\u002Fli>\n  \u003Cli>\u003Cstrike>动态球场迷你地图，显示球员和皮球位置\u003C\u002Fstrike>\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch3>当前不足\u003C\u002Fh3>\n\u003Cul>\n  \u003Cli>算法运行较慢（处理15秒视频（6.1 Mb）需要\u003Cstrike>28分钟\u003C\u002Fstrike>16分钟）\u003Cbr>\u003Cul>\u003Cli>与其重新生成视频，不如在每一帧处理完成后立即显示，这样会更快\u003C\u002Fli>\u003C\u002Ful>\u003C\u002Fli>\n  \u003Cli>算法仅适用于官方比赛视频\u003C\u002Fli>\n\u003C\u002Ful>\n \n\u003Ch3>参考仓库\u003C\u002Fh3>\n\u003Cul>\n  \u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FMaximeBataille\u002Ftennis_tracking\">Tennis Tracking\u003C\u002Fa> @MaximeBataille\u003C\u002Fli>\n  \u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Favivcaspi\u002FTennisProject\">Tennis Project\u003C\u002Fa> @avivcaspi\u003C\u002Fli>\n  \u003Cli>\u003Ca href=\"https:\u002F\u002Fnol.cs.nctu.edu.tw:234\u002Fopen-source\u002FTrackNet\u002Ftree\u002Fmaster\u002FCode_Python3\">TrackNet\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch3>贡献\u003C\u002Fh3>\n\n\u003Cp>请通过贡献来帮助我们，查看\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Fblob\u002Fmain\u002FCONTRIBUTING.md\">CONTRIBUTING.md\u003C\u002Fa>。贡献非常简单！\u003C\u002Fp>\n\n\u003Ch3>参考文献\u003C\u002Fh3>\n\n- 黄宇川，《TrackNet：基于深度学习网络的广播视频网球追踪》，硕士论文，指导教师：易次威、黄冠华，国立交通大学，台湾，2018年4月。\n\n- 黄宇川、廖以诺、陈清轩、易次威、彭文志，《TrackNet：一种用于体育应用中高速微小目标追踪的深度学习网络》，发表于IEEE内容感知视频分析国际研讨会（CAVA 2019），该会议与第16届IEEE高级视频与基于信号的监控技术国际会议（AVSS 2019）联合举办，2019年9月18日至21日，台北，台湾。\n\n- 约瑟夫·雷德蒙、阿里·法尔哈迪，《YOLOv3：一项渐进式改进》，华盛顿大学，https:\u002F\u002Farxiv.org\u002Fpdf\u002F1804.02767.pdf","# Tennis Tracking 快速上手指南\n\nTennis Tracking 是一个基于深度学习的开源工具，旨在自动分析网球比赛视频。它能够追踪高速运动的网球、检测球场界线以及识别球员位置。\n\n## 环境准备\n\n本项目依赖 **GPU** 环境以运行 TensorFlow 和深度学习模型。\n\n*   **操作系统**：Linux \u002F macOS \u002F Windows (推荐 Linux)\n*   **硬件要求**：兼容 CUDA 的 NVIDIA GPU（显存建议 4GB 以上）\n    *   *注：若无本地 GPU，可使用 Google Colaboratory 并切换 Runtime Type 为 GPU。*\n*   **软件依赖**：\n    *   Python 3.x\n    *   Git\n    *   pip\n\n## 安装步骤\n\n### 1. 克隆项目\n首先将代码仓库克隆到本地：\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking.git\ncd tennis-tracking\n```\n\n### 2. 下载预训练权重\n下载 YOLOv3 权重文件（约 237 MB），并将其放入项目的 `Yolov3` 文件夹中。\n\n*   **下载地址**：[yolov3.weights](https:\u002F\u002Fpjreddie.com\u002Fmedia\u002Ffiles\u002Fyolov3.weights)\n*   **操作**：将下载的文件移动至 `tennis-tracking\u002FYolov3\u002F` 目录下。\n\n> **国内加速提示**：如果上述链接下载缓慢，可尝试使用国内镜像站或代理下载该文件。\n\n### 3. 安装依赖库\n使用 pip 安装项目所需的 Python 包：\n\n```bash\npip install -r requirements.txt\n```\n\n> **优化建议**：国内用户建议使用清华源或阿里源加速安装：\n> ```bash\n> pip install -r requirements.txt -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n> ```\n\n## 基本使用\n\n确保输入视频为纯粹的比赛回合（Rallies），**不包含**广告、休息间隙或观众画面，以获得最佳检测效果。\n\n### 运行预测\n在项目根目录下执行以下命令处理视频：\n\n```bash\npython3 predict_video.py --input_video_path=VideoInput\u002Fvideo_input3.mp4 --output_video_path=VideoOutput\u002Fvideo_output.mp4 --minimap=0 --bounce=0\n```\n\n**参数说明：**\n*   `--input_video_path`: 输入视频路径（请替换为你自己的视频文件）。\n*   `--output_video_path`: 输出视频保存路径。\n*   `--minimap`: \n    *   `0`: 仅生成比赛视频。\n    *   `1`: 生成比赛视频、动态小地图（Mini-Map）以及合成视频。\n*   `--bounce`: \n    *   `0`: 不检测落点。\n    *   `1`: 检测并标记网球落地点（基于 sktime 时间序列分类）。\n\n**输出结果：**\n处理完成后，生成的视频将保存在 `VideoOutput` 文件夹中。\n\n---\n*注意：由于涉及复杂的深度学习推理，处理速度可能较慢（例如处理 15 秒视频可能需要数分钟），请耐心等待进程完成。*","某省级网球青训基地的教练团队正试图利用现有的单摄像头比赛录像，为青少年选手制作包含球路轨迹和落点分析的技术评估报告。\n\n### 没有 tennis-tracking 时\n- **人工标注效率极低**：教练需逐帧回放视频手动标记网球位置，分析一场 20 分钟的比赛耗时超过 3 小时，难以批量处理。\n- **高速球路捕捉困难**：人眼难以精准追踪时速超过 150 公里的发球轨迹，导致关键数据缺失或记录偏差大。\n- **缺乏场地空间参照**：仅凭肉眼判断落点是否压线或出界存在主观误差，无法生成带有球场线条透视校正的专业图示。\n- **球员动态分离复杂**：在不专业的拍摄角度下，很难将球员移动路径与球的飞行轨迹在视觉上清晰区分开来。\n\n### 使用 tennis-tracking 后\n- **自动化全流程分析**：只需输入原始比赛视频，tennis-tracking 利用 TrackNet 深度学习网络自动完成球体追踪，将单场分析时间缩短至几分钟。\n- **高精度高速追踪**：专为高速物体设计的算法能精准锁定快速飞行的网球，完整还原每一拍的飞行弧线与速度变化。\n- **智能场地与人员识别**：系统自动检测并绘制球场界线（Court Lines）及球员位置（基于 ResNet50），生成带有透视校正的专业战术视图。\n- **可视化输出直观**：直接输出叠加了球路轨迹、落点标记及球员动线的增强视频，无需后期合成即可用于教学演示。\n\ntennis-tracking 将昂贵的“鹰眼”系统能力下沉到普通单目摄像头场景，让基层教练也能以零成本获得职业级的数据化训练支持。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002FArtLabss_tennis-tracking_4c2468c0.png","ArtLabss","aLabs","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002FArtLabss_3ad7a958.jpg","Machine Learning for eCommerce and Retail",null,"-","https:\u002F\u002Fgithub.com\u002FArtLabss",[80,84],{"name":81,"color":82,"percentage":83},"Python","#3572A5",62.2,{"name":85,"color":86,"percentage":87},"Jupyter Notebook","#DA5B0B",37.8,659,152,"2026-03-31T14:26:06","Unlicense","未说明 (支持本地运行或 Google Colab)","必需 (用于安装和运行 TensorFlow)，具体型号和显存未说明，建议使用支持 CUDA 的 NVIDIA GPU","未说明",{"notes":96,"python":97,"dependencies":98},"1. 该项目依赖兼容的 GPU 来安装 TensorFlow，若无本地 GPU 可使用 Google Colab (需将运行时类型更改为 GPU)。\n2. 需手动下载 YOLOv3 权重文件 (约 237 MB) 并放入指定文件夹。\n3. 输入视频必须是比赛回合片段，不能包含广告、休息或观众画面。\n4. 若在 Colab 运行，大部分依赖已预装，仅需额外安装 filterpy 和 sktime。\n5. 算法处理速度较慢 (处理 15 秒视频约需 16 分钟)。","3.x (命令示例使用 python3)",[99,100,101,102],"tensorflow","filterpy","sktime","YOLOv3 (权重文件需单独下载)",[14,104],"视频",[106,107,108,109,110,111,112,113,64],"deep-learning","python","video","yolo","tennis","line-detection","ball-tracking","machine-learning","2026-03-27T02:49:30.150509","2026-04-13T06:53:01.167153",[117,122,127,132,137,142],{"id":118,"question_zh":119,"answer_zh":120,"source_url":121},31448,"加载模型权重时出现 'Data loss: not an sstable (bad magic number)' 错误怎么办？","该错误通常是因为模型文件格式不匹配。尝试将文件名从 `model.1` 改为 `model.h5`。如果修改后预测仍然失败，可能是环境依赖冲突或运行时状态问题。建议完全删除现有环境，重新从头开始执行步骤，或者在 Google Colab 中创建一个新的 Notebook 实例（从 Drive 页面新建），这通常能解决因缓存或依赖冲突导致的问题。","https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Fissues\u002F14",{"id":123,"question_zh":124,"answer_zh":125,"source_url":126},31449,"在 Google Colab 运行第 8 步安装依赖时出现版本冲突警告，且重启后仍报错如何解决？","虽然 pip 会报告 numpy、folium 等包的版本冲突警告，但这通常不是致命错误。如果运行 `predict_video.py` 时依然报错，最有效的解决方法是：删除所有文件并从头开始重新执行所有步骤；或者直接在 Google Drive 页面创建一个新的 Google Colab 笔记本，而不是在旧会话中继续。这可以清除潜在的运行时缓存和依赖状态问题。","https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Fissues\u002F12",{"id":128,"question_zh":129,"answer_zh":130,"source_url":131},31450,"项目是如何利用机器学习预测网球落点（bounce）的？","项目使用了时间序列机器学习库 `sktime`，具体训练了一个 `TimeSeriesForestClassifier` 分类器。该模型基于三个变量进行训练：球的 x 坐标、y 坐标以及速度 V（计算公式为 V = (V2-V1)\u002F(t2-t1)）。通过这些特征来预测球的落点位置。","https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Fissues\u002F11",{"id":133,"question_zh":134,"answer_zh":135,"source_url":136},31451,"运行视频时出现 OpenCV 错误 '(-215:Assertion failed) count > 0 in function fitLine2D_wods' 是什么原因？","该错误表示球场检测失败，导致用于拟合直线的点集为空（count=0）。日志中通常会出现 'Court tracking failed' 的提示。常见原因是输入视频中包含干扰元素（如电视台标、Logo 等），导致算法无法正确识别球场线条。建议修剪视频，去除含有 Logo 或非球场画面的片段后再尝试运行。","https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Fissues\u002F7",{"id":138,"question_zh":139,"answer_zh":140,"source_url":141},31452,"执行 predict_video.py 时遇到 TensorFlow GPU 库加载失败或 InvalidArgumentError 如何处理？","如果遇到类似 'Could not load dynamic library libcusolver.so.11' 或 CPU 上的 MaxPooling 操作参数错误，首先检查 CUDA 和 cuDNN 版本是否与 TensorFlow 匹配。如果是 CPU 环境下遇到 MaxPooling 相关的 `InvalidArgumentError`，可以尝试安装英特尔优化的 TensorFlow 版本来解决兼容性问题，命令为：`pip install intel-tensorflow`。","https:\u002F\u002Fgithub.com\u002FArtLabss\u002Ftennis-tracking\u002Fissues\u002F28",{"id":143,"question_zh":144,"answer_zh":145,"source_url":126},31453,"OpenCV 在处理 MP4 视频时出现 FFMPEG tag 不支持的警告是否正常？","这是正常现象，属于警告而非错误。当日志显示 'OpenCV: FFMPEG: tag 0x44495658\u002F'XVID' is not supported...' 时，OpenCV 会自动回退（fallback）使用 'mp4v' 编码标签继续处理。只要程序没有随后崩溃，该警告可以忽略，不会影响最终的轨迹跟踪结果。",[]]