Communitygithub.com

zakezhang/網球影片私人教練

分析網球練習影片,產出教練報告。偵測每次揮拍,區分正手拍與反手拍,選出最佳與最差擊球,並在球員身上繪製揮拍路徑的註解慢動作片段,計算球觸網或出界(當球可見時),檢查膝蓋與腳步,與過往練習比較,並撰寫具體的下次練習計畫。

網球影片私人教練 是什麼?

此技能可將業餘球員的練習影片轉化為可執行的檢討報告,專為初級到中級球員設計,適用於對牆、發球機、教練或搭檔練習等場景。它能夠偵測每一次揮拍,識別正手拍與反手拍(包括單手與雙手反拍),並自動選出最佳與最差的擊球範例。針對每個範例,它會生成帶註解的慢動作片段,在球員身上繪製揮拍路徑,並在關鍵時刻(如引拍頂點、擊球點)凍結畫面並標示問題。報告會分析技術指標,如膝蓋彎曲角度、擊球高度、是否單腳落地等,並透過聲音特徵定位觸球瞬間以輔助判斷。支援的平台需能運行 Python 3、ffmpeg 及相關套件。此技能的獨特之處在於它不僅提供分析,還會結合歷史紀錄進行比較,並給出具體的練習計畫與糾正方法,協助球員有方向地進步。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/zakezhang/tennis-video-review-public/tree/main/skills/tennis-video-private-coach

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

網球影片私人教練 是做什麼的?

將業餘球員的練習影片轉化為可執行的檢討:揮拍的哪個環節出了問題、哪些擊球證明了這一點、以及下次該練習什麼。專為初級到中級球員設計,適用於對牆、發球機、教練餵球或搭檔對練。

需求:能執行 Python 3 與 ffmpeg,並安裝 pip 套件(ultralytics, opencv-python, numpy, scipy, Pillow)的環境。有 GPU 更好,但非必要。

0. 事先提問(僅限你尚不清楚的部分)

  1. 畫面中哪個人是球員:衣服顏色、頭髮、位置。教練、搭檔及隔壁場地的人常會入鏡。
  2. 慣用手,以及反手拍是單手還是雙手(或正在學習兩者)。
  3. 程度與目標:他們打了多久,以及想達到什麼目標(例如:「年底前能來回對打並打一盤比賽」)。
  4. 場地設定:練習牆 / 發球機 / 教練餵球 / 對練;室內或室外。
  5. 攝影機:後方、側面或正面;手機高度;幀率。
  6. 傷勢:近期膝蓋、肩膀、手肘或背部有無痠痛。若有,需特別關注腳步與落地。
  7. 他們最想解決的一個問題(例如:「很多球飛太遠」或「我的擊球點不穩定」)。報告必須在最前面回答這個問題。
  8. 先前的報告(如有),以便比較。

1. 報告必須達成的目標

  • 開門見山列出結論。 用一句話說明最大的問題與最大的進步,接著提供細節。批評必須具體且有證據支持;避免只稱讚。若先前的評論有誤,應明確指出。
  • 每項主張都要有影片佐證。 每個案例都需附上附註解的慢動作片段,並繪製在球員的真實影片上,而非火柴人動畫。
  • 預設為 4 類別 × 3 擊球:最佳正手拍、最差正手拍、最佳反手拍、最差反手拍(共 12 個片段)。每個類別需有一個三欄比較表格,以及一句說明這三球共通點的話。若某類別可用擊球少於 3 球,則應說明找到了幾球。
  • 將單手反拍和雙手反拍分開處理。 若球員兩種都練,單手反拍應有獨立章節,且不納入雙手反拍的統計。
  • 指出崩壞的階段:引拍 / 拍頭下放 / 擊球點 / 隨揮方向 / 腳步 / 準備時機 / 處理高球 / 正反拍決策。
  • 務必檢查膝蓋與腳步:空中擊球、單腳落地、在鎖死的直腿上旋轉。
  • 說明資料的限制:樣本數、多少擊球無法判讀、攝影角度偏差。若某事物無法看見,應直接說明,而非猜測數字。
  • 以可遵循的計畫作結:提供 2–4 項練習(包含次數或分鐘數),以及進入下一階段的條件。

