Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
def get_audio():
if len(sys.argv) == 1:
r = sr.Recognizer()
with sr.Microphone() as source:
print("Höre zu...")
audio = r.listen(source,phrase_time_limit = 5)
try:
global text
text= (r.recognize_google(audio, language="de_DE"))
print("Deine Anweisung: ", text)
return text
except sr.UnknownValueError:
speak_assistent("Fehler")
if __name__ == "__main__":
speak_assistent("Hello")
speak_assistent("What can i do for you?")
while (1):
text = get_audio().lower()
if text == 0:
continue
if "exit" in str(text) or "bye" in str(text) or "sleep" in str(text):
speak_assistent("Ok bye, " + '.')
break
# calling process text to process the query
process_text(text)
def process_text(abfrage):
try:
if "Wetter" in abfrage or "Temperatur" in abfrage:
UrlWetterdaten = "http://192.168.0.6"
html = urllib.request.urlopen(UrlWetterdaten).read().decode('utf-8')
text = get_text(html)
speak_assistent(text)
return
Du definierst process_text erst zum Ende deines Skriptes. Da hast du es aber vorher schon ausprobiert auszufuehren. Du musst das weiter nach oben vor den if __name__ ... Block packen, der ist immer das letzte das ausgefuehrt werden sollte.
__deets__ hat geschrieben: Montag 2. Dezember 2019, 18:17
Du definierst process_text erst zum Ende deines Skriptes. Da hast du es aber vorher schon ausprobiert auszufuehren. Du musst das weiter nach oben vor den if __name__ ... Block packen, der ist immer das letzte das ausgefuehrt werden sollte.
def get_audio():
if len(sys.argv) == 1:
r = sr.Recognizer()
with sr.Microphone() as source:
print("Höre zu...")
audio = r.listen(source,phrase_time_limit = 5)
try:
global text
text= (r.recognize_google(audio, language="de_DE"))
print("Deine Anweisung: ", text)
return text
process_text(text)
except sr.UnknownValueError:
print()
def process_text(abfrage):
try:
if "Wetter" in abfrage or "Temperatur" in abfrage:
UrlWetterdaten = "http://192.168.0.6"
html = urllib.request.urlopen(UrlWetterdaten).read().decode('utf-8')
text = get_text(html)
speak_assistent(text)
return
elif "Denise" in abfrage or "Wer bist du" in abfrage:
Antwort = "Hallo ich bin Denise dein persönlicher Home Assistent, zurzeit werde ich von Juljano Möller entwickelt."
return
elif "Wetterwarnung" in abfrage or "Unwetter in Minden" in abfrage or "Unwetter" in abfrage:
# UnwetterWarnung()
return
elif "Licht aus Wohnzimmer" in abfrage or "Licht aus" in abfrage or "In Wohnzimmer licht aus":
speak_assistent("Zurzeit kann ich das noch nicht")
return
elif "Uhrzeit" in abfrage or "Wie spät ist es" in abfrage:
speak_assistent(time.strftime("%d.%m.%Y %H:%M:%S"))
return
elif "Meine Youtube playlist abspielen" in abfrage or "Youtube Musik" in abfrage or "Musik" in abfrage:
print()
return
elif "Nacht" in abfrage or "Gute Nacht" in abfrage or "Schlaf gut" in abfrage:
speak_assistent("Gute Nacht, Juljano Schlaf gut")
return
except:
speak_assistent("Tut mir leid das ich dich nicht verstehe! Juljano wird mich bald klüger machen")
if __name__ == "__main__":
get_audio()
speak_assistent("Hallo")
while (1):
text = get_audio()
Trotzdem werden die Befehle in der Funktion process_text nicht ausgeführt
@testlon: jetzt rufst Du `process_text` gar nicht mehr auf.
Die Importe fehlen. Ein `sys.argv` sollte nicht in einer tief verschachtelten Funktion benutzt werden, wo das niemand erwartet. Vergiß gleich wieder, dass es sowas wie `global´ gibt, zumal Du ja korrekterweise `return` aufrufst. Alles was nach `return` kommt, wird nicht mehr erreicht.
Einbuchstabige Variablennamen vermeiden, `r` sollte zum Beispiel `recognizer´ heißen.
Nackte `except` niemals benutzen, denn das fängt auch viele Programmierfehler ab und die Ausgabe ist zu Fehlersuche nicht sehr hilfreich.
`while (1)` sollte `while True:` sein. Innerhalb der Schleife machst Du nichts.
import time
import urllib.request
import speech_recognition as sr
URL_WETTERDATEN = "http://192.168.0.6"
def get_text():
# missing
pass
def speak_assistent():
# missing
pass
def get_audio():
recognizer = sr.Recognizer()
with sr.Microphone() as source:
print("Höre zu...")
audio = recognizer.listen(source, phrase_time_limit=5)
try:
text = recognizer.recognize_google(audio, language="de_DE")
print("Deine Anweisung: ", text)
return text
except sr.UnknownValueError:
print()
return ""
def process_text(abfrage):
if "Wetter" in abfrage or "Temperatur" in abfrage:
html = urllib.request.urlopen(URL_WETTERDATEN).read().decode('utf-8')
text = get_text(html)
speak_assistent(html)
elif "Denise" in abfrage or "Wer bist du" in abfrage:
speak_assistent("Hallo ich bin Denise dein persönlicher Home Assistent, zurzeit werde ich von Juljano Möller entwickelt.")
elif "Wetterwarnung" in abfrage or "Unwetter in Minden" in abfrage or "Unwetter" in abfrage:
# UnwetterWarnung()
pass
elif "Licht aus Wohnzimmer" in abfrage or "Licht aus" in abfrage or "In Wohnzimmer licht aus":
speak_assistent("Zurzeit kann ich das noch nicht")
elif "Uhrzeit" in abfrage or "Wie spät ist es" in abfrage:
speak_assistent(time.strftime("%d.%m.%Y %H:%M:%S"))
elif "Meine Youtube playlist abspielen" in abfrage or "Youtube Musik" in abfrage or "Musik" in abfrage:
print()
elif "Nacht" in abfrage or "Gute Nacht" in abfrage or "Schlaf gut" in abfrage:
speak_assistent("Gute Nacht, Juljano Schlaf gut")
else:
speak_assistent("Tut mir leid das ich dich nicht verstehe! Juljano wird mich bald klüger machen")
def main():
speak_assistent("Hallo")
while True:
text = get_audio()
process_text(text)
if __name__ == "__main__":
main()
Funktionen sollten nach Tätigkeiten benannt sein, `speak_assistent` liest sich im Code daher immer sehr holprig. Normalerweise nennt man eine solche Funktion einfach `say`. Solche langen if-Ketten versucht man normalerweise durch eine passende Datenstruktur zu ersetzen. Bei Deinen Abfragen ist die Groß-Klein-Schreibung wichtig und an einigen Stellen falsch.