iT邦幫忙

2025 iThome 鐵人賽

DAY 2
0
生成式 AI

打造基於 MCP 協議與 n8n 工作流的會議處理 Agent系列 第 2

Day 2 本地 Whisper 環境建置與初步測試

  • 分享至 

  • xImage
  •  

今天的目標與挑戰

昨天心中有了專案的藍圖後,今天就是要來實做的時候了!我希望 OpenAI 的開源 Whisper 模型可以在我的電腦上成功地跑起來,並且成功轉錄一段中文錄音。

為了達成我的今天的任務,因此我訂定了幾個目標

  • 建立 Python 虛擬環境
  • 安裝並測試 OpenAI Whisper
  • 驗證不同模型的效能差異
  • 完成第一次中文語音轉錄測試

Step 1:環境準備與虛擬環境建置

建立虛擬環境

我先在 M2A Agent 專案資料夾下,建立了一個專屬的 Python 虛擬環境,確保我們的專案不會跟系統上其他的 Python 套件「打架」。

cd M2A Agent
python -m venv venv

# Windows 啟動虛擬環境
venv\Scripts\activate

啟動成功後,命令提示字元前面會出現 (venv),代表我們已經進入了虛擬環境。

更新 pip 與安裝相關套件

接著,更新 pip 並且安裝Whisper,以及它運作所需要的核心套件。

python -m pip install --upgrade pip
pip install openai-whisper torch torchaudio numpy requests

安裝 FFmpeg

在安裝過程中我發現,Whisper 需要一個名為 FFmpeg 的工具來處理音訊檔案。如果沒有它,Whisper 就會無法讀取音訊。

步驟如下

  1. 從官網下載 Windows static 版本,並解壓縮到 C:\ffmpeg\
  2. C:\ffmpeg\bin 這個路徑加入到系統的環境變數 PATH 中
  3. 開啟一個終端機,輸入 ffmpeg -version,看到版本資訊就代表成功了!

若需要更詳細的教學,可以參考這位 YouTuber 的教學影片

環境資訊

安裝完後,我提供我的環境資訊做為參考

  • Python 版本:3.12.4
  • Whisper 版本:20250625
  • PyTorch 版本:2.8.0

Step 2:單檔中文轉錄測試

環境都準備好後,我們來建立 whisper_test.py 來做轉錄測試

import whisper, time

model = whisper.load_model("medium")
start = time.time()
result = model.transcribe("recording/小妹妹介紹他的玩偶.m4a", language="zh")
print(f"轉錄時間: {time.time()-start:.2f} 秒")
print("轉錄內容:", result["text"])

執行

python whisper_test.py

執行後,終端機跳出了一段警告訊息
UserWarning: FP16 is not supported on CPU; using FP32 instead warnings.warn("FP16 is not supported on CPU; using FP32 instead")

這段訊息是在說「CPU 不支援一種更省記憶體的高效運算格式 (FP16),所以換成標準的 FP32 格式來跑。」這是個友善提醒,不會影響結果。

執行結果

轉錄時間: 38.52 秒
轉錄內容:
大家好,我是斯珀西我家裡面有養一隻小牛牛牠的名字叫阿牛然後牠小時候的時候棉花就沒了所以我有幫牠開刀然後在牠的手臂下面開了一個刀然後幫牠補棉花所以牠現在就是肚子都胖胖的那大家,阿牛謝謝大家

Whisper 成功把小妹妹介紹玩偶的錄音檔轉成了文字!


Step 3:驗證不同模型載入效能

既然 medium 模型表現不錯,我也很好奇其他大小的模型表現如何?所以寫了一段程式來比較 tiny, small, medium 這三個模型的載入時間和參數量。

import whisper, time

for name in ["tiny","small","medium"]:
    start = time.time()
    m = whisper.load_model(name)
    elapsed = time.time()-start
    params = sum(p.numel() for p in m.parameters())
    print(f"{name}: 載入時間 {elapsed:.2f}s, 參數量 {params:,}")

執行結果如下

tiny: 載入時間 0.70s, 參數量 37,184,640
small: 載入時間 3.85s, 參數量 240,582,912
medium: 載入時間 10.73s, 參數量 762,321,920

從結果可以看到,模型越大,載入時間越長,佔用的資源也越多。這讓我決定,在後面的開發中,我主要會使用 medium 模型,以在準確度和效能之間取得最佳平衡。


今天的成果總結

完成項目

  • 建立並配置 Python 虛擬環境
  • 成功安裝 Whisper 及相關套件
  • 解決 FFmpeg 相依性問題
  • 測試三種模型的載入效能
  • 完成中文語音轉錄功能驗證

📝 關鍵發現

  • 模型最佳選擇 medium:在剛剛的測試中,它在轉錄品質和執行效能之間取得了最好的平衡點。
  • 關鍵的 FFmpeg:若沒有它,Whisper 就無法處理音訊,這是一個必須注意的細節。
  • 可忽略的 CPU 警告:在 CPU 上執行時出現的 FP16 警告是正常現象,可以安心服用。
  • 出色的轉錄速度:此次測試以我電腦的硬體為例,我轉錄的即時率(Real-Time Factor, RTF) 約為 0.95,這代表每 1 秒的音訊,只需要花費 0.95 秒。

心得

雖然今天的 Whisper 可以跑了,但每次都要重新載入模型,我希望可以再更有效率一點...

🎯 明天計劃
進一步封裝成一個可重複使用的 WhisperService 類別,為後續 MCP Agent 的整合打下穩固的基礎。


上一篇
Day 1 前言
下一篇
Day 3 Whisper Service 封裝與介面建立
系列文
打造基於 MCP 協議與 n8n 工作流的會議處理 Agent7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言