无法在启动时运行Pocketsphinx脚本

时间:2018-01-27 18:20:59

标签: python raspberry-pi pyaudio pocketsphinx

我正在使用Raspberry Pi上的语音界面制作智能镜像。有两个单独的脚本,一个用于语音控制,另一个用于GUI。我正试图在RPi启动时启动它们。问题是只有GUI脚本启动。我可以从终端手动运行SR脚本,但我无法自动启动它。到目前为止,我已经尝试过:

- 使用crontab启动

- 使用rc.local

启动

- 使用OS.SYSTEM

启动另一个脚本

- 使用POPEN从另一个脚本启动一个脚本

- 使用bash脚本启动另一个脚本

- 使用bash脚本启动时启动

- 仅在加载LXDE后启动

- 启动一个单独的脚本来启动它们

每个场景只会将脚本发送到无限错误循环中。 以下是简化代码:

#!/usr/bin/env python
from os import environ, path, system
import pyaudio
import time
import sys
from pocketsphinx.pocketsphinx import *
from sphinxbase.sphinxbase import *


MODELDIR = "pocketsphinx/model"
DATADIR = "pocketsphinx/test/data"

# Create a decoder with certain model
config = Decoder.default_config()
config.set_string('-hmm', path.join(MODELDIR, 'en-us/en-us'))
config.set_string('-lm', path.join(MODELDIR, 'MERLIN/MERLINv3.lm'))
config.set_string('-dict', path.join(MODELDIR, 'MERLIN/MERLINv3.dic'))
config.set_string('-logfn', '/dev/null')

decoder = Decoder(config)

def getKWord():
    try:
        stream.start_stream() 
        in_speech_bf = False
        decoder.start_utt()
        while True:
            buf = stream.read(4096)
            if buf:
                decoder.process_raw(buf, False, False)
                if decoder.get_in_speech() != in_speech_bf:
                    in_speech_bf = decoder.get_in_speech()
                    if not in_speech_bf:
                        decoder.end_utt()
                        stream.stop_stream()
                        #system('mpg321 /home/pi/MERLIN_main/process_sounds/Beep_low.mp3')
                        return str(decoder.hyp().hypstr)
                        system('mpg321 /home/pi/MERLIN_main/process_sounds/Beep_low.mp3')

            else:
                decoder.end_utt()
                stream.stop_stream()
                print('PocketSphinx could not decode')
                return "Pocketsphinx could not decode. Try again"
        decoder.end_utt()
    except:
        print('PocketSphinx had an error')
        return "Oops. Pocketsphinx had an error"


p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, frames_per_buffer=4096)
try:
    print ("say something")
    while True:
        kword=getKWord()
        system('mpg321 /home/pi/MERLIN_main/process_sounds/Beep_hi.mp3')
        # do stuff
        time.sleep(.1)

except KeyboardInterrupt:
    sys.exit()

错误在getKWord()中,并且是[Errno -9988] Stream Closed

循环只是一遍又一遍地吐出来。 我知道这不是一个代码问题,因为它在我使用Terminal启动它的时候几天没有问题。我只是无法让它在启动时启动。 到目前为止没有任何工作。提前感谢您的建议。

0 个答案:

没有答案