搜尋
首頁後端開發Python教學Linux下怎麼用python實現語音辨識功能

語音辨識工作原理簡介

語音辨識源自於 20 世紀 50 年代早期在貝爾實驗室所做的研究。早期語音辨識系統僅能辨識單一說話者以及只有約十幾個單字的詞彙量。現代語音辨識系統已經取得了很大進步,可以識別多個演講者,並且擁有識別多種語言的龐大詞彙表。
語音辨識的首要部分當然是語音。透過麥克風,語音便從實體聲音轉換為電訊號,然後透過類比數位轉換器轉換為資料。一旦被數位化,就可適用若干種模型,將音訊轉錄為文字。
大多數現代語音辨識系統都依賴隱馬可夫模型(HMM)。其工作原理為:語音訊號在非常短的時間尺度上(例如 10 毫秒)可被近似為靜止過程,即其統計特性不隨時間變化的過程。
許多現代語音辨識系統會在 HMM 辨識之前使用神經網絡,透過特徵變換和降維的技術來簡化語音訊號。也可以使用語音活動偵測器(VAD)將音訊訊號減少到可能僅包含語音的部分。
幸運的是,對於 Python 用戶而言,有些語音辨識服務可透過 API 在線上使用,其中大部分也提供了 Python SDK。

選擇合適的python語音辨識套件

PyPI中有一些現成的語音辨識軟體包。其中包括:
apiai
google-cloud-speech
pocketsphinx
SpeechRcognition
watson-developer-cloud
wit
一些軟體包(如wit 和apiai )提供了一些超出基本語音辨識的內建功能,如辨識說話者意圖的自然語言處理功能。其他軟體包,如Google雲端語音,則專注於語音向文字的轉換。
其中,SpeechRecognition 就因為便於使用而脫穎而出。
識別語音需要輸入音頻,而在 SpeechRecognition 中檢索音頻輸入是非常簡單的,它無需構建訪問麥克風和從頭開始處理音頻文件的腳本,只需幾分鐘即可自動完成檢索並運行。

安裝SpeechRecognition

SpeechRecognition 相容於 Python2.6 , 2.7 和 3.3 ,但若在 Python 2 中使用還需要一些額外的安裝步驟。大家可使用pip 指令從終端機安裝SpeechRecognition:pip3 install SpeechRecognition

安裝完成後可以開啟解釋器視窗進行驗證安裝:

Linux下怎麼用python實現語音辨識功能

#附註:不要關閉此會話,在後幾個步驟中你將要使用它。
若處理現有的音訊文件,只需直接呼叫 SpeechRecognition ,注意具體的用例的一些依賴關係。同時注意,安裝 PyAudio 套件來取得麥克風輸入

辨識器類別