2. 流程

2.1 轉檔並提取音訊

  • 4K HEVC 手機影片檔案龐大。製作一個 960 寬的 H.264 分析用副本: ffmpeg -i IN.MOV -vf scale=960:-2 -r 30 -an -c:v libx264 -preset veryfast -crf 24 p.mp4 (有些手機錄影為 29.97 fps;強制設為 30 可簡化時間計算。)
  • 另外提取音訊以定位觸球點: ffmpeg -i IN.MOV -vn -ac 1 -ar 22050 a.wav
  • 將長影片切成 4–5 分鐘的段落處理,避免超時。若有多個短片段,先從每個片段抓取一幀製作概覽表,判斷哪些是可用(球員背後角度),哪些太遠(僅用於觀察技術)。
  • 針對練習牆的練習,也剪裁出球網線附近的放大「牆面」副本,用於判斷觸網 / 出界。

2.2 姿勢估計

  • 使用 Ultralytics YOLO 姿勢模型(yolo11n-pose.pt;更高精度可用 yolo11m-pose.pt)。室內環境,每 4 幀取樣一次,imgsz 640,conf 0.3 已足夠。室外人物較小且較多時,應每 2 幀取樣,imgsz 960,conf 0.25。
  • 追蹤正確的人物。 畫面中只有一人時,取最大邊界框。若有教練或其他人在場,則根據衣物特徵對每個偵測結果評分:軀幹多邊形(肩膀 + 臀部)內的中位數 HSV 亮度與飽和度,以及臀部到膝蓋區域的褲子顏色。對偏離前一幀較遠的偵測結果增加懲罰,以避免人物切換。
  • 根據影像 x 座標判斷左右,而非模型標記的左右。從背後看,球員的右側即是影像的右側。

2.3 找出每次揮拍

  • 揮拍是手腕速度的峰值:移動較多的那隻手腕的逐幀位移量,除以邊界框高度,經 2 個樣本平滑後,門檻值約為 0.16(適用於每 4 幀取樣;取樣密度更高時需按比例縮小)。
  • 峰值間隔需至少 1.6 秒。 1.0 秒的間隔會將隨揮後的恢復動作誤判為第二次揮拍。正常節奏約每 3–4 秒一次揮拍。
  • 正手拍或反手拍:在峰值前 1.1 秒到 0.25 秒的時間區間內,雙手的中點位於臀部中線的哪一側。位於慣用手側即為正手拍。部分判斷可能出錯;對於你要特別呈現的擊球,應逐幀確認。
  • 將以下所有指標錨定在手腕速度峰值(稱為 tp),以便各次練習能相互比較。

2.4 從聲音定位觸球

  • 高通濾波 1500 Hz;計算 110 個樣本視窗的能量包絡;找出比周圍 401 個視窗中位數高至少 10 dB 且間隔至少 50 個視窗的峰值。
  • 轉換為秒數:視窗索引 × 110 / 22050。使用 乘以 0.005 作為快捷方式,每 4 分鐘會漂移約半秒,破壞長影片後半部的準確性。
  • 練習牆:在 [tp−0.1, tp+0.55] 秒範圍內,取比背景噪音高至少 15 dB 的最大峰值,通常在 tp 後 0.2–0.35 秒。球撞擊牆壁的聲音(約觸球後 0.45 秒)也很大;不要選它。
  • 室外:教練的擊球或其他場地的噪音會造成干擾。搜尋 [tp−0.45, tp+0.25] 秒範圍;若無符合條件的,則使用 tp。
  • 對於最終會放入片段的每個擊球,務必透過觀察影格來確認真實的觸球影格。

