Skip to content

NUKCProject/AIOT-Badminton-Speed-Labeler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

羽毛球球速標註工具 (Badminton Speed Tagging Tool)

這是一個基於 React.js 與 Vite 的 Web 工具,協助使用者分析羽毛球影片、標註擊球點與落點,並自動計算球速。支援影片上傳、標記、球速計算、CSV 匯出等功能,適合教練、選手或愛好者進行技術分析。

系統截圖

系統截圖


目錄


功能特色

  • 影片上傳與播放:支援 mp4、mov 等常見格式,具備播放/暫停、逐幀/逐秒快進快退、播放速度調整。
  • 視覺化標記:可於影片畫面直接標記擊球點與落點,並即時顯示於畫面上。
  • 自動球速計算:根據標記點的像素距離與時間差,自動計算球速(支援自訂像素與公尺轉換比例)。
  • CSV 數據匯出:可將所有標記點座標、時間戳、計算球速等資料匯出為 CSV 檔案。
  • CSV 匯入:可從 CSV 檔案匯入標記與球速資料,方便資料備份與跨裝置編輯。
  • 影片拍攝時間解析:自動解析影片元數據中的拍攝時間,並應用於匯出資料。
  • 快捷鍵支援:提升操作效率。
  • 標籤/檢視/編輯模式切換:可在標籤模式(新增標記)、檢視模式(僅瀏覽標記)、編輯模式(調整或刪除標記)間切換,提升操作彈性。

安裝與啟動

  1. 安裝 Node.js 與 npm(建議 Node.js 18+)。
  2. 下載本專案後,於專案根目錄執行:
    npm install
  3. 啟動開發伺服器:
    npm run dev
  4. 預設瀏覽器將自動開啟,或手動前往 http://localhost:5173

如何使用

  1. 上傳影片:點擊「選擇影片」按鈕,上傳羽毛球影片。
  2. 設定 PIXEL_TO_METER 比例:於右上角調整「PIXEL_TO_METER」數值(1 像素等於多少公尺),建議以場地已知物體(如底線長度 13.4 公尺)作為參考。
  3. 切換模式
    • 透過介面上的模式切換按鈕,可在「標籤模式」(可新增標記)、「檢視模式」(僅瀏覽標記,避免誤操作)、「編輯模式」(可調整或刪除標記)間切換。
    • 選擇合適模式以符合不同操作需求。
  4. 標記擊球點與落點
    • 播放影片時,點擊畫面新增標記。
    • 擊球點:球拍與球接觸時點擊。
    • 落點:羽球落地時點擊。
    • 每組標記(擊球點+落點)自動計算球速,並顯示於下方表格。
    • 支援快捷鍵:
      • 空白鍵:播放/暫停
      • 左方向鍵:後退一幀(連按為一秒)
      • 右方向鍵:前進一幀(連按為一秒)
      • A:降低播放速度
      • D:提高播放速度
  5. 查看與編輯數據
    • 下方表格列出所有標記及球速。
    • 點擊表格列可跳轉至對應擊球點。
    • 可刪除與重新標註不正確的標記。
  6. 匯出 CSV
    • 點擊「匯出 CSV」按鈕,下載所有標記與球速資料。
    • CSV 包含:擊球點/落點 X/Y 座標、影片時間戳、實際時間戳、球速。
  7. 匯入 CSV
    • 點擊「匯入 CSV」按鈕,選擇先前匯出的標記與球速資料檔案。
    • 匯入後,標記與球速資料會自動載入並顯示於表格。

專案結構

.gitignore             # 忽略檔案設定
index.html             # 入口 HTML
package.json           # 專案依賴與腳本
vite.config.js         # Vite 設定
public/
    mediainfo.wasm     # 影片元數據解析用 WASM
src/
    App.jsx, App.css   # 主應用程式與樣式
    main.jsx           # React 入口
    index.css          # 全域樣式
    components/        # React 元件
        ExportCSVButton.jsx   # 匯出 CSV 按鈕
        PairsTable.jsx        # 標記與球速資料表格
        PixelToMeterInput.jsx # PIXEL_TO_METER 輸入元件
        StatusBar.jsx         # 狀態列(顯示模式/比例等)
        VideoPlayer.jsx       # 影片播放器主元件
        video/                # 影片相關子元件
            PlayPauseButton.jsx   # 播放/暫停按鈕
            TimeDisplay.jsx       # 時間顯示
            VideoControls.jsx     # 影片控制列
            VideoMarkers.jsx      # 標記點渲染
            VideoOverlay.jsx      # 影片上方互動層
    utils/               # 工具函式
        speedCalc.js     # 球速計算邏輯

技術細節

  • 前端框架:React.js (Vite)
  • UI 框架:Material-UI (MUI)
  • 影片處理:HTML5 <video> 元素,mediainfo.js 解析影片元數據
  • 數據處理papaparse 進行 CSV 匯出
  • 主要自訂模組
    • src/utils/speedCalc.js:計算球速

常見問題

  • Q:影片無法上傳或播放?
    • 請確認影片格式支援(如 mp4、mov 等),並檢查瀏覽器支援度。
  • Q:球速計算不準?
    • 請正確設定 PIXEL_TO_METER 比例,建議以場地已知長度作為參考。
  • Q:影片拍攝時間無法解析?
    • 部分影片可能缺乏完整元數據,請確認影片來源。

貢獻指南

歡迎任何形式的貢獻!

  • 發現 Bug 或有建議,請提出 Issue。
  • 歡迎提交 Pull Request,請遵循專案程式風格。
  • 如需協助,請於 GitHub Issue 留言。

聯絡方式

如需協助,請於 GitHub Issue 留言。

授權

本專案採用 MIT License。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors