【Python 軍火庫🧨 - silero-vad】 偵測語音活動的神兵利器

2024/02/27閱讀時間約 4 分鐘
raw-image



當我們在進行「語音辨識」的應用開發時, 首先會面臨一個問題, 那就是究竟要怎麼知道哪些段落是「人在說話的區段」, 精確的標示出這些區段之後, 我們除了可以儲存成純對話的段落, 還可以做出時間軸的字幕檔, 應用非常廣泛, 因此學會怎麼用VAD是進入語音領域非常重要的其中一個環節。

VAD代表語音活動檢測, 全名為 Voice Activity Detection, 它是信號處理技術, 主要從音訊中分離出人類語音的部份,算法的實現方式多樣,通常基於信號的能量、短時過零率、頻譜特徵等。一些先進的 VAD 算法也使用機器學習技術,如深度學習,來提高準確性和適應性。

silero-vad 擁有著許多特點與強項, 號稱:

  • 精準: Quality Metrics
  • 快速: Performance Metrics
  • 輕量化: 模型不到3MB
  • 彈性的取樣率: 16k、8k。
  • 彈性的塊長度: 模型訓練時間為 30 毫秒, 直接支援更長的區塊,其他區塊也可以工作。
  • 高度可移植性: pytorch、onnx。
raw-image


安裝套件

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

raw-image



您可能會需要的… 如何載入本地端模型?

為什麼會說您可能會需要? 因為我們總不可能任何環境都能夠連網, 一旦沒有網路時, 模型該怎麼下載? 尤其是產品要進入到客戶的封閉網路環境時, 載入本地端的模型就非常重要了…。

我們只要將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',
)

結語

語音領域的技術堆疊也是蠻深的, 要做好語音辨識不只有模型的訓練過程, 還包含前置的語音訊號處理, 畢竟收音端的來源非常多元, 環境的吵雜也會影響著辨識率, 而要如何提高精準度就有賴於我們對於語音的背景知識了, 我們後續也會在會員專屬區分享這些知識, 歡迎一同加入學習。

91會員
260內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
發表第一個留言支持創作者!