2.5 偵測單手反手拍(若球員正在學習)

  • 在反手拍中,取 tp 後 0.7 秒內兩手腕之間的最大距離(除以軀幹長度)。雙手反拍在完成動作時雙手會保持在一起(通常小於 1.5);單手反拍的非持拍手會向後打開(通常為 2.0–2.5)。差距很明顯;門檻值設為 1.95 左右即可。
  • 近距離攝影角度會產生誤報;務必目視確認每個候選者。
  • 針對每個單手反拍,記錄:引拍時持拍手是否高過頭、引拍是否過晚(像準備打雙手反拍,最後一刻才拉起)、擊球時手臂是否伸直、隨揮高度以及結果。
  • 單手反拍檢查清單(每項包含:正確狀態 / 本次練習 / 判定):非持拍手放在拍頸上的轉身、引拍高度在胸部與肩膀之間且拍頭指向後方、拍頭降低後由低向高揮擊、擊球點在前方且手臂伸直、非持拍手向後打開、完成動作且胸部不要過早轉正、膝蓋彎曲並跨步。握拍從背後無法看清;建議球員向教練確認。

2.6 觸網 / 出界計數(僅在球可見時)

  • 練習牆:在放大的牆面影片中標記球網線。針對每次擊球,製作一張圖塊:觸球後 30 幀內的移動黃色區塊(依時間從紅到綠繪製),以及球網線上方遮擋物(窗簾等)的運動(用另一種顏色)。目視判斷每個圖塊:遮擋物移動或球擊中高於球網線的位置 = 界內;球擊中板子且遮擋物不動 = 觸網;被球員擋住 = 無法判讀。全自動判斷與人類的吻合度僅約 60%,因此僅作為提示使用。
  • 取樣:均勻地從整場練習中選取 100 次擊球進行判斷,排除無法判讀的球,並分別回報正手拍 / 雙手反拍 / 單手反拍的數據。然後檢視剩餘中最可疑的 20 球,確認錯誤是否集中在某個時段(通常在疲勞出現後)。
  • 室外:背景有樹木搖動或多人走動時,基於顏色與運動的球體偵測大多會失敗。請不要回報百分比。在報告中說明原因,改以技術好壞來挑選最佳 / 最差擊球,並提供能讓計數得以實現的攝影建議。

2.7 技術指標(對每次揮拍測量)

指標計算方式意義
正手拍手高於鼻尖在 [tp−1.1, tp−0.25] 區間內,持拍手腕高於鼻尖的影格比例引拍過高、揮拍軌跡過大
雙手高於肩膀相同區間內,雙手腕高於肩部中心的影格比例反手拍持拍位置過高
最大膝蓋彎曲角度在 [tp−0.6, tp+0.3] 區間內,前側腿的髖-膝-踝最小角度(所有揮拍的中位數)腿部過直(從後方拍攝會低估前彎角度;僅與自己比較)
站位寬度在 tp 時刻,腳踝水平距離 ÷ 軀幹長度窄站位常伴隨跳躍
著地並伸直tp 後 0.7 秒內,一個腳踝移動少於 0.4 個軀幹長度,且該膝蓋角度大於 155°膝蓋的扭轉負荷(常見於反手拍轉體時)
擊球高度在 tp 前 0.07–0.2 秒,持拍手位置介於臀部 (0) 與肩膀 (1) 之間了解有多少球是高的,以及球員是否調整位置
跳躍 / 單腳落地在你逐幀檢視的擊球中目視計算目前尚無可靠的自動化指標
  • 對於長時間練習,應分別回報前半段與後半段的數據,以觀察疲勞帶來的影響。
  • 若攝影機、場地或方法有所改變,應重新以新方法測量舊影片,或明確說明數字無法比較。

2.8 選出 3 個最佳與 3 個最差擊球

  • 最佳:結果好(順利過網且落地深)且揮拍完整(引拍到位、拍頭低於球、完整收拍、雙腳著地)。應平均分佈於整場練習中。
  • 最差:觸網、打高射砲或明顯失誤;若不夠多,則選擇技術缺陷最明顯的擊球。優先選擇能顯示不同成因,或共同證明一個共同成因的擊球。
  • 先從結果圖塊中篩選,再透過逐幀的球員圖表(觸球前 0.9 秒到觸球後 0.5 秒)確認成因。挑選最差反手拍時,務必排除單手反拍。