SpeechRecognition 的核心就是辨識器類別。
Recognizer API 主要目是識別語音,每個API 都有多種設定和功能來識別音訊來源的語音,這裡我選擇的是recognize_sphinx(): CMU Sphinx - requires installing PocketSphinx(支援離線的語音辨識
那麼我們就需要透過pip指令來安裝PocketSphinx,在安裝過程中也容易出現一大串紅色字型的錯誤。

音訊檔案的使用

下載相關的音訊檔案儲存到特定的目錄(直接儲存到ubuntu桌面)
注意:
AudioFile 類別可以透過音訊檔案的路徑進行初始化,並提供用於讀取和處理檔案內容的上下文管理器介面。
SpeechRecognition 目前支援的檔案類型有:

  • WAV: 必須是PCM/LPCM 格式

  • AIFF

  • AIFF-CFLAC: 必須是初始FLAC 格式;OGG-FLAC 格式不可用

英文的語音識別

##在完成以上基礎工作以後,就可以進行英文的語音辨識了。

(1)開啟終端機
(2)進入語音測試檔案所在目錄(部落客的是桌面)
(3)開啟python解釋器
(4)依照下圖輸入相關指令

Linux下怎麼用python實現語音辨識功能

最後就可以看到語音轉文字的內容(this they’ll smell …),其實效果還是很不錯的!因為是英文,沒有噪音。

噪音對語音辨識的影響

噪音在現實世界中確實存在,所有錄音都有一定程度的噪音,而未經處理的噪音可能會破壞語音辨識應用程式的準確性。

透過嘗試轉錄效果並不好,我們可以透過嘗試呼叫 Recognizer 類別的adjust_for_ambient_noise()指令。

麥克風的使用

若要使用 SpeechRecognizer 存取麥克風則必須安裝 PyAudio 軟體包。
如果使用的是基於Debian的Linux(如Ubuntu ),則可使用apt 安裝PyAudio:sudo apt-get install python-pyaudio python3-pyaudio安裝完成後可能仍需要啟用pip3 install pyaudio ,尤其是在虛擬情況下運行。
在安裝完pyaudio的情況下可以透過python實現語音錄入產生相關檔案。
pocketsphinx的使用注意:
支援檔案格式:wav
音訊檔案的解碼要求:16KHZ,單聲道
利用python實作錄音並產生相關檔案程式碼如下:

from pyaudio import PyAudio, paInt16
import numpy as np
import wave
class recoder:
     NUM_SAMPLES = 2000   
     SAMPLING_RATE = 16000  
     LEVEL = 500     
     COUNT_NUM = 20   
     SAVE_LENGTH = 8     
     Voice_String = []
     def savewav(self,filename):
         wf = wave.open(filename, 'wb')
         wf.setnchannels(1)
         wf.setsampwidth(2)
         wf.setframerate(self.SAMPLING_RATE)
         wf.writeframes(np.array(self.Voice_String).tostring())
         wf.close()
     def recoder(self):
         pa = PyAudio()
         stream = pa.open(format=paInt16, channels=1, rate=self.SAMPLING_RATE, input=True,frames_per_buffer=self.NUM_SAMPLES)
         save_count = 0
         save_buffer = []
         while True:
            string_audio_data = stream.read(self.NUM_SAMPLES)
            audio_data = np.fromstring(string_audio_data, dtype=np.short)
            large_sample_count = np.sum(audio_data > self.LEVEL)
            print(np.max(audio_data))
            if large_sample_count > self.COUNT_NUM:
                save_count = self.SAVE_LENGTH
            else:
                save_count -= 1
            if save_count < 0:
                save_count = 0
            if save_count > 0:
                save_buffer.append(string_audio_data )
            else:
                if len(save_buffer) > 0:
                    self.Voice_String = save_buffer
                    save_buffer = []
                    print("Recode a piece of voice successfully!")
                    return True
		 else:
                    return False
if __name__ == "__main__":
    r = recoder()
    r.recoder()
    r.savewav("test.wav")

注意:在利用python解釋器實作時一定要注意空格! ! !
最後產生的檔案就在Python解釋器回話所在目錄下,可以透過play來播放測試一下,如果沒有安裝play可以透過apt指令來安裝。

中文的語音辨識

在進行完以前的工作以後,我們對語音辨識的流程大概有了一定的了解,但是身為一個中國人總得做一個中文的語音辨識吧!

我們要在CMU Sphinx語音辨識工具包裡面下載對應的國語升學和語言模型。

Linux下怎麼用python實現語音辨識功能

圖片中標記的是國語!下載相關的語音辨識工具包。

但我們要把zh_broadcastnews_64000_utf8.DMP轉換成language-model.lm.bin,再解壓縮zh_broadcastnews_16k_ptm256_8000.tar.bz2得到資料夾
借鏡剛才那位部落客的方法,在Ubuntu下找到speech_recognition資料夾。可能會有很多小夥伴找不到相關的資料夾,其實是在隱藏檔案下。大家可以點選資料夾右上角的三條槓。如下圖所示:

Linux下怎麼用python實現語音辨識功能

然後給顯示隱藏檔案打個勾,如下圖所示:

Linux下怎麼用python實現語音辨識功能

##然後依序依照以下目錄就可以找到啦:

Linux下怎麼用python實現語音辨識功能

然後把原來的

en-US改名為en-US-bak ,新建一個資料夾en-US,把解壓縮出來的zh_broadcastnews_ptm256_8000改成acoustic-model,把chinese.lm.bin#改成language -model.lm.bin,把pronounciation-dictionary.dic改後綴成dict,複製這三個檔案到en-US裡。同時把原來en-US檔目錄下的LICENSE.txt複製到現在的資料夾下。 最終該資料夾下有以下檔案:

Linux下怎麼用python實現語音辨識功能

然後我們就可以透過麥克風錄入一個語音檔案檔案(“test.wav”)

在該文件目錄下打開python解釋器輸入以下內容:

Linux下怎麼用python實現語音辨識功能

就看到了輸出內容,但是我說的是兩個中國,也測試了一下其他的發現識別效果很不好! ! !


小範圍中文辨識

用官方提供的效果太差,幾乎不能用!那麼我看了很多文章以後就想到了一種優化方法,但是只適合小範圍的識別!有些命令啥的應該沒有問題,但是聊天什麼的可能就效果不太好。

找到剛才複製的4個資料夾,有一個pronounciation-dictionary.dict的資料夾,開啟以後是以下內容:

Linux下怎麼用python實現語音辨識功能##感覺這內容就是類似一個字典,很多用詞和平時溝通的用詞差距比較大。那我們改成我們習慣的用詞就可以啦!抱著試一試的想法,結果真的可以。識別效果真的不錯!

我的做法是:

(1)把圖片中紅色標記以上的內容繼續保留,紅色以下的內容刪除掉。當然處於保險考慮建議大家給該文件備份一下!
(2)給紅色線以下輸入自己想辨識的內容! (依照規則輸入,不同於拼音!!!)最近新型肺炎的情況不斷的變好,聽到最多的一句話就是「中國加油」那麼今天的內容就是將「中國加油」實現語音轉文字!希望能早日開學,哈哈哈哈。

Linux下怎麼用python實現語音辨識功能3)輸入以下內容:

