利用下面的博客教程實現語音識別:
《這一篇就夠了 python語音識別指南終極版》鏈接:https://blog.csdn.net/j2IaYU7Y/article/details/79878310
首先感謝這篇文章???的博主寫了一個對新手來說很友好的語音識別教程,本人花了接近一天的時間來實現整個過程以此瞭解以下語音識別的基本原理。
補充原因:
對小白來說,有的地方寫的有一些簡略,在實現上可能會不知所措浪費一些時間,所以這篇博客是在終極版博客提出的基礎上加以補充,幫助小白更迅速的入坑)
幾個注意點:
1.筆者用的是pycharm,所以我在cmd命令行中輸入了pip安裝完SpeechRecognition後,在pycharm中發現仍然沒有作用,但是在cmd中運行python,import speech_recognition as sr沒有問題,原教程如圖:
最後我發現在pycharm中與電腦中的python兩個解釋器路徑不同,即在pycharm的File->Settings中找到如下圖的Project Interpreter,你可以直接在這個解釋器中添加你所需要的庫,點擊右邊綠色“+”號,輸入關鍵包即可下載添加。最後在pycharm中也能正常import speech_recognition as sr 了。
2.在教程中,有這樣一步:
這個r是啥???經過查閱資料,在調用上面語句前這樣實現:r = sr.Recognizer()
3.在實現這一步操作時
筆者遇到了FileNotFoundError這樣的問題:
筆者將harvard.wav文件放在瞭解釋器的會話目錄中,但是仍沒有找到wav文件的路徑,所以我的解決辦法是世界把文件路徑換成絕對路徑,如果絕對路徑中有中文符,則在前面添加一個‘r’即可正確實現,如:
>>>harvard = sr.AudioFile('harvard.wav')#原教程中的寫法
>>>harvard = sr.AudioFile(r'C:\Users\16616\PycharmProjects\hello\venv\Scripts\harvard.wav')
#絕對路徑的寫法
以上便是我遇到的比較棘手的問題,在此給出通過原教程實現wav轉文字和語音說話轉文字的代碼:
wav文件轉文字:
在pycharm中新建python文件:將代碼拷貝進去運行:
import speech_recognition as sr
def wav2txt():
flag = 0
while flag == 0 :#設置while爬蟲,是因爲google網站經常攔截訪問
try:
r=sr.Recognizer()
#print("yes")
#r.recognize_google()#默認識別英文,識別其他語言可以設置參數
harvard = sr.AudioFile(r'C:\Users\16616\PycharmProjects\hello\venv\Scripts\harvard.wav')#括號裏第一個r是轉義,我的應該是絕對路徑裏包含中文
with harvard as source:
audio = r.record(source)
print("translating flie.wav to txt...")
print("success! flie.wav:"+r.recognize_google(audio))
flag=1
except:
flag=0
print("failure...")#被網站攔截了
wav2txt()
運行結果如下:
爲什麼設置while循環的原因(包括下面的語音識別轉文字),是經常會出現這個問題:
ConnectionResetError: [WinError 10054] 遠程主機強迫關閉了一個現有的連接。
出現這種原因代表遠程過於頻繁,所以遠程懷疑是惡意攻擊,設置while循環一直訪問(注意不要用遞歸訪問,當次數增多,很容易發生棧溢出),總會成功一次。
語音識別轉文字:
import speech_recognition as sr
def voice2txt():
flag=0;
r = sr.Recognizer()
mic = sr.Microphone()
while flag == 0:
try:
with mic as source:
r.adjust_for_ambient_noise(source) # 處理噪音
print("now,say something have a try:")
audio = r.listen(source)
print("you just said:"+r.recognize_google(audio,None,"zh-CN",False))
flag =1
except:
flag = 0;
print("sorry, google website can't translate your voice...")
voice2txt()
實現結果如下: