2017-11-20 8 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

大規模な語彙でラズベリーパイを実行しようとしているように、CPUが遅すぎるため、リアルタイムでオーディオを処理できません。

正確なリアルタイム番号は、pocketsphinxのログ出力で確認できます。

あなたはより高速なCPUを取得する必要があるか、また、私がパイ上で実行しようとしています実際のところtutorial to decoder tuning

+0

で説明したようにデコーダ構成/語彙を最適化しようとすることができます。 Poketsphinxは私のシステム上で連続して動作します。デコーダをチューニングして何が起こるかを調べようとします – Alexander

+0

提案されたパラメータを変更しようとすると、セグメンテーションフォールトまたは認識されない変数になります。私は辞書と同じように 'config.set_string( ' - beam'、 '1e-50')'を追加しています。これは正しいです? – Alexander

+0

また、私はラズベリーパイで動こうとしていますが、私の辞書は約50語です。それは大きいと考えられていますか? pocketsphinx_continuousは動作しますが、スクリプトがオーバーフローするのはなぜですか?すべての質問を申し訳ありません、私はかなり経験の浅いプログラマーです。 – Alexander

関連する問題