Linux下怎麼用python實現語音辨識功能

語音合成

語音合成個人的理解就是文字轉語音。不過這句話中可以設定client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) result = client.synthesis('你好百度', 'zh', 1, { 'vol': 5,'spd': 3 ,'pit':9,'per': 3})音量、音調、速度、男/女/蘿莉/逍遙。

以上是Linux下怎麼用python實現語音辨識功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
Python的主要目的:靈活性和易用性Python的主要目的:靈活性和易用性Apr 17, 2025 am 12:14 AM

Python的靈活性體現在多範式支持和動態類型系統,易用性則源於語法簡潔和豐富的標準庫。 1.靈活性:支持面向對象、函數式和過程式編程,動態類型系統提高開發效率。 2.易用性:語法接近自然語言,標準庫涵蓋廣泛功能,簡化開發過程。

Python:多功能編程的力量Python:多功能編程的力量Apr 17, 2025 am 12:09 AM

Python因其簡潔與強大而備受青睞,適用於從初學者到高級開發者的各種需求。其多功能性體現在:1)易學易用,語法簡單;2)豐富的庫和框架,如NumPy、Pandas等;3)跨平台支持,可在多種操作系統上運行;4)適合腳本和自動化任務,提升工作效率。

每天2小時學習Python:實用指南每天2小時學習Python:實用指南Apr 17, 2025 am 12:05 AM

可以,在每天花費兩個小時的時間內學會Python。 1.制定合理的學習計劃,2.選擇合適的學習資源,3.通過實踐鞏固所學知識,這些步驟能幫助你在短時間內掌握Python。

Python與C:開發人員的利弊Python與C:開發人員的利弊Apr 17, 2025 am 12:04 AM

Python適合快速開發和數據處理,而C 適合高性能和底層控制。 1)Python易用,語法簡潔,適用於數據科學和Web開發。 2)C 性能高,控制精確,常用於遊戲和系統編程。

Python:時間投入和學習步伐Python:時間投入和學習步伐Apr 17, 2025 am 12:03 AM

學習Python所需時間因人而異,主要受之前的編程經驗、學習動機、學習資源和方法及學習節奏的影響。設定現實的學習目標並通過實踐項目學習效果最佳。

Python:自動化,腳本和任務管理Python:自動化,腳本和任務管理Apr 16, 2025 am 12:14 AM

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

Python和時間:充分利用您的學習時間Python和時間:充分利用您的學習時間Apr 14, 2025 am 12:02 AM

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python:遊戲,Guis等Python:遊戲,Guis等Apr 13, 2025 am 12:14 AM

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器