SeismicWave / app.py
cwadayi's picture
Create app.py
f1f3e42 verified
import gradio as gr
from transformers import pipeline
import librosa
import numpy as np
# --- 設定模型 ---
# 這裡目前使用一個通用的音訊分類模型 (Audio Spectrogram Transformer) 作為 Demo
# 它可以辨識 "Vibration", "Rumble", "Explosion" 等類別
# 未來您可以將此處替換為您訓練好的地震波專用模型 (例如: "your-username/seismic-wave-classifier")
MODEL_ID = "MIT/ast-finetuned-audioset-10-10-0.4593"
print(f"正在載入模型: {MODEL_ID} ...")
# 建立 Audio Pipeline,這行就是書中第 5 章的概念
pipe = pipeline("audio-classification", model=MODEL_ID)
def classify_seismic_audio(audio_filepath):
"""
接收音訊檔案路徑,回傳前 5 名可能的分類結果
"""
if audio_filepath is None:
return "請上傳或錄製一段音訊"
# 使用 Pipeline 進行推論
# Pipeline 會自動處理讀取音檔、重取樣 (Resample) 等繁瑣工作
preds = pipe(audio_filepath)
# 整理輸出格式給 Gradio (將 list 轉為 dictionary)
# 輸出範例: {'P-wave': 0.95, 'Background Noise': 0.05}
output = {}
for p in preds:
output[p["label"]] = p["score"]
return output
# --- 建立 Gradio 介面 ---
description_text = """
### 🌍 地震波音訊分類器 (Seismic Event Classifier)
此範例展示如何使用 **Hugging Face Audio Pipeline** 來判讀訊號。
您可以上傳一段地震波轉成的音訊檔(.wav/.mp3),模型將判斷其特徵。
* **目前模型**:通用環境音模型 (MIT/AST) - 用於展示架構
* **應用場景**:分辨 P波 (P-wave)、S波 (S-wave) 或 背景雜訊 (Noise)
"""
demo = gr.Interface(
fn=classify_seismic_audio,
inputs=gr.Audio(type="filepath", label="上傳地震波音訊"),
outputs=gr.Label(num_top_classes=5, label="分類結果與信心分數"),
title="🔊 AI 地震訊號辨識",
description=description_text,
examples=[
["sample_audio.wav"] # 如果您有範例檔案可以放這裡
]
)
if __name__ == "__main__":
demo.launch()