TTSAM / README.md
jimmy60504's picture
docs: add project overview and data contract specifications for earthquake model demo
1628958

A newer version of the Gradio SDK is available: 6.2.0

Upgrade
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。
  • 易於擴充:
    • 不需改模型與核心流程即可新增事件與目標測站(更新資料檔即可)。

設計思路

🎯 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.pyEARTHQUAKE_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.mdspec/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(歷次變更摘要)