Ich baue gerade einen persönlichen Assistenten Bot als eine Herausforderung, während ich in der Schulpause bin. Ich habe derzeit Probleme bei der Integration ChatterBot mit einem SpeechRecognition. Wenn ich rufe beide in der gleichen Datei, ich bekomme keine Fehler:Python Spracherkennung und Chatterbot
import speech_recognition as sr
from chatterbot import ChatBot
def setup():
chatbot = ChatBot(
'Ron Obvious',
trainer='chatterbot.trainers.ChatterBotCorpusTrainer'
)
# Train based on the english corpus
chatbot.train("chatterbot.corpus.english")
while True:
get_response(chatbot)
def get_response(chatbot):
# Get a response to an input statement
speech = return_audio()
print chatbot.get_response(speech)
def return_audio():
r = sr.Recognizer()
with sr.Microphone() as source:
audio = r.listen(source)
try:
speech = r.recognize_google(audio)
try:
speech = str(speech)
print speech
return speech
except TypeError:
print "Error! Could not convert speech to string!"
except sr.UnknownValueError:
print "Error! Could not process that audio."
return "Error!"
except sr.RequestError as e:
print "Error! No internet connection to Google Sound Recognizer."
return "Error!"
setup()
Allerdings, wenn ich die beide in zwei verschiedenen Dateien zu behalten, erhalte ich ein Attribut. Ich komme um das Programm herum, indem es eine Ausnahme auslöst, aber diese Ausnahme bedeutet, dass der Bot niemals tatsächlich mit dem Benutzer interagiert.
Bellow sind die beiden Dateien: Anhören
import speech_recognition as sr
from chatterbot import ChatBot
import Messanger_Alert as MA
import Weather
import Email_Alert
import Chat
import Run
def start():
bot = Chat.start()
MA_client = MA.login()
print "Hello Luke!"
print "I am ready for your command! :D"
while True:
speech = str(return_audio())
if not speech:
print "Error! Speech returned nonetype!"
continue
else:
try:
if any(word in speech for word in ("Jason", "jason")): #Old key words: "SysGen", "Sysgen", "System", "system" - will reimpliment if needed
if any(word in speech for word in ("Message", "message", "Messenger", "messenger", "Facebook", "facebook")):
if any(word in speech for word in ("Send", "send")):
MA.send_message(MA_client) #now getting an attribute error.
print "Ready for next command!"
elif any(word in speech for word in ("Search Friend", "search friend", "Seach friend", "search Friend", "friend", "Friend", "friends", "Friends")):
MA.friend_search(MA_client)
print "Ready for next command!"
elif any(word in speech for word in ("Check", "check")):
MA.check_message(MA_client)
print "Ready for next command!"
elif any(word in speech for word in ("Email", "email")):
if any(word in speech for word in ("Personal", "personal", "Home", "home")):
Email_Alert.login1()
print "Ready for next command!"
elif any(word in speech for word in ("School", "school", "Dorm", "dorm", "UCSD", "ucsd")):
Email_Alert.login2()
print "Ready for next command!"
elif any(word in speech for word in ("Weather", "weather", "Forecast", "forecast")):
Weather.decide()
elif any(word in speech for word in ("Goodnight", "goodnight", "Bye", "bye", "Goodbye", "goodbye")):
print "Goodnight Luke!"
exit()
else:
Chat.talk(bot, speech)
elif speech == "Error!":
return_audio()
else:
Chat.talk(bot, speech)
except sr.UnknownValueError:
print "Error! Could not process that audio."
except sr.RequestError as e:
print "Error! No internet connection to Google Sound Recognizer."
def return_audio():
r = sr.Recognizer()
with sr.Microphone() as source:
audio = r.listen(source)
try:
speech = r.recognize_google(audio)
try:
speech = str(speech)
print speech
return speech
except TypeError:
print "Error! Could not convert speech to string!"
except sr.UnknownValueError:
print "Error! Could not process that audio."
return "Error!"
except sr.RequestError as e:
print "Error! No internet connection to Google Sound Recognizer."
return "Error!"
Chat:
from chatterbot import ChatBot
from chatterbot.trainers import ListTrainer
import os.path
import Listen
def start():
file_list = ["Jason_logs.txt", "Sample1.txt"]
chatbot = ChatBot('Jason', trainer='chatterbot.trainers.ChatterBotCorpusTrainer')
for path in file_list:
if os.path.exists(path) == "True":
train_from_text(chatbot, path)
train_bot(chatbot)
def train_from_text(chatbot, path):
conversation = []
with open(path, 'r') as f:
while True:
line1 = f.readline()
line2 = f.readline()
if not line2:
break
else:
conversation.append(line1)
conversation.append(line2)
chatbot.set_trainer(ListTrainer)
chatbot.train(conversation)
def train_bot(chatbot):
# Train based on the english corpus
chatbot.train("chatterbot.corpus.english")
# Train based on english greetings corpus
chatbot.train("chatterbot.corpus.english.greetings")
# Train based on the english conversations corpus
chatbot.train("chatterbot.corpus.english.conversations")
def talk(chatbot, entry):
try:
response = chatbot.get_response(str(entry))
print response
with open("Jason_logs.txt", "a") as f:
f.write(entry)
f.write(response)
except TypeError:
print "Error! Could not convert speech to string!"
except AttributeError:
print "Error! Speech not accepted by Jason's Chatterbot libraries."
ich nicht ganz sicher bin, warum dies so ist, weil sie beide arbeiten, wenn sie in der gleichen Datei (die erster Teil des Codes). Aus organisatorischen Gründen möchte ich die beiden Dateien jedoch lieber getrennt aufbewahren.
Danke für alle Ideen und Lösungen, die Sie geben können!
** Edit: ** Hier ist die Traceback-Fehler (was, wenn ich das Attribut Fehler in Chat kommentieren Sie entsteht):
Traceback (most recent call last):
File "C:/Users/lukec/PycharmProjects/Sysgen_AI/Run_File.py", line 24, in <module>
startup()
File "C:/Users/lukec/PycharmProjects/Sysgen_AI/Run_File.py", line 13, in startup
voice()
File "C:/Users/lukec/PycharmProjects/Sysgen_AI/Run_File.py", line 19, in voice
call Jason
Listen.start()
File "C:\Users\lukec\PycharmProjects\Sysgen_AI\Listen.py", line 47, in start
Chat.talk(bot, speech)
File "C:\Users\lukec\PycharmProjects\Sysgen_AI\Chat.py", line 39, in talk
response = chatbot.get_response(str(entry))
AttributeError: 'NoneType' object has no attribute 'get_response'
Sie sollten den tatsächlichen Fehler enthalten, den Sie erhalten haben (der Traceback hat unglaublich wichtige Informationen). Sie vergleichen auch nicht Äpfel und Orangen, da Ihr Code, der in zwei Dateien aufgeteilt ist, nicht genau dasselbe zu tun scheint wie die Einzeldatei-Version (was bedeutet, dass das Problem eine andere Änderung sein könnte und nichts mit Sein zu tun hat) in zwei Dateien). –
können Sie bitte die vollständige Traceback von dem Fehler buchen. –
Traceback Fehler geschrieben. Danke für die schnellen Antworten! – TobyTobyo