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
中所述
我一直在尝试使用 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
中所述