Использование Gstreamer с Google Speech API (потоковой транскрипции) в C ++ - PullRequest
0 голосов
/ 04 февраля 2019

Я использую речевой API Google от облачной платформы для передачи речи в текст потокового аудио.Я уже выполнял вызовы API REST с использованием curl POST запросов для short audio file с использованием GCP.

Я видел документацию Google Streaming Recognize, которая гласит «Распознавание потоковой речи доступно только через gRPC».

У меня установлен gRPC (также protobuf) в OpenSuse Leap 15.0 .Вот скриншот каталога.

Directory

Далее я пытаюсь запустить пример streaming_transcribe из этой ссылки , и яобнаружил, что образец программы использует локальный файл в качестве входных данных, но имитирует его как вход для микрофона (последовательно перехватывает фрагменты 64 КБ), а затем отправляет данные на сервер Google.в моей системе я запустил make run_tests.Я изменил Makefile следующим образом:

...
...Some text as original Makefile
...
.PHONY: all
all: streaming_transcribe
googleapis.ar: $(GOOGLEAPIS_CCS:.cc=.o) 
      ar r $@ $?
streaming_transcribe: streaming_transcribe.o parse_arguments.o googleapis.ar
      $(CXX) $^ $(LDFLAGS) -o $@
run_tests:
      ./streaming_transcribe -b 16000 resources/audio.raw
      ./streaming_transcribe --bitrate 16000 resources/audio2.raw
      ./streaming_transcribe resources/audio.flac
      ./streaming_transcribe resources/quit.raw
clean: rm -f *.o streaming_transcribe \
       googleapis.ar \
       $(GOOGLEAPIS_CCS:.cc=.o)

Этот не работает хорошо (как и оригинальный файл Makefile).Но файл streaming_transcribe.o создается после запуска Makefile.Поэтому я вручную запустил файл и получил следующие ответы

Screenshot2

Любые предложения о том, как запустить тест и использовать gstreamer вместо функции, используемой для симуляциизвук с микрофона?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

как запустить тест

Следуйте инструкциям на cpp-docs-samples . Предварительные требования - Установите grpc , protobuf и googleapis и настройте среду как saib по ссылкам выше.

gstreamer вместо функции, используемой для имитации звука с микрофона

Для этой программы я создал конвейеры, которые

gst-launch-1.0 filesrc location=/path/to/file/FOO.wav ! wavparse ! audioconvert ! audio/x-raw,channels=1,depth=16,width=16,rate=44100 ! rtpL16pay  ! udpsink host=xxx.xxx.xxx.xxx port=yyyy

Аудиофайл можетизменить на flac или mp3 с изменением соответствующих elemnets в конвейере

gst-launch-1.0 udpsrc port=yyyy ! "application/x-rtp,media=(string)audio, clock-rate=(int)44100, width=16, height=16, encoding-name=(string)L16, encoding-params=(string)1, channels=(int)1, channel-positions=(int)1, payload=(int)96" ! rtpL16depay ! audioconvert ! audio/x-raw,format=S16LE ! filesink location=/path/to/where/you/want/to/dump/the/rtp/payloads/ABC.raw

Процесс извлечения полезных данных из потока rtp и записи его в файл выполняется в другом потоке, чем отправка данных в Google и чтениеответ.

0 голосов
/ 04 февраля 2019

Может быть, выделенная звуковая карта может слушать поток RTSP?с

try (SpeechClient speechClient = SpeechClient.create

RecognitionConfig config =
    RecognitionConfig.newBuilder()
        .setEncoding(AudioEncoding.LINEAR16)
        .setLanguageCode("en-US")
        .setSampleRateHertz(44100)
        .setAudioChannelCount(2)
        .setEnableSeparateRecognitionPerChannel(true)
        .build();
...