--- title: TTSAM emoji: 🏢 colorFrom: blue colorTo: gray sdk: gradio sdk_version: 5.49.1 app_file: app.py pinned: false license: gpl-3.0 --- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference ## 專案簡介 TTSAM(Taiwan Transformer-based Shake Alert Model)是一個以 Transformer 為核心的地震預警/震度推估原型,提供互動式 GUI 用於載入歷史事件、查看波形、並在地圖上比對「預測震度」與「實際震度」。 ## 主要功能 - 互動式 GUI(`app.py`): - 選擇歷史事件、時間窗、震央座標並載入波形。 - 顯示輸入測站分布與波形(按震央距離排序)。 - 執行模型推論並在 Folium 地圖上顯示預測震度(高度固定 800px)。 - 若有實際震度圖,支援與預測對照;若缺失則以空白占位並提示。 - 穩健的資料處理: - 取樣率固定 100 Hz;模型輸入固定 30 秒(不足補 0)。 - 輸入測站最多 25 站;不足仍可推論並在 UI 顯示警告。 - N/E 分量缺失時以 Z 替代,並統計缺分站數於摘要。 - 目標點批次推論: - 目標測站每批最多 25 點,最後合併結果。 - 場址參數與降級: - Vs30 以 `SeisBlue/TaiwanVs30` 下載為主;查詢/下載失敗時使用預設值 600 m/s 並記錄 log。 - 易於擴充: - 不需改模型與核心流程即可新增事件與目標測站(更新資料檔即可)。 ## 設計思路 ### 🎯 Project Scope: 互動式教育展示 Demo 本專案為地震模型的 **展覽演示系統**,而非生產級的早期預警系統。因此設計理念強調: - **互動性優先**:使用者操作立即反饋視覺化結果(波形圖、地圖、統計) - **教育性為中心**:清晰的介面與步驟引導,讓非地震專業人士理解「波形 → 模型 → 預測」的流程 - **功能簡潔化**:無需追求完整覆蓋或極限性能;易於操作與理解最重要 - **預裝化設計**:所有關鍵資源(模型權重、Vs30 資料庫、波形、測站表)預裝於 HF Space,無需運行時下載或外部依賴 ### 📦 預裝架構 | 資源 | 位置 | 用途 | 預裝狀態 | |-----|-----|------|--------| | 模型權重 | `ttsam_trained_model_11.pt` | 推論核心 | ✅ 預裝 | | Vs30 資料庫 | `Vs30ofTaiwan.nc` | 場址參數 | ✅ 預裝 | | 波形資料 | `waveform/*.mseed` | 輸入資料 | ✅ 預裝(≥2 事件) | | 測站表 | `station/site_info.csv`, `station/eew_target.csv` | 元資料 | ✅ 預裝 | | 實際震度圖 | `intensity_map/YYYYMMDD.png` | 對照參考 | ✅ 預裝(可選) | ### 🛡️ 容錯設計 系統採用「**預裝優先,降級不中斷**」的容錯策略: - **預裝資源失敗**(模型損毀、測站表缺失)→ 應用無法啟動(提前發現問題) - **非關鍵資源失敗**(Vs30 初始化失敗、實際圖缺失)→ 使用預設值或占位,應用正常運作 - **單點資料缺失**(缺分量、測站不足)→ 使用替代值或降級處理,UI 明示警告,推論繼續 - **結果異常**(PGA 為 NaN)→ 記錄日誌,仍顯示於地圖 詳見 `spec/03-error-handling.md`。 ### 🧪 展覽前檢查清單 在部署至 HF Space 前: - [ ] 驗證所有預裝檔案完整(模型、Vs30、波形、測站表) - [ ] 本地測試啟動流程(無外部網路依賴) - [ ] 測試各事件的波形載入與預測 - [ ] 確認實際震度圖路徑與檔名正確 - [ ] 檢查日誌輸出(無錯誤訊息) 需求 - Python 3.10–3.11(建議) - 主要套件見 `requirements.txt` 安裝與執行 - 安裝相依套件 - `pip install -r requirements.txt` - 執行 GUI - `python app.py` - 或使用腳本:`./run_local.sh` 資料與資源 - 事件波形:`waveform/*.mseed` - 實際震度圖(選用):`intensity_map/YYYYMMDD.png` - 站台資料:`station/site_info.csv`, `station/eew_target.csv` ## 常見任務 - 新增事件: - 將 `.mseed` 放入 `waveform/`,並更新 `app.py` 的 `EARTHQUAKE_EVENTS`。 - 若有實際震度圖,放入 `intensity_map/`,檔名 `YYYYMMDD.png`。 - 新增目標測站: - 於 `station/eew_target.csv` 增補列,欄位:`station, latitude, longitude, elevation`。 - 新增輸入測站: - 於 `station/site_info.csv` 增補列,欄位:`Station, Latitude, Longitude, Elevation`;去除重複站名列。 ## 核心不變條件(摘要) **波形處理**: - 取樣率:100 Hz;輸入長度:30 秒(3000 點,不足補 0) - 分量順序:Z, N, E;N/E 缺失時以 Z 代替 **測站處理**: - 輸入測站:最多 25;不足允許但 UI 會顯示警告 - 目標測站批次:每批最多 25 點 - 缺分量統計:計數並在摘要中顯示 **資源管理**: - 地圖高度:Folium 地圖固定 800px - 實際震度圖缺失:以空白占位(不中止) - Vs30 查詢失敗:使用預設值 600 m/s **詳細規格**:見 `spec/00-overview.md` 與 `spec/01-data-contract.md`;**容錯與降級決策**見 `spec/03-error-handling.md`。 ## 專案結構 - `app.py`:Gradio GUI 與推論主流程 - `ttsam_realtime.py`:即時流程樣板(非 GUI 主流程) - `station/site_info.csv`:輸入測站表 - `station/eew_target.csv`:目標測站表 - `waveform/`:事件波形(.mseed) - `intensity_map/`:實際震度圖(可選) - `spec/`:模塊化規格檔案 - `00-overview.md`:核心目標、架構、設計原則 - `01-data-contract.md`:資料結構、必填欄位 - `02-processing-rules.md`:批次策略、處理規則 - `03-error-handling.md`:故障場景、容錯設計 - `04-extensions.md`:擴充空間、向後相容 - `.github/copilot-instructions.md`:生成程式碼指南 - `changelog.md`:變更摘要 ## 疑難排解(Troubleshooting) - Vs30 下載失敗或查無資料 - 行為:使用預設值 600 m/s;log 會有 WARNING 訊息。 - 檢查網路或稍後再試;必要時在 UI/設定中調整預設值。 - 實際震度圖缺失 - 行為:左側顯示空白占位與提示;不影響預測地圖。 - 少於 25 個輸入測站 - 行為:UI 顯示警告,仍可推論。 - 缺少 N/E 分量 - 行為:以 Z 分量代替並在摘要統計。 ## 授權 - License:GPL-3.0 ## 進一步閱讀 - `spec/00-overview.md`(核心目標、架構、不變條件) - `spec/01-data-contract.md`(資料結構、必填欄位、冷啟動流程) - `spec/02-processing-rules.md`(批次策略、輸入限制、資源限制) - `spec/03-error-handling.md`(故障場景、降級策略、UI 訊息設計) - `spec/04-extensions.md`(擴充空間、向後相容性) - `.github/copilot-instructions.md`(開發與貢獻指南) - `changelog.md`(歷次變更摘要)