음성 인식을 위해 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 절을 사용하여 오류를 무시하도록 속이려고했습니다. 불행히도, 그냥 내 진술을 인쇄하고 어쨌든 종료됩니다.
에 설명 된대로 디코더 구성/어휘를 최적화 시도 할 수 있습니다. Poketsphinx는 내 시스템에서 계속 작동합니다. 디코더를 튜닝하고 무슨 일이 일어날 지 알게 될 것입니다. – Alexander
제안 된 매개 변수를 수정할 때마다 세그먼트 오류 또는 인식 할 수없는 변수로 끝납니다. 나는'config.set_string ('- beam', '1e-50')'과 같은 방식으로 사전에 추가하고있다. 이 올바른지? – Alexander
또한, 나는 라즈베리 파이를 실행하려고 시도하지만, 내 사전은 약 50 단어입니다. 그것은 큰 것으로 간주됩니까? pocketsphinx_continuous가 작동하지만 스크립트가 오버플로되는 이유는 무엇입니까? 모든 질문에 대해 유감스럽게도, 나는 경험이없는 프로그래머입니다. – Alexander