五分鐘學會!|語音AI在家跑
你有沒有想過,為什麼每次用語音轉文字都要連上雲端?為什麼那些好用的AI語音工具,不是要月費就是要上傳資料給別人?其實,你完全可以把自己電腦變成一台「離線語音AI工作站」。而且,不用花一毛錢。
今天我們要介紹的主角,是來自中國開源社群的最新力作——Qwen音聲模型。不是那個會寫詩的Qwen,而是專為語音辨識(ASR)與語音合成(TTS)設計的輕量級模型。它支援繁簡中文,甚至連粵語都能處理。更棒的是,它可以在你自家的電腦上跑,不需要GPU,CPU也能跑,只是慢一點而已。
你可能會問:「我幹嘛要這麼麻煩?用手機的語音輸入不就好了?」問題在於,手機語音輸入會把你的聲音傳到伺服器,隱私是個大問題。如果你是在處理客戶對話、會議記錄、或任何敏感資訊,離線方案就是唯一選擇。而且,一旦設定好,你就能無限次使用,沒有配額限制。
為什麼你需要本地語音AI?
想像一下這個場景:你是一名自由記者,採訪完一個小時的粵語訪談,回家要逐字稿。用雲端服務?一小時的音檔可能要等很久,而且每個月有分鐘數限制。用本地AI?你只需要把音檔丟進去,幾分鐘後就拿到逐字稿。而且,你的採訪內容不會離開你的電腦。
另一個場景:你是一名YouTuber,需要為影片加入語音旁白。用AI生成語音,聽起來要自然,還要能控制語速和情緒。本地運行的TTS模型可以讓你反覆調整,不用擔心調一次就扣一次費用。
再來,如果你是開發者,想把語音功能整合到自己的應用裡。用雲端API,每分鐘都要計費。用本地模型,你可以隨意呼叫,成本幾乎為零。這對於Prototype開發或內部工具來說,簡直是天賜之物。
第一步:下載與安裝Qwen音聲模型
好,我們直接進入實戰。首先,你需要安裝必要的軟體。
前置需求:
- Python 3.10 或以上版本
- 至少8GB RAM(16GB以上更順暢)
- 硬碟空間約5GB(模型檔案)
- 建議使用虛擬環境(venv)
打開你的終端機(Command Prompt或Terminal),依序執行以下指令:
# 建立專案資料夾
mkdir qwen-voice-local
cd qwen-voice-local
# 建立虛擬環境(可選但強烈建議)
python -m venv venv
source venv/bin/activate # Windows使用者請用 venv\Scripts\activate
# 安裝必要的套件
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
pip install transformers accelerate soundfile librosa
接下來,我們要下載模型。Qwen音聲系列在HuggingFace上有多個版本,我們選擇最適合本地運行的輕量版:
from transformers import AutoModelForCTC, AutoProcessor
# 下載模型(第一次會花幾分鐘)
model_name = "Qwen/Qwen-Audio-7B-Chat" # 這是7B參數版,適合有GPU的使用者
# 如果你只有CPU,可以改用更小的版本:
# model_name = "Qwen/Qwen-Audio-1.5B-Chat" # 1.5B參數,CPU可跑但較慢
processor = AutoProcessor.from_pretrained(model_name)
model = AutoModelForCTC.from_pretrained(model_name)
如果你是CPU使用者,我建議你使用 Qwen/Qwen-Audio-1.5B-Chat 這個版本。雖然參數較小,但對於語音辨識來說已經足夠,而且可以在一般筆電上跑。
第二步:用Python進行語音辨識
模型下載完成後,我們來寫一個簡單的腳本,把音檔轉成文字。以下範例支援WAV格式,如果你有MP3檔案,可以用 ffmpeg 先轉檔。
建立一個檔案 voice_to_text.py:
import torch
import librosa
from transformers import AutoModelForCTC, AutoProcessor
# 載入模型
model_name = "Qwen/Qwen-Audio-1.5B-Chat"
processor = AutoProcessor.from_pretrained(model_name)
model = AutoModelForCTC.from_pretrained(model_name)
# 設定裝置(CPU或GPU)
device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)
def transcribe_audio(audio_path):
# 讀取音檔,強制轉為16kHz取樣率
audio, sr = librosa.load(audio_path, sr=16000)
# 處理音訊
inputs = processor(audio, sampling_rate=16000, return_tensors="pt", padding=True)
inputs = inputs.to(device)
# 進行推論
with torch.no_grad():
logits = model(**inputs).logits
# 解碼
predicted_ids = torch.argmax(logits, dim=-1)
transcription = processor.batch_decode(predicted_ids)
return transcription[0]
# 使用範例
if __name__ == "__main__":
result = transcribe_audio("your_audio_file.wav")
print("辨識結果:", result)
重要設定: 如果你的音檔是粵語,你需要告訴模型使用粵語解碼。修改 processor.batch_decode 的地方,加入語言參數:
transcription = processor.batch_decode(predicted_ids, language="yue") # yue代表粵語
對於國語(普通話),則是 language="cmn"。
第三步:語音合成——讓AI幫你說話
除了聽,我們也要讓AI能「說」。Qwen音聲系列也支援文字轉語音。以下是一個TTS範例:
from transformers import AutoModelForTextToWaveform, AutoProcessor
# 載入TTS模型
tts_model_name = "Qwen/Qwen-Audio-TTS-1.5B"
tts_processor = AutoProcessor.from_pretrained(tts_model_name)
tts_model = AutoModelForTextToWaveform.from_pretrained(tts_model_name)
tts_model.to(device)
def text_to_speech(text, output_path="output.wav", voice="default"):
# voice參數可以選擇不同音色,如"female_1", "male_1"
inputs = tts_processor(text=text, voice=voice, return_tensors="pt")
inputs = inputs.to(device)
with torch.no_grad():
waveform = tts_model(**inputs).waveform
# 儲存為WAV檔案
import soundfile as sf
sf.write(output_path, waveform.cpu().numpy().squeeze(), samplerate=24000)
print(f"語音已儲存至 {output_path}")
# 使用範例
text_to_speech("你好,我是由Qwen生成的語音。這是一個離線運行的AI語音系統。", voice="female_1")
這個TTS模型支援多種音色,你可以試試 "female_1"、"female_2"、"male_1"、"male_2"。對於粵語,你需要在文字中使用粵語拼音或粵語口語,模型才能正確發音。
小技巧: 如果你需要更自然的語音,可以在 text 中加入標點符號,例如逗號和句號,模型會據此調整停頓和語調。
進階應用:建立即時語音助手
如果你覺得逐個檔案處理太麻煩,我們可以建立一個即時錄音與辨識的腳本。這需要安裝 pyaudio 套件:
pip install pyaudio
以下是一個即時錄音5秒並辨識的範例:
import pyaudio
import wave
import numpy as np
def record_audio(duration=5, sample_rate=16000):
chunk = 1024
format = pyaudio.paInt16
channels = 1
p = pyaudio.PyAudio()
stream = p.open(format=format, channels=channels,
rate=sample_rate, input=True,
frames_per_buffer=chunk)
print("開始錄音...")
frames = []
for _ in range(0, int(sample_rate / chunk * duration)):
data = stream.read(chunk)
frames.append(data)
print("錄音結束。")
stream.stop_stream()
stream.close()
p.terminate()
# 儲存為WAV
with wave.open("temp_recording.wav", 'wb') as wf:
wf.setnchannels(channels)
wf.setsampwidth(p.get_sample_size(format))
wf.setframerate(sample_rate)
wf.writeframes(b''.join(frames))
return "temp_recording.wav"
# 錄音並辨識
audio_file = record_audio(5) # 錄5秒
result = transcribe_audio(audio_file)
print("你說的是:", result)
這個腳本可以作為語音助手的前端。你可以將辨識結果傳給其他AI模型(例如Qwen的文字模型)進行處理,再把回應透過TTS唸出來。這樣你就擁有一個完全離線、隱私安全的語音助手了。
效能調校與常見陷阱
CPU太慢怎麼辦? 如果你用CPU跑1.5B模型,處理一段10分鐘的音檔可能需要5-10分鐘。解決方法:一是升級硬體(至少要有GPU),二是使用更小的模型。HuggingFace上還有更小的版本如 Qwen/Qwen-Audio-0.5B,雖然準確率略降,但速度快很多。
記憶體不足? 如果出現OOM錯誤,可以嘗試:
- 關閉其他應用程式釋放記憶體
- 使用
torch.set_num_threads(4)限制CPU線程數 - 將音檔分割成較短的片段(例如每30秒一段)再逐段處理
粵語辨識不準? 目前Qwen音聲模型對粵語的支援仍在改進中。如果你需要高準確率的粵語辨識,可以考慮混合使用開源粵語語音模型(如 espnet 的粵語模型)與Qwen的後處理。
總結
今天我們學會了如何在自家電腦上運行Qwen音聲AI模型,從安裝環境、語音辨識到語音合成,全部離線完成。你不再需要依賴雲端API,也不用擔心隱私問題。對於記者、YouTuber、開發者或任何需要處理語音資料的人來說,這套方案可以大幅節省成本並提升效率。
下一步,你可以嘗試將語音辨識結果串接到其他AI工具,例如用Qwen的文字模型進行摘要或翻譯。或者,你也可以為這個系統加上圖形介面(GUI),讓非技術人員也能輕鬆使用。
動手試試看吧!第一次設定可能需要半小時,但之後每次使用都是免費的。如果你遇到任何問題,歡迎在下方留言討論。
延伸閱讀
常見問題
Q: 我的電腦沒有NVIDIA顯示卡,可以用CPU跑嗎? A: 可以。使用1.5B參數的版本,CPU也能跑,只是速度較慢。建議使用16GB以上RAM,並關閉其他程式。處理10分鐘音檔約需5-10分鐘。
Q: 這個模型支援粵語嗎?
A: 支援。在解碼時加入 language="yue" 參數即可。但要注意,粵語辨識準確率比國語略低,建議使用清晰的錄音品質。
Q: 音檔格式有限制嗎?
A: 模型原生支援WAV格式,取樣率16kHz。如果是MP3或其他格式,建議先用 ffmpeg 轉換。我們提供的範例使用 librosa 讀取,它支援多種格式,但最終都會轉為16kHz。
Q: 可以用在商業專案嗎? A: Qwen音聲模型使用Apache 2.0授權,允許商業使用。但請注意,模型本身是基於大量資料訓練的,如果你使用它生成內容,建議檢查是否符合當地法規(例如AI生成內容標示)。
Q: 為什麼我的辨識結果都是亂碼?
A: 這通常是因為模型載入不完整或音檔取樣率不對。請確認音檔確實為16kHz,並檢查是否正確安裝了所有套件。另外,如果你的音檔是立體聲,librosa.load 預設會合併為單聲道,這沒問題;但如果是其他特殊格式,可能需要先預處理。