2017-11-20 2 views
0

음성 인식을 위해 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

큰 어휘로 raspberry pi를 실행하려고하는 것처럼 CPU가 너무 느리기 때문에 실시간으로 오디오를 처리하지 못합니다.

pocketsphinx 로그 출력에서 ​​정확한 실시간 번호를 볼 수 있습니다.

당신은 더 빠른 CPU를 얻을 필요가 또는 당신은 또한 내가 파이에서 실행하려고 사실 tutorial to decoder tuning

+0

에 설명 된대로 디코더 구성/어휘를 최적화 시도 할 수 있습니다. Poketsphinx는 내 시스템에서 계속 작동합니다. 디코더를 튜닝하고 무슨 일이 일어날 지 알게 될 것입니다. – Alexander

+0

제안 된 매개 변수를 수정할 때마다 세그먼트 오류 또는 인식 할 수없는 변수로 끝납니다. 나는'config.set_string ('- beam', '1e-50')'과 같은 방식으로 사전에 추가하고있다. 이 올바른지? – Alexander

+0

또한, 나는 라즈베리 파이를 실행하려고 시도하지만, 내 사전은 약 50 단어입니다. 그것은 큰 것으로 간주됩니까? pocketsphinx_continuous가 작동하지만 스크립트가 오버플로되는 이유는 무엇입니까? 모든 질문에 대해 유감스럽게도, 나는 경험이없는 프로그래머입니다. – Alexander