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

更新於 發佈於 閱讀時間約 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',
)

結語

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

avatar-img
119會員
268內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
阿Han的沙龍 的其他內容
關於Websockets的篇章, 有興趣的朋友歡迎參考: 【Python 軍火庫 - websockets】雙向溝通的渠道 【Python 軍火庫 - websockets】用json來溝通吧! 而這一篇章的主題主要是來分享如何透過websockets傳遞音檔並進行解碼, 我們都知道聲
本文介紹了Python如何使用websockets進行雙向溝通,包括文字、json、xml和音訊的傳遞。特別著重於json資料交換格式,以及websockets通道的基本流程和關鍵的編碼與解碼。最終談到WebSocket對於傳統同步程式的轉變及對asyncio等套件的重要性。
我們常常在看開源專案時, 會在函式中看到「*args」與「**kwargs」這兩個參數, 一直以來都很好奇也尚未使用, 趁著好奇心強烈的時期趕緊來了解一番, 並且將學習過程轉化為易懂的概念提供給有需要的朋友參考, 也期望我們能夠共同學習程式語言, 讓科技引領世界進步。 首先是 *args 會
Websocket是一種網路傳輸的協定,讓建立一次handshake的過程就可以相互傳遞資料,而非同步的過程能夠讓處理事情更有效率,這篇文章將帶你深入瞭解Websocket如何運作、以及其特點與優勢。
為什麼需要非同步? 我們在「【Web微知識系列】 Web Workers」有介紹到在瀏覽器可執行腳本Javascript環境底下如何完成非同步的操作, 主要是為了讓任務更有效率的進行, 不會因為一個非常耗時的工作堵塞住整個服務, 導致無法服務他人的窘境。 大家應該經常在餐廳裡會看到服務員協
我們在處理音檔時常常會使用到 [soundfile](https://pypi.org/project/soundfile/) 這套工具, 當我們試圖讀取檔案時卻發生了這樣的錯誤訊息… TypeError: Not allowed for existing files (except 'RAW')
關於Websockets的篇章, 有興趣的朋友歡迎參考: 【Python 軍火庫 - websockets】雙向溝通的渠道 【Python 軍火庫 - websockets】用json來溝通吧! 而這一篇章的主題主要是來分享如何透過websockets傳遞音檔並進行解碼, 我們都知道聲
本文介紹了Python如何使用websockets進行雙向溝通,包括文字、json、xml和音訊的傳遞。特別著重於json資料交換格式,以及websockets通道的基本流程和關鍵的編碼與解碼。最終談到WebSocket對於傳統同步程式的轉變及對asyncio等套件的重要性。
我們常常在看開源專案時, 會在函式中看到「*args」與「**kwargs」這兩個參數, 一直以來都很好奇也尚未使用, 趁著好奇心強烈的時期趕緊來了解一番, 並且將學習過程轉化為易懂的概念提供給有需要的朋友參考, 也期望我們能夠共同學習程式語言, 讓科技引領世界進步。 首先是 *args 會
Websocket是一種網路傳輸的協定,讓建立一次handshake的過程就可以相互傳遞資料,而非同步的過程能夠讓處理事情更有效率,這篇文章將帶你深入瞭解Websocket如何運作、以及其特點與優勢。
為什麼需要非同步? 我們在「【Web微知識系列】 Web Workers」有介紹到在瀏覽器可執行腳本Javascript環境底下如何完成非同步的操作, 主要是為了讓任務更有效率的進行, 不會因為一個非常耗時的工作堵塞住整個服務, 導致無法服務他人的窘境。 大家應該經常在餐廳裡會看到服務員協
我們在處理音檔時常常會使用到 [soundfile](https://pypi.org/project/soundfile/) 這套工具, 當我們試圖讀取檔案時卻發生了這樣的錯誤訊息… TypeError: Not allowed for existing files (except 'RAW')
你可能也想看
Google News 追蹤
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 129 中說,Bidirectional Encoder Representations from Transformers (BER
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們從 AI說書 - 從0開始 - 103 至 AI說書 - 從0開始 - 105 的努力,已經完成資料集前處理,現在需要定義一個函數來加載這些清理過的數據集,並在預處
Thumbnail
本文主要使用SpeechRecognition來做一個簡單的語音辨識,使用pyqt5介面呈現。 按下Start Recording,開始錄音,並顯示請開始說話。然後按鈕名改名Stop 在按下Stop Recording,稍等片刻後就會呈現出辨識結果​ 程式範例 import sys i
Thumbnail
上篇我們簡單的了解了 TTS 想要達到的目標,但是對於訓練資料的處理、網路架構、損失函數、輸出分析等考慮到篇幅尚未解釋清楚,這篇將針對訓練資料處理中的文字部分進行詳細說明,讓我們開始吧。
Thumbnail
  在 AI 應用中,圖像、語音、文字三種可以說是主要應用,其中我一直以來都是專注於圖像上的研究,對於另兩種僅止於淺嚐,接下來就往音訊上研究看看,先從入門級的Text-To-Speech (TTL) 入場並一個個嘗試其他類型的應用,那麼,就讓我們開始吧。
Thumbnail
「人工智障計畫」也執行了好一段時間了,關於這個專案中文字轉語音的方案,在之前的筆記中也有稍微提到,為了達成能自訂聲線,並且能完全離線運作兩個條件,我已經做過了不少嘗試。
Thumbnail
這篇文章介紹瞭如何將聲音檔轉換為逐字稿,並且提到了使用雲端硬碟安裝colaboratory的方法。這篇文章指出了逐字稿的重要性,以及如何透過逐字稿做文字呈現方式的轉變。如果你需要處理會議紀錄或聲音檔,這些方法都能幫助你更輕鬆的進行工作。
Thumbnail
拼字,靠死背:多少人能背光那些例外? 文法,靠理解:多少人能解密那些規則? 語意,靠閱讀:多少人能「看」出那些「音效」?
Thumbnail
要如何做到無須任何額外訓練樣本就能做到"跨語言"的語音生成,這聽起來很不可思議對吧? 但這就是本篇論文取得的成就,不僅如此,該有的功能,如調整情感,口音節奏,停頓語調這些功能也不在話下。跟著我一起用探秘還有獨立思考的眼光來分析這篇論文,這會是很有趣的旅程。
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 回顧 AI說書 - 從0開始 - 129 中說,Bidirectional Encoder Representations from Transformers (BER
我想要一天分享一點「LLM從底層堆疊的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 我們從 AI說書 - 從0開始 - 103 至 AI說書 - 從0開始 - 105 的努力,已經完成資料集前處理,現在需要定義一個函數來加載這些清理過的數據集,並在預處
Thumbnail
本文主要使用SpeechRecognition來做一個簡單的語音辨識,使用pyqt5介面呈現。 按下Start Recording,開始錄音,並顯示請開始說話。然後按鈕名改名Stop 在按下Stop Recording,稍等片刻後就會呈現出辨識結果​ 程式範例 import sys i
Thumbnail
上篇我們簡單的了解了 TTS 想要達到的目標,但是對於訓練資料的處理、網路架構、損失函數、輸出分析等考慮到篇幅尚未解釋清楚,這篇將針對訓練資料處理中的文字部分進行詳細說明,讓我們開始吧。
Thumbnail
  在 AI 應用中,圖像、語音、文字三種可以說是主要應用,其中我一直以來都是專注於圖像上的研究,對於另兩種僅止於淺嚐,接下來就往音訊上研究看看,先從入門級的Text-To-Speech (TTL) 入場並一個個嘗試其他類型的應用,那麼,就讓我們開始吧。
Thumbnail
「人工智障計畫」也執行了好一段時間了,關於這個專案中文字轉語音的方案,在之前的筆記中也有稍微提到,為了達成能自訂聲線,並且能完全離線運作兩個條件,我已經做過了不少嘗試。
Thumbnail
這篇文章介紹瞭如何將聲音檔轉換為逐字稿,並且提到了使用雲端硬碟安裝colaboratory的方法。這篇文章指出了逐字稿的重要性,以及如何透過逐字稿做文字呈現方式的轉變。如果你需要處理會議紀錄或聲音檔,這些方法都能幫助你更輕鬆的進行工作。
Thumbnail
拼字,靠死背:多少人能背光那些例外? 文法,靠理解:多少人能解密那些規則? 語意,靠閱讀:多少人能「看」出那些「音效」?
Thumbnail
要如何做到無須任何額外訓練樣本就能做到"跨語言"的語音生成,這聽起來很不可思議對吧? 但這就是本篇論文取得的成就,不僅如此,該有的功能,如調整情感,口音節奏,停頓語調這些功能也不在話下。跟著我一起用探秘還有獨立思考的眼光來分析這篇論文,這會是很有趣的旅程。