Spaces:
Running
Running
A newer version of the Gradio SDK is available:
6.2.0
metadata
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。
- Vs30 以
- 易於擴充:
- 不需改模型與核心流程即可新增事件與目標測站(更新資料檔即可)。
設計思路
🎯 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(歷次變更摘要)