|
你能順利在Python應(yīng)用程序中實(shí)現(xiàn)語(yǔ)音識(shí)別嗎?閱讀本教程,了解使用開(kāi)源Python庫(kù)實(shí)現(xiàn)語(yǔ)音識(shí)別的簡(jiǎn)單方法。 你是否曾經(jīng)想嘗試一個(gè)語(yǔ)音識(shí)別項(xiàng)目,但發(fā)現(xiàn)它太嚇人了? 我們來(lái)創(chuàng)建一些更復(fù)雜的東西,比如完整的音頻聊天機(jī)器人或者語(yǔ)音助手,怎么樣? 組合這類(lèi)項(xiàng)目的框架代碼實(shí)際上非常簡(jiǎn)單,這歸功于那些我們可以依賴的開(kāi)源庫(kù)。結(jié)合這一點(diǎn),讓我們看看如何開(kāi)始用Python創(chuàng)建一個(gè)基本的玩具語(yǔ)音識(shí)別應(yīng)用程序。一旦我們掌握了基礎(chǔ)知識(shí),就可以更深入的使用它了。 丑話說(shuō)在先,我們的Python玩具應(yīng)用程序沒(méi)有實(shí)際作用,但它會(huì)向我們介紹一些概念,這些概念對(duì)以后構(gòu)建更復(fù)雜的事物非常有用。在某種程度上來(lái)說(shuō),如果我們正確地構(gòu)建這個(gè)玩具,修改它來(lái)做更復(fù)雜的事情將會(huì)相對(duì)容易。 我們的應(yīng)用程序在完成后能執(zhí)行的操作:它會(huì)聽(tīng)我們說(shuō)什么,然后鸚鵡學(xué)舌地把它傳回給我們,僅此而已。這件事的意義是,我們將學(xué)會(huì)在應(yīng)用程序中構(gòu)建語(yǔ)音識(shí)別和音頻回放。 導(dǎo)入需要的庫(kù)首先,導(dǎo)入幾個(gè)我們需要的庫(kù)(來(lái)自開(kāi)源庫(kù)): import osimport speech_recognition as srfrom pydub import AudioSegmentfrom pydub.playback import playfrom gtts import gTTS as tts 注釋:
識(shí)別語(yǔ)音接下來(lái)要做的事情——可能是語(yǔ)音識(shí)別應(yīng)用程序最重要的事情,就是識(shí)別語(yǔ)音。 為此,我們首先需要從麥克風(fēng)捕獲傳入的音頻,然后執(zhí)行語(yǔ)音識(shí)別。這都是通過(guò)speech recognition庫(kù)來(lái)處理的。 這是捕捉語(yǔ)音的功能: def capture(): '''Capture audio''' rec = sr.Recognizer() with sr.Microphone() as source: print('I\'M LISTENING...') audio = rec.listen(source, phrase_time_limit=5) try: text = rec.recognize_google(audio, language='en-US') return text except: speak('Sorry, I could not understand what you said.') return 0就這樣,語(yǔ)音捕獲和識(shí)別,還覺(jué)得很可怕嗎? 注意,一旦這個(gè)應(yīng)用程序開(kāi)始運(yùn)行,它將以5秒的間隔進(jìn)行監(jiān)聽(tīng),并逐個(gè)處理這5秒間隔。實(shí)用嗎?不,一點(diǎn)也不。如果我們需要做一些更復(fù)雜的事情,可以把它進(jìn)行調(diào)整,也許是聽(tīng)一個(gè)激活關(guān)鍵字,或者聽(tīng)我們說(shuō)話的整個(gè)過(guò)程,不管長(zhǎng)度等等。這僅僅是一個(gè)非常簡(jiǎn)單的開(kāi)始。 回放語(yǔ)音那么,我們捕捉到語(yǔ)音之后會(huì)做什么呢?我們需要處理它,具體該怎么做呢? 我們正在構(gòu)建的應(yīng)用程序?qū)⒃诤艽蟪潭壬蠜Q定“process it”的含義。這次我們的處理將或多或少是一個(gè)占位符函數(shù),以便將來(lái)做其他事情。目前我們的玩具應(yīng)用程序?qū)⑻幚聿蹲降恼Z(yǔ)音,并將其自動(dòng)回放給我們(輸出到控制臺(tái))。 這是我們處理的一個(gè)簡(jiǎn)單函數(shù): def process_text(name, input): '''Process what is said''' speak(name + ', you said: '' + input + ''.') return 讓?xiě)?yīng)用程序說(shuō)話我們還想讓這個(gè)應(yīng)用程序說(shuō)話,讓我們編寫(xiě)一個(gè)函數(shù),它使用谷歌文本-語(yǔ)音引擎來(lái)實(shí)現(xiàn)這個(gè)功能。 def speak(text): '''Say something''' # Write output to console print(text) # Save audio file speech = tts(text=text, lang='en') speech_file = 'input.mp3' speech.save(speech_file) # Play audio file sound = AudioSegment.from_mp3(speech_file) play(sound) os.remove(speech_file) 首先,我們將傳遞給函數(shù)的內(nèi)容打印到控制臺(tái);然后使用谷歌文本-語(yǔ)音的轉(zhuǎn)換,從文本中創(chuàng)建一個(gè)音頻文件;再將音頻文件保存到磁盤(pán);最后使用pydub庫(kù)重新打開(kāi)并播放文件。 這是最難處理的事情?,F(xiàn)在我們只需要幾行代碼來(lái)驅(qū)動(dòng)這個(gè)過(guò)程。 if __name__ == '__main__': # First get name speak('What is your name?') name = capture() speak('Hello, ' + name + '.') # Then just keep listening & responding while 1: speak('What do you have to say?') captured_text = capture().lower() if captured_text == 0: continue if 'quit' in str(captured_text): speak('OK, bye, ' + name + '.') break # Process captured text process_text(name, captured_text) speak()和capture()函數(shù)都用于在提示時(shí)獲取用戶名,然后向他們打招呼。之后進(jìn)入一個(gè)while循環(huán),在捕獲語(yǔ)音輸入和執(zhí)行一些非?;镜臋z查之間的循環(huán),以確保捕獲了一些內(nèi)容,并且用戶沒(méi)有說(shuō)“退出”來(lái)退出。捕獲的文本被傳遞給process_text()函數(shù),該函數(shù)響應(yīng)剛才所說(shuō)的內(nèi)容,然后無(wú)限重復(fù)。 再一次申明:這里沒(méi)有什么復(fù)雜的東西。 將上述所有代碼保存到 voice_recognition_test.py 文件中。 現(xiàn)在來(lái)看看我們與極簡(jiǎn)語(yǔ)音識(shí)別應(yīng)用程序的對(duì)話。用上面的代碼運(yùn)行它,查看結(jié)果如下(當(dāng)然,同時(shí)想象我正在說(shuō)話,并讓別人重復(fù)我的話): $ python voice_recognition_test.py What is your name? I'M LISTENING... Hello, Matthew. What do you have to say? I'M LISTENING... Matthew, you said: 'where are you from'. What do you have to say? I'M LISTENING... Matthew, you said: 'i'd like some pizza'. What do you have to say? I'M LISTENING... Matthew, you said: 'what is the meaning of life'. What do you have to say? I'M LISTENING... OK, bye, Matthew. Process finished with exit code 0 很酷!如果它真的能做點(diǎn)什么,那就更酷了。那么讓我們把注意力轉(zhuǎn)向下一次。 下一次,讓我們輕松應(yīng)對(duì)一些更復(fù)雜的內(nèi)容,比如將spaCy集成到代碼中,并嘗試一些簡(jiǎn)單的NLP任務(wù),比如口語(yǔ)句子分類(lèi)、情感分析和命名實(shí)體識(shí)別。 再下一次,我們可以看看一些更實(shí)用的功能,比如制作個(gè)人語(yǔ)音助手,這將需要對(duì)我們的界面進(jìn)行一些額外的調(diào)整。 |
|
|
來(lái)自: 昵稱32937624 > 《待分類(lèi)》