Skip to content

Latest commit

 

History

History
287 lines (213 loc) · 7.06 KB

File metadata and controls

287 lines (213 loc) · 7.06 KB

🚀 效能優化測試指南

📋 已完成的優化

1. CPU 優化(目標:120% → <30%)

示波器更新頻率降低

  • 主視圖:20 FPS → 5 FPS(-75%)
  • 個別通道:10 FPS → 1 FPS(-90%)

通道輪流更新

  • 每次只更新 2/8 個通道(-75% 工作量)
  • 不再每次更新全部 8 個通道

繪圖優化

  • 加入 skipFiniteCheck=True(跳過數值檢查)
  • 加入 connect='finite'(忽略無限值)
  • 啟用 setClipToView(True)(只繪製可見範圍)
  • 啟用 setDownsampling(mode='peak')(降採樣)

2. 記憶體優化(目標:4147MB → <500MB)

攝影機解析度降低

  • 從 480x360 → 320x240(-56% 像素)
  • 預覽視窗同步縮小

記憶體釋放機制

  • 主動釋放舊幀:del self._cached_frame
  • 釋放 RGB 轉換後的幀:del frame_rgb
  • 釋放舊 landmarks:del self._cached_landmarks
  • 停止錄影時強制垃圾回收:gc.collect()

快取管理

  • 明確釋放不再使用的影像資料
  • 避免累積大量未使用的物件

3. GPU 優化(保持)

Metal 後端(已在前次優化完成)

  • PyQt6 Metal 渲染
  • AVFoundation 硬體加速
  • MediaPipe GPU 加速

🧪 測試步驟

準備工作

cd /Users/akaihuangm1/Desktop/handProject_1103
source .venv/bin/activate

🎯 完整效能測試(推薦)

使用三階段分析工具:

# 1. 終端 1:啟動程式
python main.py

# 2. 終端 2:執行效能分析(需要 sudo)
sudo python performance_profiler.py

# 3. 按照提示操作(每階段 15 秒):
#    - 階段一:程式啟動後按 Enter(未連接)
#    - 階段二:連接 EMG 後按 Enter(已連接)
#    - 階段三:開啟攝影機後按 Enter(攝影機)
#    - 自動生成報告在 performance_logs/ 目錄

測試 1:閒置狀態(未連接)

預期目標:

  • CPU: <5%
  • 記憶體: <400MB
  • GPU: <10%

測試方法: 自動包含在完整效能測試中(階段一)

檢查項目:

  • CPU 是否 <5%?
  • 記憶體是否穩定?
  • UI 反應是否流暢?

測試 2:連接裝置(接收 EMG)

預期目標:

  • CPU: <30%(從 122.7% 降至 <30%)⭐ 關鍵指標
  • 記憶體: <400MB
  • GPU: 20-30%

測試方法: 自動包含在完整效能測試中(階段二)

  1. 在程式中點擊 "Scan" 掃描裝置
  2. 選擇 EMG 裝置並點擊 "Connect"
  3. 等待基線校準完成(約 10 秒)
  4. 回到分析工具按 Enter 開始監控

檢查項目:

  • CPU 是否 <30%?(優化前 122.7%)
  • 示波器是否流暢更新?(雖然只有 5 FPS)
  • 記憶體是否穩定不增長?
  • 個別通道是否正常顯示?(輪流更新)

測試 3:開啟攝影機(完整運作)

預期目標:

  • CPU: <50%(從 136.9% 降至 <50%)⭐ 關鍵指標
  • 記憶體: <500MB(從 4147MB 降至 <500MB)⭐⭐ 最關鍵
  • GPU: 20-40%

測試方法: 自動包含在完整效能測試中(階段三)

  1. 保持 EMG 連接狀態
  2. 點擊 "Start Recording" 開始錄影
  3. 攝影機預覽視窗會自動開啟(320x240)
  4. 回到分析工具按 Enter 開始監控
  5. 工具會監控 15 秒
  6. 觀察記憶體是否持續增長

