溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux下如何用python實(shí)現(xiàn)語(yǔ)音識(shí)別功能

發(fā)布時(shí)間:2023-05-11 10:09:25 來(lái)源:億速云 閱讀:114 作者:zzz 欄目:編程語(yǔ)言

本篇內(nèi)容主要講解“Linux下如何用python實(shí)現(xiàn)語(yǔ)音識(shí)別功能”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Linux下如何用python實(shí)現(xiàn)語(yǔ)音識(shí)別功能”吧!

選擇合適的python語(yǔ)音識(shí)別包

PyPI中有一些現(xiàn)成的語(yǔ)音識(shí)別軟件包。其中包括:
apiai
google-cloud-speech
pocketsphinx
SpeechRcognition
watson-developer-cloud
wit
一些軟件包(如 wit 和 apiai )提供了一些超出基本語(yǔ)音識(shí)別的內(nèi)置功能,如識(shí)別講話者意圖的自然語(yǔ)言處理功能。其他軟件包,如谷歌云語(yǔ)音,則專注于語(yǔ)音向文本的轉(zhuǎn)換。
其中,SpeechRecognition 就因便于使用脫穎而出。
識(shí)別語(yǔ)音需要輸入音頻,而在 SpeechRecognition 中檢索音頻輸入是非常簡(jiǎn)單的,它無(wú)需構(gòu)建訪問(wèn)麥克風(fēng)和從頭開(kāi)始處理音頻文件的腳本,只需幾分鐘即可自動(dòng)完成檢索并運(yùn)行。

安裝SpeechRecognition

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

安裝完成后可以打開(kāi)解釋器窗口進(jìn)行驗(yàn)證安裝:

Linux下如何用python實(shí)現(xiàn)語(yǔ)音識(shí)別功能

注:不要關(guān)閉此會(huì)話,在后幾個(gè)步驟中你將要使用它。
若處理現(xiàn)有的音頻文件,只需直接調(diào)用 SpeechRecognition ,注意具體的用例的一些依賴關(guān)系。同時(shí)注意,安裝 PyAudio 包來(lái)獲取麥克風(fēng)輸入

識(shí)別器類

SpeechRecognition 的核心就是識(shí)別器類。
Recognizer API 主要目是識(shí)別語(yǔ)音,每個(gè) API 都有多種設(shè)置和功能來(lái)識(shí)別音頻源的語(yǔ)音,這里我選擇的是recognize_sphinx(): CMU Sphinx - requires installing PocketSphinx(支持離線的語(yǔ)音識(shí)別
那么我們就需要通過(guò)pip命令來(lái)安裝PocketSphinx,在安裝過(guò)程中也容易出現(xiàn)一大串紅色字體的錯(cuò)誤。

音頻文件的使用

下載相關(guān)的音頻文件保存到特定的目錄(直接保存到ubuntu桌面)
注意:
AudioFile 類可以通過(guò)音頻文件的路徑進(jìn)行初始化,并提供用于讀取和處理文件內(nèi)容的上下文管理器界面。
SpeechRecognition 目前支持的文件類型有:

  • WAV: 必須是 PCM/LPCM 格式

  • AIFF

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

英文的語(yǔ)音識(shí)別

在完成以上基礎(chǔ)工作以后,就可以進(jìn)行英文的語(yǔ)音識(shí)別了。
(1)打開(kāi)終端
(2)進(jìn)入語(yǔ)音測(cè)試文件所在目錄(博主的是 桌面)
(3)打開(kāi)python解釋器
(4)按照下圖輸入相關(guān)命令

Linux下如何用python實(shí)現(xiàn)語(yǔ)音識(shí)別功能

最后就可以看到語(yǔ)音轉(zhuǎn)文字的內(nèi)容(this they’ll smell …),其實(shí)效果還是很不錯(cuò)的!因?yàn)槭怯⑽?,并且沒(méi)有噪音。

噪音對(duì)語(yǔ)音識(shí)別的影響

噪聲在現(xiàn)實(shí)世界中確實(shí)存在,所有錄音都有一定程度的噪聲,而未經(jīng)處理的噪音可能會(huì)破壞語(yǔ)音識(shí)別應(yīng)用程序的準(zhǔn)確性。
通過(guò)嘗試轉(zhuǎn)錄效果并不好,我們可以通過(guò)嘗試調(diào)用 Recognizer 類的adjust_for_ambient_noise()命令。

麥克風(fēng)的使用

若要使用 SpeechRecognizer 訪問(wèn)麥克風(fēng)則必須安裝 PyAudio 軟件包。
如果使用的是基于 Debian的Linux(如 Ubuntu ),則可使用 apt 安裝 PyAudio:sudo apt-get install python-pyaudio python3-pyaudio安裝完成后可能仍需要啟用 pip3 install pyaudio ,尤其是在虛擬情況下運(yùn)行。
在安裝完pyaudio的情況下可以通過(guò)python實(shí)現(xiàn)語(yǔ)音錄入生成相關(guān)文件。
pocketsphinx的使用注意:
支持文件格式:wav
音頻文件的解碼要求:16KHZ,單聲道
利用python實(shí)現(xiàn)錄音并生成相關(guān)文件程序代碼如下:

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解釋器實(shí)現(xiàn)時(shí)一定要注意空格!??!
最后生成的文件就在Python解釋器回話所在目錄下,可以通過(guò)play來(lái)播放測(cè)試一下,如果沒(méi)有安裝play可以通過(guò)apt命令來(lái)安裝。

