File size: 6,800 Bytes
5793c8d
 
 
 
 
 
 
 
 
 
 
 
 
0d38f7f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1628958
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0d38f7f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1628958
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0d38f7f
 
 
 
 
 
 
 
 
1628958
 
 
 
 
 
0d38f7f
1628958
 
0d38f7f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1628958
 
 
 
 
0d38f7f
1628958
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
---
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`(歷次變更摘要)