File size: 2,076 Bytes
f1f3e42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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()