我正在嘗試語音識別并將其用作某些陳述句的輸入,同時讓程式使用 playsound 和 gTTS 模塊向我“說話”。但是我遇到了一個我找不到解決方案的問題,我嘗試了最常見的解決方案,但沒有運氣。
該程式使用playsound、speech_recognition、 和gTTS模塊和兩個函式;speak()讓程式使用 google 的文本到聲音的翻譯與用戶對話,并get_audio()使用speech_recognition's識別器和麥克風類從用戶的麥克風接收輸入。
import os
import time
import playsound
import speech_recognition as sr
from gtts import gTTS
run = True
def speak(text):
tts = gTTS(text=text, lang="en")
filename = "voice.mp3"
tts.save(filename)
playsound.playsound(filename)
def get_audio():
r = sr.Recognizer()
with sr.Microphone() as source:
audio = r.listen(source)
said = ""
try:
said = r.recognize_google(audio)
print(said)
except Exception as e:
print("Exception: " str(e))
return said
while run == True:
text = get_audio()
if "hello" in text:
speak("Hello, how are you?")
if "what are you" in text:
print("")
speak("I am a speech recognition program")
if "goodbye" in text:
speak("Talk to you later" or "Bye" or "Cya")
run = False
我為程式設定了一個while回圈,因此可以進行對話,并且只有在用戶說“再見”時才會中斷。問題似乎是 .mp3 檔案(voice.mp3該speak()函式用于存盤音頻以供程式播放)在創建后無法訪問。python 檔案和 mp3 檔案都存盤在同一個檔案夾中。
這是完整的錯誤訊息:
who are you
hello
Traceback (most recent call last):
File "c:\Users\User\OneDrive\Documents\VS Code Projects\Speech Recognition\main_va.py", line 34, in <module>
speak("Hello, how are you?")
File "c:\Users\User\OneDrive\Documents\VS Code Projects\Speech Recognition\main_va.py", line 12, in speak
tts.save(filename)
File "C:\Python\Python310\lib\site-packages\gtts\tts.py", line 328, in save
with open(str(savefile), "wb") as f:
PermissionError: [Errno 13] Permission denied: 'voice.mp3'
PS C:\Users\User\OneDrive\Documents\VS Code Projects\Speech Recognition>
我在第一次通話時收到了回復(“你是誰”),但在第二次通話后彈出了錯誤訊息(“你好”)。
規格:python 3.10.4
- 播放聲音 1.2.2
- 休息是最新的
uj5u.com熱心網友回復:
您的解決方案作業正常。
我只是會對其進行調整以將檔案留在后面(以防您出于測驗目的而收聽它),而是在開始時將其洗掉(如果存在)。
還將檔案名傳遞給您的函式可確保沒有硬編碼
def speak(text, filename):
if os.path.exists(filename):
os.remove(filename)
tts = gTTS(text=text, lang="en")
tts.save(filename)
playsound.playsound(filename)
uj5u.com熱心網友回復:
我找到了一個似乎可以正常作業的解決方案;每次使用后我都會洗掉 .mp3 檔案,所以在speak()函式結束時我只是使用os.remove(filename)它,然后下次它想說什么時會創建一個新檔案。
我發現其他一些解決方案說你應該在每次制作檔案時重命名檔案名,但這對我來說太混亂了。
這是我對代碼所做的更改,它只是函式中的一行speak():
def speak(text):
tts = gTTS(text=text, lang="en")
filename = "voice.mp3"
tts.save(filename)
playsound.playsound(filename)
os.remove("voice.mp3")
到目前為止,這對我來說非常有效,它可以根據需要接收盡可能多的輸入,因為每次使用該speak()函式時都會洗掉并重新創建檔案。
同樣,如果有人建議或找到更好、更有效的解決方案,我會很樂意接受。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/476988.html
標籤:Python 调试 语音识别 谷歌文字转语音 播放声音
上一篇:ftrace無法跟蹤某些內核函式
