#python #kaldi
Вопрос:
Я разрабатываю приложение, использующее распознавание голоса через pyKaldi, я хотел бы декодировать поток с микрофона в цикле. До сих пор я видел только примеры с SequentialWaveReader, и нет возможности легко включить микрофон. Я использую здесь PyAudio для микрофона. Пример моего текущего кода ниже, где я сохраняю каждые 5 секунд в wav-файл, а затем декодирую его.
stream = p.open(format=FORMAT, channels=CHANNELS,#input_device_index=1, rate=RATE, input=True)#, frames_per_buffer=audio_batch_size) RECORD_SECONDS = 5 # while True: print("Bot Ready") frames = [] for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): data = stream.read(CHUNK) frames.append(data) print("* done recording") stream.stop_stream() stream.close() p.terminate() wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb') wf.setnchannels(CHANNELS) wf.setsampwidth(p.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(b''.join(frames)) wf.close() for key, wav in SequentialWaveReader("scp:wav.scp"): feat_pipeline = OnlineNnetFeaturePipeline(feat_info) asr.set_input_pipeline(feat_pipeline) feat_pipeline.accept_waveform(RATE, wav.data()[0]) feat_pipeline.input_finished() out = asr.decode() print(key,out['likelihood'], out["text"], flush=True)