2017-07-18 1 views
1

Ich versuche, ein Skript mit Spracherkennung zu machen. Also ich habe 3 Dateien. 1 Datei hört zu was ich sage und dann drucke es in eine Datei. Das andere Skript liest die Datei und antwortet je nachdem, was die Datei sagt. Das dritte Skript beginnt gerade die 2 anderen SkriptenPython-Skript wartet nicht auf Eingabe in Dateien

1. Skript (stt.py):

import os 
import pyttsx 
import sys 
from pocketsphinx import LiveSpeech, get_model_path 
engine = pyttsx.init() 
voices = engine.getProperty('voices') 

engine.setProperty('voice', 'english+f3') 

f = open("test.out", 'w') 
sys.stdout = f 


model_path = get_model_path() 

speech = LiveSpeech(
    verbose=False, 
    sampling_rate=16000, 
    buffer_size=2048, 
    no_search=False, 
    full_utt=False, 
    hmm=os.path.join(model_path, 'en-us'), 
    lm=os.path.join(model_path, 'en-us.lm.bin'), 
    dic=os.path.join(model_path, 'cmudict-en-us.dict') 
) 

f = open("test.out", 'w') 
sys.stdout = f 
for phrase in speech: 
    print (phrase) 
    f.write ("end") 

2st Skript (speak.py):

import pyttsx 
import sys 

engine = pyttsx.init() 
voices = engine.getProperty('voices') 

f = open("test.out", 'w') 
sys.stdout = f 

volume = engine.getProperty('volume') 
engine.setProperty('voice', 'english+f3') 
engine.setProperty('volume', volume-0.10) 
engine.say("good morning master, I'm Moas. How can I help you?") 
engine.runAndWait 



if 'start' in open('test.out').read(): 
    engine.say("Hello Admin") 
else: 
    engine.say("I did not understand") 
engine.runAndWait() 

3. Skript (starten. py)

execfile("speak.py") 
execfile("stt.py") 

Also, wenn ich "start.py" Start Es Terminal öffnet, sagt " goodmorning master, im moas wie kann ich dir helfen, ich habe es nicht verstanden ". Dann sitzt es einfach und wartet auf nichts. Wenn ich nur "speak.py" starte, sagt es dasselbe wie oben und schaltet sich dann aus.

Was ich die Datei tun soll, ist die Datei alle 10 Sekunden zu überprüfen, um zu sehen, ob es sich geändert hat und dann zu antworten, je nachdem, was die Datei sagt.

Wer hat irgendwelche Ideen?

+0

Die Antworten [hier] (https://stackoverflow.com/questions/1703640/how-to-implement-a-pythonic-equivalent -von-Schwanz-f) kann hilfreich sein. Aber warum öffnen beide Skripte "test.out" zum Schreiben, und warum öffnet stt.py es zweimal (ohne dazwischenliegende '.close()')? –

Antwort

1

Ich glaube, das Problem ist, dass Sie Klammern im zweiten Skript vergessen für engine.runandwait

+0

Guter Punkt, aber später nennen sie 'engine.runAndWait()' sowieso. –

+0

für 1 upvote, könnten Sie erklären, warum es einen Unterschied macht? weil es für mich wie ein Kommentar aussieht. –

+0

Sie müssen die Klammern nach haben, um eine Methode aufzurufen –