2.9 生成附註解的慢動作片段

  • 從原始影片中剪取約 3 秒(從觸球前 1.1–1.5 秒開始),將畫面裁切至大約 16:10 比例且球員約占畫框高度 60%,縮放至 1280 寬。
  • 對每一幀執行姿勢估計。手動選擇四個影格:引拍頂點、擊球點、以及繪製路徑的起點與終點(排除準備姿勢與恢復動作)。自動偵測的擊球影格常出錯;務必目視檢查。
  • 片段結構:
    1. 以原速播放一次。
    2. 以四分之一速度播放,逐幀繪製持拍手路徑(正手拍 = 持拍手腕;雙手反拍 = 雙手腕中點;單手反拍 = 觸球前為中點,觸球後為持拍手腕),顏色從橘色漸變至青色,並在底部顯示每個階段的說明文字。
    3. 在引拍頂點處定格約 3 秒,圈選該點(綠色 = 正確,紅色 = 問題)並附上一句短標題。
    4. 在擊球點處定格約 3 秒:在擊球點(自動位置常錯過球,請手動設定)標記白色圓圈,在前側膝蓋處標記黃色圓圈及其角度(單手反拍因側面鏡頭腿部重疊,可略過)。
    5. 在完整路徑上定格。 在最差的片段中,疊加同一類型的最佳擊球路徑(從路徑起點到擊球點),按軀幹長度縮放並在肩部中心對齊,以帶黑色外框的綠色虛線動畫呈現,並附上一句修正建議。
  • 編碼為 H.264,yuv420p,faststart,960 寬,每個片段約 1–2.5 MB。從每個片段中提取 4 幀製作接觸圖表,以確認說明文字未遮擋任何東西,且圓圈落在正確位置。
  • 避免在說明文字中使用 ✓ 和 ✗;許多東亞字體缺少這些符號,會顯示為方框。

3. 報告結構

產出一個 HTML 頁面(或使用者要求的格式),依序包含以下內容:

  1. 評語:直接回答球員的問題;最大的進步、最大的問題、關鍵數據;對先前評審的回饋。其下方為數據條(按擊球類型區分的揮拍數、取樣的觸網 / 出界率或「未計數」並附原因、一或兩項關鍵指標)。
  2. 成因分析:將問題歸納為 2–3 個成因,每個成因附上一個帶時間戳的範例。
  3. 最佳 vs 最差:4 個分組,每組 3 個片段、一個三欄比較表(包含引拍、下放、擊球、收拍、腳步、膝蓋角度)以及一句關於共通模式的說明。
  4. 與上次比較:以表格及並排片段說明最佳與最差擊球的變化。
  5. 單手反手拍(若有練習):統計數據、檢查清單、3 個好與 3 個差的片段、逐球列表,以及是否建議繼續訓練此技術。
  6. 膝蓋與腳步:指標表與風險分類,分為「優先處理 / 觀察 / 改善中」,每項附修正建議。並明確說明這並非醫療建議,若出現腫脹、卡住、無力或持續一週以上的痠痛,建議諮詢運動醫學醫師。
  7. 下次練習內容:見第 5 節。
  8. 攝影建議(若影片內容有缺漏)。
  9. 頁尾:資料來源、樣本數、測量定義、攝影機限制。

可選設計方向:網球色系,以硬地球場藍色為主色,僅關鍵數據與重點使用網球黃色,「好」用草地綠色,「問題」用紅土紅色。使用壓縮數字字型以營造記分板風格。確保在淺色與深色模式下都可閱讀,且在手機上無需水平滾動。

4. 常見問題與修正

先用以下表格對你所見進行分類,再用具體擊球證明。

症狀常見成因在影片中的表現修正方法
正手拍掛網,向下刷引拍高過頭,揮拍軌跡過大,拍頭來不及下放持拍手高於鼻尖

…(原文截斷,翻譯基於提供內容)

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相關技能