Create app.py
Browse files
app.py
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import gradio as gr
|
| 2 |
+
|
| 3 |
+
# --- 1. 內容資料庫 ---
|
| 4 |
+
# 將增進羽球實力的知識結構化
|
| 5 |
+
knowledge_base = {
|
| 6 |
+
"基本功: 握拍 (Grip)": "**訓練建議:**\n1. **鏡子練習:** 對著鏡子練習正、反手握拍的轉換,確保動作標準。\n2. **無球揮拍:** 每天進行至少50次的正、反手揮拍轉換練習,直到形成肌肉記憶。\n3. **放鬆原則:** 確保在非擊球狀態時,手指是放鬆的,只在擊球瞬間才發力握緊。",
|
| 7 |
+
"基本功: 步法 (Footwork)": "**訓練建議:**\n1. **米字步訓練:** 以場地中心為原點,向八個方向進行步法移動練習,這是羽球步法的核心。\n2. **跳繩:** 每天跳繩10-15分鐘,可以極大地提升腳踝力量和腳步的輕盈度。\n3. **啟動步練習:** 模仿對手擊球的瞬間,練習一個小墊步(split-step),這能讓你更快地向任何方向啟動。",
|
| 8 |
+
"技術: 高遠球 (Clear)": "**訓練建議:**\n1. **高點擊球:** 找一個夥伴對練,專注於在你的最高擊球點將球擊出,確保球的飛行弧線夠高夠遠,能壓到對手底線。\n2. **完整揮拍:** 確保你的揮拍動作是完整的「引拍 -> 擊球 -> 隨揮」,利用身體轉動的力量,而非單純的手臂力量。",
|
| 9 |
+
"技術: 殺球 (Smash)": "**訓練建議:**\n1. **定點殺球:** 讓夥伴從前場餵球給你,你專注於在後場同一個位置進行殺球練習,追求力量和準確度。\n2. **核心力量訓練:** 平板支撐(Plank)、仰臥起坐等核心訓練,能顯著提升你的殺球力量和身體穩定性。\n3. **手腕發力:** 在擊球的瞬間,要有手腕向前「甩鞭」的動作,這是殺球力量的關鍵來源。",
|
| 10 |
+
"技術: 網前球 (Net Play)": "**訓練建議:**\n1. **對牆搓球:** 距離牆壁約1-1.5公尺,練習輕柔地將球搓向牆壁,感受手指對力量和旋轉的細微控制。\n2. **網前對練:** 和夥伴在網前進行多拍的搓、勾、放練習,目標是比誰的球更貼網、質量更高。",
|
| 11 |
+
"戰術: 拉吊結合 (Clear & Drop)": "**訓練建議:**\n1. **一高一吊練習:** 和夥伴進行對練,你打一拍高遠球到他後場,他回高遠球給你,你接著打一拍吊球到他前場,如此循環。\n2. **觀察對手重心:** 在打出高遠球後,立刻觀察對手的回位速度和重心。如果他回位慢,下一拍果斷吊網前。",
|
| 12 |
+
"體能: 敏捷性與爆發力 (Agility & Explosiveness)": "**訓練建議:**\n1. **四角折返跑:** 在半場的四個角落放置羽球筒,進行快速的折返跑觸碰練習,這能模擬場上的快速移動。\n2. **蛙跳/深蹲跳:** 每週進行2-3組的蛙跳或深蹲跳練習,能有效提升腿部爆發力。",
|
| 13 |
+
"心態: 抗壓性 (Resilience)": "**訓練建議:**\n1. **模擬壓力局:** 在練習賽中,刻意設定一個落後的比分開始,例如從15:20開始打,訓練自己在壓力下追分的能力。\n2. **呼吸練習:** 在分數間的短暫休息時,進行深呼吸,幫助自己冷靜下來,重新專注於下一分。"
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
# --- 2. Gradio 介面函式 ---
|
| 17 |
+
def get_training_advice(skill_area):
|
| 18 |
+
"""根據選擇的技能領域返回建議"""
|
| 19 |
+
return knowledge_base.get(skill_area, "請從下拉選單中選擇一個項目。")
|
| 20 |
+
|
| 21 |
+
# --- 3. 建立 Gradio Blocks 介面 ---
|
| 22 |
+
with gr.Blocks(theme=gr.themes.Soft(), title="羽球實力增進指南") as demo:
|
| 23 |
+
gr.Markdown(
|
| 24 |
+
"""
|
| 25 |
+
# 🏸 羽球實力增進互動指南
|
| 26 |
+
這是一個幫助你全面提升羽球實力的互動教學。
|
| 27 |
+
下方不僅有系統性的知識講解,還有一個**互動式訓練建議產生器**,試試看吧!
|
| 28 |
+
"""
|
| 29 |
+
)
|
| 30 |
+
|
| 31 |
+
with gr.Accordion("點擊展開:增進羽球實力的五大核心面向", open=False):
|
| 32 |
+
gr.Markdown(
|
| 33 |
+
"""
|
| 34 |
+
### 1. 基本功 (Fundamentals)
|
| 35 |
+
* **握拍 (Grip)**:學習並熟練正手和反手握拍法,並在兩者之間快速、自然地切換。
|
| 36 |
+
* **發球 (Serving)**:精通高遠球和短球,從一開始就掌握主動權。
|
| 37 |
+
* **步法 (Footwork)**:有效率的步法(如:啟動步、交叉步、併步)能讓你以最快速度到達擊球點。
|
| 38 |
+
|
| 39 |
+
### 2. 技術 (Techniques)
|
| 40 |
+
* **高遠球 (Clear)**:將球打到對手後場底線,爭取時間。
|
| 41 |
+
* **殺球 (Smash)**:最具攻擊性的擊球。
|
| 42 |
+
* **切球/吊球 (Drop Shot)**:輕輕地將球打過網,落在對手的前場。
|
| 43 |
+
* **網前球 (Net Play)**:在網前進行的細膩技術,如搓球、勾對角。
|
| 44 |
+
* **平抽擋 (Drive)**:快速、平直地回擊。
|
| 45 |
+
|
| 46 |
+
### 3. 戰術 (Tactics)
|
| 47 |
+
* **拉吊結合 (Clear & Drop Combination)**:調動對手前後跑動。
|
| 48 |
+
* **殺上網 (Smash & Rush to the Net)**:後場攻擊後迅速跟進上網。
|
| 49 |
+
* **控制四個點 (Controlling the Four Corners)**:最大限度地調動對手。
|
| 50 |
+
* **觀察對手 (Observe Your Opponent)**:針對性地攻擊對手弱點。
|
| 51 |
+
|
| 52 |
+
### 4. 體能 (Physical Fitness)
|
| 53 |
+
* **肌力 (Strength)**:核心、腿部和手腕的力量。
|
| 54 |
+
* **耐力 (Stamina)**:確保你能打滿三局。
|
| 55 |
+
* **敏捷性與爆發力 (Agility & Explosiveness)**:快速啟動和變向的能力。
|
| 56 |
+
* **柔韌性 (Flexibility)**:擴大防守範圍,減少運動傷害。
|
| 57 |
+
|
| 58 |
+
### 5. 心態 (Mentality)
|
| 59 |
+
* **專注力 (Concentration)**:專注於每一分。
|
| 60 |
+
* **抗壓性 (Resilience)**:落後時也能保持冷靜。
|
| 61 |
+
* **自信心 (Confidence)**:相信自己的訓練和能力。
|
| 62 |
+
"""
|
| 63 |
+
)
|
| 64 |
+
|
| 65 |
+
gr.Markdown("---")
|
| 66 |
+
gr.Markdown("## 互動式訓練建議產生器")
|
| 67 |
+
gr.Markdown("從下面的選單中選擇你最想加強的項目,我會給你具體的訓練建議!")
|
| 68 |
+
|
| 69 |
+
skill_dropdown = gr.Dropdown(
|
| 70 |
+
choices=list(knowledge_base.keys()),
|
| 71 |
+
label="我想加強我的...",
|
| 72 |
+
value="基本功: 步法 (Footwork)" # 預設值
|
| 73 |
+
)
|
| 74 |
+
|
| 75 |
+
advice_output = gr.Markdown(label="你的專屬訓練建議")
|
| 76 |
+
|
| 77 |
+
skill_dropdown.change(fn=get_training_advice, inputs=skill_dropdown, outputs=advice_output)
|
| 78 |
+
|
| 79 |
+
# 頁面載入時觸發一次,顯示預設值的建議
|
| 80 |
+
demo.load(fn=get_training_advice, inputs=skill_dropdown, outputs=advice_output)
|
| 81 |
+
|
| 82 |
+
|
| 83 |
+
# --- 4. 啟動應用 ---
|
| 84 |
+
if __name__ == "__main__":
|
| 85 |
+
demo.launch()
|