Сначала я хочу рассказать, какие инструменты я использую:
* 1. Raspberry pi 3b +
ReSpeaker 4Mi c Круговой массив (Mi c)
Linux Debian "Buster"
Thonny Python IDE *
Моя проблема - каждый раз, когда я пытаюсь запустить свой код, он всегда выдает ошибку
[Errno -9981] Input overflowed
Но когда я запускаю код и сразу произнесите слово, он может распознать, и тогда произойдет ошибка, я уже пытаюсь использовать свой собственный lm и dict, но результат тот же, я новичок ie, поэтому любой ответ действительно благодарен, это мой код:
from os import environ, path
from pocketsphinx import *
from sphinxbase import *
MODELDIR = "/usr/local/lib/python3.7/dist-packages/pocketsphinx/model"
config = Decoder.default_config()
audio_device='plughw:1,0'
config.set_string('-hmm', path.join(MODELDIR, 'en-us'))
config.set_string('-lm', path.join(MODELDIR, 'en-us.lm.bin'))
config.set_string('-dict', path.join(MODELDIR, 'cmudict-en-us.dict'))
config.set_string('-logfn', '/dev/null')
decoder = Decoder(config)
import pyaudio
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16,
channels=1,
rate=16000 ,#rate=16000,
input=True,
frames_per_buffer=1024,
input_device_index =2)
stream.start_stream()
in_speech_bf = False
decoder.start_utt()
print("Check")
while True:
buf = stream.read(1024)
if buf:
decoder.process_raw(buf, False, False)
print("CHECKPOINT 1")
if decoder.get_in_speech() != in_speech_bf:
in_speech_bf = decoder.get_in_speech()
print("CHECKPOINT 2")
if not in_speech_bf:
decoder.end_utt()
print ('Result:', decoder.hyp().hypstr)
decoder.start_utt()
else:
break
decoder.end_utt()
И это вывод
Check
CHECKPOINT 1
CHECKPOINT 1
CHECKPOINT 2
CHECKPOINT 1
CHECKPOINT 1
Traceback (most recent call last):
File "/home/pi/pocketRecognition/NYOBAINN.py", line 42, in <module>
buf = stream.read(1024)
File "/usr/lib/python3/dist-packages/pyaudio.py", line 608, in read
return pa.read_stream(self._stream, num_frames,
exception_on_overflow) OSError: [Errno -9981] Input overflowed
Когда я запускаю pocketsphinx_continuous -inmic yes -adcdev plughw:1,
0 в терминале, это работает довольно хорошо.