当前位置: 首页 > 知识库问答 >
问题:

在C语言中使用谷歌语音应用编程接口(流媒体转录)

邬浩涆
2023-03-14

我正在使用来自云平台的谷歌语音API,将语音转换为流式音频的文本。我已经使用GCP使用curlPOST短音频文件的请求完成了restapi调用。

我看过谷歌流媒体识别的文档,上面说“流媒体语音识别仅通过gRPC提供。”

我在我的OpenSuse Leap 15.0中安装了gRPC(也有原型)。这是目录的截图。

接下来,我尝试从这个链接运行streaming_transcribe示例,我发现示例程序使用本地文件作为输入,但将其模拟为麦克风输入(按顺序捕获64K块),然后将数据发送到Google服务器。

对于检查grpc在我的系统上是否正确设置的初始测试,我运行了make run\u 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)

这不能很好地工作(orignal Makefile也是如此)。但是streaming_transcribe. o文件是在运行Makefile之后创建的。所以我手动运行了文件,得到了以下回复

关于如何运行测试并使用gstreamer而不是用于模拟麦克风电话音频的功能,有何建议?


共有2个答案

燕凯旋
2023-03-14

也许专用声卡可以收听rtsp流?具有

try (SpeechClient speechClient = SpeechClient.create

RecognitionConfig config =
    RecognitionConfig.newBuilder()
        .setEncoding(AudioEncoding.LINEAR16)
        .setLanguageCode("en-US")
        .setSampleRateHertz(44100)
        .setAudioChannelCount(2)
        .setEnableSeparateRecognitionPerChannel(true)
        .build();
晏修诚
2023-03-14

如何运行测试

按照cpp文档样本上的说明操作。先决条件-安装grpc、protobuf和googleapis,并按照上面链接中所述设置环境。

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

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并读取响应。

 类似资料:
  • 如果可能的话,我需要一些意见或建议。我有一个使用语音识别api和媒体记录器的应用程序。该应用程序的要点是当用户说“注意”时,它会记录语音消息,直到用户说“完成”。之后,应用程序将语音消息保存到手机中。 我目前有一个带有按钮(记录、保存、停止、完成)的弹出框,用户可以手动按下按钮来记录他们的语音信息。我正在考虑完全改造用户拥有完全语音控制的应用程序。所以基本上,它越免提越好。 我从这里开始研究连续语

  • 我想用nodejs和googlespeech-to-text api制作一个实时转录应用程序。 我正在使用RecordRTC和socket。io将音频块获取到后端服务器。目前,我正在录制1秒长的块,并且转录工作正常,但它没有将其视为流,而是在处理每个块后发送响应。这意味着我要收回半句话,谷歌无法利用上下文帮助自己识别演讲。 我的问题是,如何让谷歌将我的块视为一个连续的流。或者是否有其他解决方案可以

  • 如何实现继承接口的函数?我有以下接口: 现在我希望IShelter有一个函数: 但我希望狗庇护所能这样实施: 像这样的猫头鹰: 有没有办法做到这一点?除了有DogShelter实现存储(IAnmial动物)和检查是否(动物是IDog)? 我应该用商店(动物),然后用(动物)投它吗? (我想使用关于IDog和ICat的接口继承。类继承在实际代码中是不可能的)(此时计算时间有点重要。使用Store(I

  • 我在尝试使用谷歌云语音库时出错。 这可能是关于我的依赖项。在添加Firebase身份验证依赖项之前,库是无缝工作的。所以它可能是关于endpoint-管理-控制-应用引擎-所有依赖项。 Stackdriver日志: 这是类的唯一方法: 项目的依赖关系:

  • 当我使用我的代码与谷歌语音api交互时,我面临着麻烦。我通过以下链接查阅了参考资料。使用谷歌语音识别API的JAVA 当我使用他的flac文件时,我从google api获取文本,但当我使用我的flac文件时,我得到以下错误完成 我已经从windows录制并使用转换器将其转换为flac。coode如下所示: http://pastebin.com/jWnDRrrf flac文件位于以下链接上 ht

  • 主要内容:安装C-Free 5.0,运行C语言代码安装C-Free 5.0 C-Free 是一款国产的Windows下的C/ C++ IDE,最新版本是 5.0,整个软件才 14M,非常轻巧,安装简单。 下载地址: C-Free 5.0下载 按照教程中的说明安装并  C-Free 5.0。 需要注意的是:C-Free 5.0 在 XP、Win7 下能够完美运行,在 Win8、Win10 下可能会存在兼容性问题,读者可以先尝试安装,不行的话再使用