您好,登錄后才能下訂單哦!
本篇內容主要講解“Linux下如何用python實現語音識別功能”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Linux下如何用python實現語音識別功能”吧!
PyPI中有一些現成的語音識別軟件包。其中包括:
apiai
google-cloud-speech
pocketsphinx
SpeechRcognition
watson-developer-cloud
wit
一些軟件包(如 wit 和 apiai )提供了一些超出基本語音識別的內置功能,如識別講話者意圖的自然語言處理功能。其他軟件包,如谷歌云語音,則專注于語音向文本的轉換。
其中,SpeechRecognition 就因便于使用脫穎而出。
識別語音需要輸入音頻,而在 SpeechRecognition 中檢索音頻輸入是非常簡單的,它無需構建訪問麥克風和從頭開始處理音頻文件的腳本,只需幾分鐘即可自動完成檢索并運行。
SpeechRecognition 兼容 Python2.6 , 2.7 和 3.3+,但若在 Python 2 中使用還需要一些額外的安裝步驟。大家可使用 pip 命令從終端安裝 SpeechRecognition:pip3 install SpeechRecognition
安裝完成后可以打開解釋器窗口進行驗證安裝:
注:不要關閉此會話,在后幾個步驟中你將要使用它。
若處理現有的音頻文件,只需直接調用 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)按照下圖輸入相關命令
最后就可以看到語音轉文字的內容(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語音識別工具包里面下載對應的普通話升學和語言模型。
圖片中標記的就是普通話!下載相關的語音識別工具包。
但是我們要把zh_broadcastnews_64000_utf8.DMP轉化成language-model.lm.bin,再解壓zh_broadcastnews_16k_ptm256_8000.tar.bz2得到zh_broadcastnews_ptm256_8000文件夾。
借鑒剛才那位博主的方法,在Ubuntu下找到speech_recognition文件夾。可能會有很多小伙伴找不到相關的文件夾,其實是在隱藏文件下。大家可以點擊文件夾右上角的三條杠。如下圖所示:
然后給顯示隱藏文件打個勾,如下圖所示:
然后依次按照以下目錄就可以找到啦:
然后把原來的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復制到現在的文件夾下。
最終該文件夾下有以下文件:
然后我們就可以通過麥克風錄入一個語音文件文件(“test.wav”)
在該文件目錄下打開python解釋器輸入以下內容:
就看到了輸出內容,但是我說的是兩個中國,也測試了一下其他的發現識別效果很不好!!!
用官方提供的效果太差,幾乎不能用!那么我看了很多文章以后就想到了一種優化方法,但是只適合小范圍的識別!一些命令啥的應該沒有問題,但是聊天什么的可能就效果不太好。
找到剛才復制的4個文件夾,有一個pronounciation-dictionary.dict的文件夾,打開以后是以下內容:
感覺這內容就是類似于一個字典,很多用詞和平時交流的用詞差距比較大。那么我們改成我們習慣的用詞就可以啦! 抱著試一試的想法,結果還真的可以。識別效果真的不錯!
我的做法是:
(1)把圖片中紅色標記以上的內容繼續保留,紅色以下的內容刪除掉。當然處于保險考慮建議大家給該文件備份一下!
(2)給紅色線以下輸入自己想識別的內容!(按照規則輸入,不同于拼音!!!)最近新型肺炎的情況不斷的變好,聽到最多的一句話就是“中國加油”那么今天的內容就是將“中國加油”實現語音轉文字!希望能早日開學,哈哈哈哈。
3)輸入以下內容:
語音合成個人的理解就是文字轉語音。不過這句話中可以設置client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) result = client.synthesis('你好百度', 'zh', 1, { 'vol': 5,'spd': 3,'pit':9,'per': 3})
音量、聲調、速度、男/女/蘿莉/逍遙。
到此,相信大家對“Linux下如何用python實現語音識別功能”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。