目錄

  • 語音識別的工作原理
  • Python語音識別軟體包的選擇
  • 安裝語音識別包
  • 識別器類
  • 使用音頻文件
  • 支持的文件類型
  • 使用record()來捕獲文件中的數據
  • 具有偏移和持續時間的段的捕獲
  • 雜訊對語音識別的影響
  • 用麥克風工作
  • 安裝PyAudio
  • 麥克風類
  • 使用Listen()捕獲麥克風輸入
  • 處理不可識別的語音
  • 綜合:一個「猜單詞」遊戲
  • 補充和補充資源
  • 附錄:用英語以外的語言識別語音

語音識別的工作原理

語音識別起源於20世紀50年代初在貝爾實驗室進行的研究。早期的系統僅限於一個說話者,並且有大約10個單詞的辭彙量有限。現代語音識別系統自遠古以來就有很長的路要走。他們可以識別來自多個發言者的講話,並且在許多語言中有海量的辭彙。

當然,語音識別的第一個組成部分是語音。語音必須用麥克風從物理聲音轉換成電信號,然後用模數轉換器轉換成數字數據。一旦數字化,可以使用幾個模型來轉錄音頻到文本。

大多數現代語音識別系統依賴於所謂的隱性馬爾可夫模型(HMM)。這種方法的假設是,當在足夠短的時間尺度上(例如,10毫秒)觀看語音信號時,可以合理地近似為一個平穩過程,即統計特性隨時間不改變的過程。

在一個典型的HMM中,語音信號被劃分為10毫秒片段。每個片段的能譜,實質上是信號的功率作為頻率的函數的圖,被映射為實數向量,稱為倒頻譜參數。該向量的維數通常很小,有時低到10,儘管更精確的系統可以具有32或更多的維數。HMM的最終輸出是這些向量的序列。

為了將語音解碼成文本,向量組與一個或多個音素(音位)匹配,這是基本的語音單位。這個計算需要訓練,因為音位的聲音每個人都不同,甚至由同一個說話者的發音都有變化。然後應用一種特殊演算法來確定產生給定音素序列的最有可能的詞(或詞)。

可以想像,整個過程可能在計算上是昂貴的。在許多現代語音識別系統中,使用神經網路來簡化語音信號,在HMM識別之前使用特徵變換和降維技術。語音活動檢測器(VADS)也被用來將音頻信號減少到僅包含可能包含語音的部分,這防止識別器浪費時間分析信號的不必要部分。

幸運的是,作為一個Python程序員,不必擔心任何這些。許多語音識別服務可通過API在線使用,其中許多服務提供Python SDK。


Python語音識別軟體包的選擇

在PyPI上有少量用於語音識別的軟體包。其中包括:

apiai?

pypi.org
圖標
assemblyai?

pypi.org
圖標
google-cloud-speech?

pypi.org
圖標
pocketsphinx?

pypi.org
圖標
SpeechRecognition?

pypi.org
圖標
watson-developer-cloud?

pypi.org
圖標
wit?

pypi.org
圖標

其中一些軟體包如wit和apiai提供了內置的功能,如識別說話人意圖的自然語言處理,這超越了基本的語音識別。其他人,如谷歌雲語音,只專註於語音到文本轉換。

有一個在易用性方面突出的軟體包:SpeechRecognition。

識別語音需要音頻輸入,並且SpeechRecognition使得檢索這一輸入非常容易。而不是建立腳本來訪問麥克風和從頭開始處理音頻文件,SpeechRecognition將讓你在幾分鐘內即可運行。

SpeechRecognition作為幾個流行語音API的包裝器,因此非常靈活。其中一個谷歌Web語音API支持一個默認的API密鑰,它硬編碼到語音識別庫中。這意味著你可以在不需要註冊服務的情況下即可使用。

SpeechRecognition的靈活性和易用性使它成為任何Python項目的最佳選擇。然而,對它所封裝的每個API的每個特徵的支持都不能保證。你需要花一些時間研究可用的選項,以找出SpeechRecognition能否在你的特定情況下起作用。

所以,下一步嘗試將它安裝在你的環境中。


安裝SpeechRecognition

SpeechRecognition與Python 2.6、2.7和3.3 +兼容,但需要Python 2的一些附加安裝步驟。在本教程中,假設正在使用Python 3.3 +。

可以用Pip從終端安裝語音識別:

$ pip install SpeechRecognition

安裝後,驗證安裝:

>>> import speech_recognition as sr
>>> sr.__version__
3.8.1

繼續保持這個會話。

如果你需要做的就是和現有的音頻文件一起工作,那麼SpeechRecognition就可以工作了。然而,特定的情況下需要一些依賴。值得注意的是,PyAudio軟體包需要捕獲麥克風輸入。

現在,讓我們深入研究這個軟體包的基本知識。


識別器類

SpeechRecognition中的所有魔術都是在識別器類中發生的。

識別器實例的主要目的當然是識別語音。每個實例都具有用於識別來自音頻源的語音的各種設置和功能。

創建識別器實例很簡單。在當前的解釋器會話中,僅鍵入:

>>> r = sr.Recognizer()

推薦閱讀:

相關文章