【问题标题】:Using gcloud speech api for real-time speech recognition in dart, flutter在dart、flutter中使用gcloud speech api进行实时语音识别
【发布时间】:2019-04-03 10:32:05
【问题描述】:

我想在一个flutter项目中使用谷歌的实时语音识别api,用dart编写。 我已经激活了一个 gcloud 帐户,创建了 api 密钥(这应该是谷歌语音唯一必要的身份验证方法)并编写了一个基本的 apk,它应该向谷歌云发送音频流并显示响应。 我导入了 googleapis/speech 和 googleapis_auth 插件。

但我不知道如何设置它。 他们说你必须使用 gRPC,这是有道理的,因为它应该使它易于使用,但是他们在 github 上的插件的实现似乎没有使用它。

那么谁能告诉我如何使用它 - 设置身份验证和转录演讲稿?

【问题讨论】:

    标签: dart flutter real-time gcloud speech-to-text


    【解决方案1】:

    更新:

    这是一个工作示例:

    https://gist.github.com/DazWilkin/34d628b998b4266be818ffb3efd688aa

    您只需要插入服务帐户 key.json 的值并应该收到:

    {
        alternatives: [{
            confidence: 0.9835046,
            transcript: how old is the Brooklyn Bridge
        }]
    }
    

    记录不充分:-(

    我熟悉 Google API 开发,但 不熟悉 Dart Google Speech-to-Text API,所以,提前道歉。

    见: https://github.com/dart-lang/googleapis/tree/master/generated/googleapis

    Google SDK|库有 2 种风格,更常见的(API 客户端库)和新的(云 [!] 客户端库)。 IIUC,对于语音的 Dart,您将使用 API 客户端库,而这使用 gRPC。

    我将根据直觉调整样本,请耐心等待:

    import 'package:googleapis/speech/v1.dart';
    import 'package:googleapis_auth/auth_io.dart';
    
    final _credentials = new ServiceAccountCredentials.fromJson(r'''
    {
      "private_key_id": ...,
      "private_key": ...,
      "client_email": ...,
      "client_id": ...,
      "type": "service_account"
    }
    ''');
    
    const _SCOPES = const [SpeechApi.CloudPlatformScope];
    
    void main() {
      clientViaServiceAccount(_credentials, _SCOPES).then((http_client) {
        var speech = new SpeechApi(http_client);
        speech...
      });
    }
    

    这需要创建一个具有适当权限的服务帐户并为其生成一个 (JSON) 密钥。通常,密钥文件由代码加载,但在此示例中,它以字符串文字的形式提供。该密钥将为fromJson 提供内容。您应该(!)能够使用应用程序默认凭据进行测试(更容易)请参阅下面的链接。

    不知何故(!)Dart API 将包含一个方法|函数,它可以进行这个底层 REST 调用。调用需要一些配置和音频:

    https://cloud.google.com/speech-to-text/docs/reference/rest/v1/speech/recognize

    我怀疑是这个recognize,它需要一个RecognizeRequest

    很抱歉,我无法提供更多帮助。

    如果您确实可以使用,请考虑发布相同的内容,以便其他人受益。

    注意

    【讨论】:

    • 好吧,如果他们不使用 gRPC,那么它就更有意义了。到目前为止,感谢您的努力和快速答复!我会玩弄它,如果我让它工作,我会在这里发布一些工作代码
    • 在我看来,谷歌只是没有在那个包中提供流媒体支持......我想知道为什么,但插件中没有任何 流媒体
    • IIUC 流式传输需要 gRPC(如您所述),并且此(API 客户端)库使用不支持它的 REST。 Google 需要使用 gRPC|http2 为 Dart 发布此服务的库。我去问问 Dart 团队。
    【解决方案2】:

    对于所有仍然对该主题感兴趣的人。我已经发布了一个 Flutter 包,它通过 grpc 支持 Google 的 Speech-to-Text Api。这也允许使用 streamingRecognize。

    您可以在这里找到它: https://pub.dev/packages/google_speech

    【讨论】:

    • 太好了,我看了你的包裹,如何使用麦克风进行实时转录?在我的应用程序中,人们进行视频通话,我试图实时向用户显示字幕。我正在使用 agora sdk 进行视频通话。是否可以在我的应用程序中添加实时转录?谢谢
    • 抱歉回复晚了。我自己没有使用过直接麦克风输入,但它应该是可能的。使用 Flutter PlatformChannel,您可以将麦克风输出作为 UInt8List 发送给 Flutter,然后通过 streamingRecognize 发送给 Google。在没有仔细看包装的情况下,我认为例如pub.dev/packages/mic_stream 可以解决这个问题。
    • 这几乎正是我所需要的,但有没有自动识别语言?而不是一开始就给出确认的语言。
    猜你喜欢
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 2018-06-25
    • 2016-10-31
    • 2015-04-05
    • 2018-07-01
    • 2019-09-11
    • 1970-01-01
    相关资源
    最近更新 更多