Pocketsphinx 溢出错误

Pocketsphinx Overflow Error

我一直在尝试使用 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 子句诱使它忽略错误。不幸的是,它只是打印我的声明并退出。

它无法实时处理音频很可能是因为你的 CPU 太慢了,就像你试图 运行 在 raspberry pi 上使用大量词汇一样。

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

您需要变得更快 CPU 或者您也可以尝试优化解码器 configuration/vocabulary 如 tutorial to decoder tuning

中所述