檢查項目:

  • CPU 是否 <50%?(優化前 136.9%)
  • 記憶體是否 <500MB?(優化前 4147MB)
  • 記憶體是否穩定不持續增長?(最重要)
  • 攝影機預覽是否流暢?(15fps)
  • MediaPipe 手部追蹤是否正常?
  • 示波器和攝影機是否同時運作無卡頓?

測試 4:停止錄影(記憶體釋放)

預期目標:

  • 記憶體應該回到 <400MB
  • 無殘留記憶體洩漏

測試方法:

  1. 點擊 "Stop Recording" 停止錄影
  2. 等待 2-3 秒(垃圾回收)
  3. 檢查記憶體是否下降

檢查項目:

  • 記憶體是否明顯下降?
  • 攝影機視窗是否關閉?
  • 檔案是否正確儲存?

測試 5:重複錄影(耐久測試)

預期目標:

  • 連續錄影 3 次後記憶體仍 <600MB
  • 無累積性記憶體洩漏

測試方法:

  1. 開始錄影 → 錄 30 秒 → 停止
  2. 記錄此時記憶體使用量
  3. 重複步驟 1-2 共 3 次

檢查項目:

  • 第 1 次錄影:記憶體 _____ MB
  • 第 2 次錄影:記憶體 _____ MB
  • 第 3 次錄影:記憶體 _____ MB
  • 記憶體是否線性增長?(不應該)

📊 效能比較表

請在測試後填寫實際數據:

階段 優化前 CPU 優化後 CPU 優化前記憶體 優化後記憶體
未連接 0.7% _____ % 342 MB _____ MB
已連接 122.7% 🔥 _____ % 350 MB _____ MB
攝影機 136.9% 🔥 _____ % 4147 MB 💥 _____ MB

🎯 成功標準

必須達成(優先級 1)

  • CPU(已連接):< 30%(優化前 122.7%)
  • 記憶體(攝影機):< 500MB(優化前 4147MB)
  • 記憶體不洩漏:重複錄影後 < 600MB

應該達成(優先級 2)

  • CPU(攝影機):< 50%(優化前 136.9%)
  • 示波器流暢(5 FPS 可接受)
  • 攝影機預覽流暢(15 FPS)

良好表現(優先級 3)

  • GPU 使用率 > 30%
  • 無明顯卡頓或延遲
  • 長時間運行穩定

⚠️ 可能遇到的問題

問題 1:CPU 仍然很高(>50%)

可能原因:

  • pyqtgraph 未正確應用優化設定
  • 其他背景程序佔用 CPU

解決方法:

# 檢查 pyqtgraph 配置
import pyqtgraph as pg
print(pg.getConfigOptions())

問題 2:記憶體仍然暴增

可能原因:

  • 垃圾回收未生效
  • OpenCV 內部緩衝區未釋放

解決方法:

# 強制垃圾回收(測試用)
import gc
gc.collect()

問題 3:示波器不更新

可能原因:

  • 5 FPS 太慢(可調整為 10 FPS)

解決方法:

# 修改 main_window.py line 206
self._plot_timer.setInterval(100)  # 改為 10 FPS

📝 測試報告範本

測試日期:_____________
測試人員:_____________

測試結果總結

CPU 優化效果:

  • 未連接:_____ %(目標 <5%)
  • 已連接:_____ %(目標 <30%,優化前 122.7%)
  • 攝影機:_____ %(目標 <50%,優化前 136.9%)

記憶體優化效果:

  • 未連接:_____ MB(目標 <400MB)
  • 已連接:_____ MB(目標 <400MB)
  • 攝影機:_____ MB(目標 <500MB,優化前 4147MB)

使用體驗:

  • 示波器流暢度:⭐⭐⭐⭐⭐ / 5
  • 攝影機流暢度:⭐⭐⭐⭐⭐ / 5
  • 整體穩定性:⭐⭐⭐⭐⭐ / 5

問題與建議:




是否通過測試: ☑️ 通過 / ☐ 未通過


🚀 下一步

如果測試通過

  1. 更新 PERFORMANCE_MACOS.md 文檔
  2. 提交優化代碼到 GitHub
  3. 關閉相關 issue

如果測試未通過

  1. 記錄具體問題和數據
  2. 分析瓶頸所在
  3. 實施進一步優化
  4. 重新測試