當我們在進行「語音辨識」的應用開發時, 首先會面臨一個問題, 那就是究竟要怎麼知道哪些段落是「人在說話的區段」, 精確的標示出這些區段之後, 我們除了可以儲存成純對話的段落, 還可以做出時間軸的字幕檔, 應用非常廣泛, 因此學會怎麼用VAD是進入語音領域非常重要的其中一個環節。
VAD代表語音活動檢測, 全名為 Voice Activity Detection, 它是信號處理技術, 主要從音訊中分離出人類語音的部份,算法的實現方式多樣,通常基於信號的能量、短時過零率、頻譜特徵等。一些先進的 VAD 算法也使用機器學習技術,如深度學習,來提高準確性和適應性。
而 silero-vad 擁有著許多特點與強項, 號稱:
pip install torch
pip install torchaudio
# 假設會使用到onnx模型時才需要安裝
pip install onnxruntime
簡單的五個步驟就能夠取出聲音的時間區段…
# 載入模型
model, utils = torch.hub.load(repo_or_dir='snakers4/silero-vad',
model='silero_vad',
force_reload=True,
onnx=USE_ONNX)
# 載入工具庫
(get_speech_timestamps,
save_audio,
read_audio,
VADIterator,
collect_chunks) = utils
# 讀取音檔
wav = read_audio('en_example.wav', sampling_rate=SAMPLING_RATE)
# 取得音檔的時間區段
speech_timestamps = get_speech_timestamps(wav, model, sampling_rate=SAMPLING_RATE)
pprint(speech_timestamps)
# 儲存僅有人聲的區段
save_audio('only_speech.wav',
collect_chunks(speech_timestamps, wav), sampling_rate=SAMPLING_RATE)
我們可以看到Github上許多的專案都使用到了silero-vad 這個工具, 通常都跟語音應用相關, 包括基礎的語音辨識、爬蟲、Yoiutube串流辨識…等, 應用非常多元, 我們不妨也試著玩玩看, 說不定會從中得到一點啟發創造出全新的應用。
https://github.com/search?q=silero-vad&type=repositories
為什麼會說您可能會需要? 因為我們總不可能任何環境都能夠連網, 一旦沒有網路時, 模型該怎麼下載? 尤其是產品要進入到客戶的封閉網路環境時, 載入本地端的模型就非常重要了…。
我們只要將source指定為local以及trust_repo指定為None即可載入本地端專案。
model, utils = torch.hub.load(
repo_or_dir='silero-vad的專案目錄, git clone ',
model='silero_vad',
trust_repo=None,
source='local',
)
語音領域的技術堆疊也是蠻深的, 要做好語音辨識不只有模型的訓練過程, 還包含前置的語音訊號處理, 畢竟收音端的來源非常多元, 環境的吵雜也會影響著辨識率, 而要如何提高精準度就有賴於我們對於語音的背景知識了, 我們後續也會在會員專屬區分享這些知識, 歡迎一同加入學習。