Можно ли отправить массив numpy и частоту дискретизации в Microsoft Speech-to-Text вместо сохранения в wav-файле?

Я использую API Python для преобразования речи в текст Microsoft Cognitive Services для транскрипции.

Прямо сейчас я получаю звук через веб-API (здесь используется микрофонная часть: https://ricardodeazambuja.com/deep_learning/2019/03/09/audio_and_video_google_colab/), а затем я записываю звук в 'sound.wav', а затем отправляю 'sound.wav' в механизм MCS STT, чтобы получить транскрипция. Веб-API дает мне большой массив вместе с частотой дискретизации звука.

Мой вопрос: можно ли отправить массив numpy и частоту дискретизации непосредственно в MCS STT вместо записи файла wav?

Вот мой код:

import azure.cognitiveservices.speech as speechsdk
import scipy.io.wavfile

audio, sr = get_audio()

p  = 'sound.wav'
scipy.io.wavfile.write(p,sr,audio)

speech_config = speechsdk.SpeechConfig(subscription=speech_key, region=service_region)
audio_input = speechsdk.AudioConfig(filename=p)
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_input)

person Beckenbaur93    schedule 12.10.2020    source источник
comment
Согласно предоставленному документу, у вас есть двоичный файл. Я думаю, вы можете использовать двоичный файл для создания потока, а затем использовать поток с stream = speechsdk.audio.PushAudioInputStream() audio_config = speechsdk.audio.AudioConfig(stream=stream) для распознавания: github.com/Azure-Samples/cognitive-services-speech-sdk/blob/   -  person Jim Xu    schedule 13.10.2020
comment
@ Beckenbaur93 - Просто хотел быстро понять, хотите ли вы отправить массив numpy в службу Microsoft STT или ваше требование будет выполнено, даже если вы сможете захватить звук с микрофона напрямую и отправить в службу Microsoft STT?   -  person Satya V    schedule 14.10.2020
comment
@SatyaV - подойдут оба метода. Прямо сейчас я работаю в Google Colab, и мне кажется технически сложным получить звук непосредственно с микрофона и отправить его в Microsoft STT в Colab, и таким образом я пытаюсь вместо этого отправить в массив numpy.   -  person Beckenbaur93    schedule 14.10.2020


Ответы (1)


Основываясь на моем исследовании и просмотре кода:

Вы не сможете напрямую использовать Mic в Google Collab - потому что в экземпляре, в котором запускается python, у вас будет меньше шансов получить доступ / работать так же. Следовательно, вы использовали статью, которая упрощает запись звука на уровне веб-браузера.

Теперь - записанный звук в формате WEBM. Согласно коду, они дополнительно использовали FFMPEG для преобразования в формат WAV.

Однако учтите, что здесь будут заголовки в дополнение к аудиоданным  введите описание изображения здесь

Теперь это не возвращается в ниже фрагменте кода - вместо того, чтобы возвращать audio,sr в get_audio (), вам нужно будет вернуть riff - это WAV AUDIO в байтах (но он включает заголовок в дополнение к аудиоданным)

введите описание изображения здесь

Попал в сообщение, в котором объясняется состав файла WAV на уровне байтов (это может быть связано с выводом)

http://soundfile.sapp.org/doc/WaveFormat/

В этом случае вам нужно будет вырезать байты аудиоданных, выборку в секунду и все необходимые данные и использовать метод PushAudioInputStream

ОБРАЗЕЦ

channels = 1
bitsPerSample = 16
samplesPerSecond = 16000
audioFormat = AudioStreamFormat(samplesPerSecond, bitsPerSample, channels)
custom_push_stream = speechsdk.audio.PushAudioInputStream(stream_format=audioFormat)

В этом custom_push_stream - вы можете записать аудиоданные для выполнения STT

custom_push_stream.write(audiodata)
person Satya V    schedule 16.10.2020
comment
Оно работает! Спасибо, @Satya! Но это было не так быстро, как я надеялся, но я скоро опубликую решение. Как вы думаете, на основании ваших исследований можно будет реализовать ссылка с использованием eval_js в Google Colab? Я правильно создам новый вопрос по этой теме. - person Beckenbaur93; 16.10.2020