中文的語(yǔ)音識(shí)別

在進(jìn)行完以前的工作以后,我們對(duì)語(yǔ)音識(shí)別的流程大概有了一定的了解,但是作為一個(gè)中國(guó)人總得做一個(gè)中文的語(yǔ)音識(shí)別吧!

我們要在CMU Sphinx語(yǔ)音識(shí)別工具包里面下載對(duì)應(yīng)的普通話升學(xué)和語(yǔ)言模型。

Linux下如何用python實(shí)現(xiàn)語(yǔ)音識(shí)別功能

圖片中標(biāo)記的就是普通話!下載相關(guān)的語(yǔ)音識(shí)別工具包。

但是我們要把zh_broadcastnews_64000_utf8.DMP轉(zhuǎn)化成language-model.lm.bin,再解壓zh_broadcastnews_16k_ptm256_8000.tar.bz2得到zh_broadcastnews_ptm256_8000文件夾。
借鑒剛才那位博主的方法,在Ubuntu下找到speech_recognition文件夾??赡軙?huì)有很多小伙伴找不到相關(guān)的文件夾,其實(shí)是在隱藏文件下。大家可以點(diǎn)擊文件夾右上角的三條杠。如下圖所示:

Linux下如何用python實(shí)現(xiàn)語(yǔ)音識(shí)別功能

然后給顯示隱藏文件打個(gè)勾,如下圖所示:

Linux下如何用python實(shí)現(xiàn)語(yǔ)音識(shí)別功能

然后依次按照以下目錄就可以找到啦:

Linux下如何用python實(shí)現(xiàn)語(yǔ)音識(shí)別功能

然后把原來(lái)的en-US改名成en-US-bak,新建一個(gè)文件夾en-US,把解壓出來(lái)的zh_broadcastnews_ptm256_8000改成acoustic-model,把chinese.lm.bin改成language-model.lm.bin,把pronounciation-dictionary.dic改后綴成dict,復(fù)制這三個(gè)文件到en-US里。同時(shí)把原來(lái)en-US文件目錄下的LICENSE.txt復(fù)制到現(xiàn)在的文件夾下。
最終該文件夾下有以下文件:

Linux下如何用python實(shí)現(xiàn)語(yǔ)音識(shí)別功能

然后我們就可以通過(guò)麥克風(fēng)錄入一個(gè)語(yǔ)音文件文件(“test.wav”)
在該文件目錄下打開(kāi)python解釋器輸入以下內(nèi)容:

Linux下如何用python實(shí)現(xiàn)語(yǔ)音識(shí)別功能

就看到了輸出內(nèi)容,但是我說(shuō)的是兩個(gè)中國(guó),也測(cè)試了一下其他的發(fā)現(xiàn)識(shí)別效果很不好?。?!

小范圍中文識(shí)別

用官方提供的效果太差,幾乎不能用!那么我看了很多文章以后就想到了一種優(yōu)化方法,但是只適合小范圍的識(shí)別!一些命令啥的應(yīng)該沒(méi)有問(wèn)題,但是聊天什么的可能就效果不太好。
找到剛才復(fù)制的4個(gè)文件夾,有一個(gè)pronounciation-dictionary.dict的文件夾,打開(kāi)以后是以下內(nèi)容:

Linux下如何用python實(shí)現(xiàn)語(yǔ)音識(shí)別功能

感覺(jué)這內(nèi)容就是類似于一個(gè)字典,很多用詞和平時(shí)交流的用詞差距比較大。那么我們改成我們習(xí)慣的用詞就可以啦! 抱著試一試的想法,結(jié)果還真的可以。識(shí)別效果真的不錯(cuò)!
我的做法是:
(1)把圖片中紅色標(biāo)記以上的內(nèi)容繼續(xù)保留,紅色以下的內(nèi)容刪除掉。當(dāng)然處于保險(xiǎn)考慮建議大家給該文件備份一下!
(2)給紅色線以下輸入自己想識(shí)別的內(nèi)容!(按照規(guī)則輸入,不同于拼音!?。。┳罱滦头窝椎那闆r不斷的變好,聽(tīng)到最多的一句話就是“中國(guó)加油”那么今天的內(nèi)容就是將“中國(guó)加油”實(shí)現(xiàn)語(yǔ)音轉(zhuǎn)文字!希望能早日開(kāi)學(xué),哈哈哈哈。

Linux下如何用python實(shí)現(xiàn)語(yǔ)音識(shí)別功能

3)輸入以下內(nèi)容:

Linux下如何用python實(shí)現(xiàn)語(yǔ)音識(shí)別功能

語(yǔ)音合成

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

到此,相信大家對(duì)“Linux下如何用python實(shí)現(xiàn)語(yǔ)音識(shí)別功能”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI