Pocketsphinx溢出错误

时间:2017-11-20 09:13:57

标签: python voice-recognition pocketsphinx

我一直在尝试使用pocketsphinx进行语音识别,但我总是遇到一个奇怪的错误。我的代码如下

#!/usr/bin/env python
from os import environ, path
import pyaudio

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/MERLINv1.lm'))
config.set_string('-dict', path.join(MODELDIR, 'MERLIN/MERLINv1.dic'))
decoder = Decoder(config)


p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, frames_per_buffer=256)
stream.start_stream() 

in_speech_bf = False
decoder.start_utt()
try:
    while True:
        buf = stream.read(256)
        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()
                    print 'Result:', decoder.hyp().hypstr
                    decoder.start_utt()
        else:
            break
    decoder.end_utt()
except:
    print'Exception caught! Handeling...'

当我运行代码时,它应该等我说话,然后打印我认为我说的话,等到我再说话。 实际上,它会等待,打印,然后抛出错误并退出。

Result: DISPLAY CLOCK
Traceback (most recent call last):
  File "SR_test.py", line 26, in <module>
    buf = stream.read(256)
  File "/usr/lib/python2.7/dist-packages/pyaudio.py", line 608, in read
    return pa.read_stream(self._stream, num_frames, exception_on_overflow)
IOError: [Errno -9981] Input overflowed

我看了这个错误,建议是增加或减少块大小。我已经将块更改为256-2048无效。有谁知道如何解决这个问题?先感谢您。

顺便说一下,由于代码一直运行直到出错,我还试图用try-except子句欺骗它忽略错误。不幸的是,它只是打印我的声明并退出。

1 个答案:

答案 0 :(得分:1)

它无法实时处理音频,因为你的CPU太慢,就像你试图在具有大量词汇量的覆盆子pi上运行一样。

您可以在pocketsphinx日志输出中看到确切的实时数字。

您需要获得更快的CPU,或者您也可以尝试优化解码器配置/词汇表,如tutorial to decoder tuning

中所述