Author Avatar
Rzk 3月 23, 2022
  • 在其它设备中阅读本文章

Google STT 功能 探索

总览

Google 支持 STT 功能分为三种方案:

  • 同步识别(REST 和 gRPC)将音频数据发送到 Speech-to-Text API,对该数据执行识别,并在所有音频内容处理完毕后返回结果。同步识别请求仅限于持续时间不超过 1 分钟的音频数据。
  • 异步识别(REST 和 gRPC)将音频数据发送到 Speech-to-Text API 并启动长时间运行的操作。使用此操作,您可以定期轮询识别结果。异步请求可用于任何持续时间不超过 480 分钟的音频数据。
  • 流式识别(仅限 gRPC)对 gRPC 双向流内提供的音频数据执行识别。流式请求专为实时识别(例如从麦克风采集实时音频)而设计。流式识别可以在采集音频的同时提供临时结果,例如当用户还在讲话时就显示结果。

适合我们 APP 的方案是第二种:异步识别。

异步识别

此方案可以分为两种方向,后台端、APP端。

基本内容

相关的参数
  • LANGUAGE_CODE:音频剪辑中所用语言的 BCP-47 代码。
  • ENCODING:要转录的音频的编码。
  • SAMPLE_RATE_HERTZ:要转录的音频的采样率(以赫兹为单位)。
  • ENABLE_TIME_WORD_OFFSETS:如果要返回字词的开始时间和结束时间偏移值(时间戳),请启用此字段。
  • INPUT_AUDIO:要转录的音频数据的 base64 编码字符串。
模型选择

电话 phone_call 使用此模型转录电话通话的音频。通常情况下,电话音频以 8000 Hz 的采样率录制。注意:该增强型电话模型是一种高级模型,其费用高于标准价格。

置信度值

confidence 值是 0.0 到 1.0 之间的估计值。它是通过汇总分配给音频中每个字词的“可能性”值来计算的。数值越大,表示估计字词被正确识别的可能性越高。此字段通常只为最有可能的假设提供,并且仅适用于 is_final=true 时的结果。例如,您可以使用 confidence 值来决定是向用户显示备选结果还是要求用户确认。

不过请注意,该模型在确定排名最靠前的“最佳”结果时,并非单纯基于 confidence 分数,而会考虑更多的信息(例如句子上下文)。因此,在少数情况下,排名最靠前的结果并一不定具有最高的置信度分数。如果您未要求多个备选结果,返回的单个“最佳”结果的置信度值可能低于预期。例如,在使用生僻字词时就可能出现这种情况。一个很少使用的字词即使被正确识别,也可能分配一个较低的“可能性”值。如果模型根据上下文确定该生僻字词是最可能的选项,那么即使该结果的 confidence 值低于备选项,也会作为最佳结果返回。

附加内容

预览

此功能受《Google Cloud 服务条款》的正式发布预备产品条款的约束。GA 之前的功能可能受到有限的支持,且对正式发布预备功能的更改可能无法与其他正式发布预备版本不兼容。 如需了解详情,请参阅发布阶段说明

讲话人区分 链接

Speech-to-Text 可以识别同一音频剪辑中的多名讲话人。向 Speech-to-Text 发送音频转录请求时,您可以加入一个参数,告知 Speech-to-Text 识别音频样本中的不同讲话人。这一功能称为讲话人区分,能够检测何时更换了讲话人,并按照系统在音频中检测到的不同声音数量添加标签。

在转录请求中启用讲话人区分时,Speech-to-Text 会尝试区分音频样本中包含的不同语音。转录结果会用分配给各个讲话人的编号标记每个词。同一名讲话人说出的字词标有相同的编号。转录结果可以包含的讲话人数量与 Speech-to-Text 能够在音频样本中唯一地标识的讲话人数量相同。

使用讲话人区分时,Speech-to-Text 会生成转录中提供的所有结果的连续聚合。其中每个结果都包含前一个结果中的字词。因此,最终结果中的 words 数组提供了完整且经过区分的转录结果。

查看语言支持页面,了解此功能是否支持您的语言。

多语言识别 链接

Speech-to-Text 为您提供了一种方法,让您可以指定音频数据可能包含的一组备用语言。当您向 Speech-to-Text 发送音频转录请求时,您可以提供一份列表,在其中列明音频数据可能包含的其他语言。如果您在请求中包含语言列表,则 Speech-to-Text 会尝试根据您提供的备用语言中最适合样本的语言转录音频。随后,Speech-to-Text 会使用预测的语言代码标记转录结果。

此功能非常适合需要转录语音指令或搜索等简短语句的应用。除了主要语言之外,您还可以从 Speech-to-Text 支持的语言中任选三种,作为备用语言列出(总共四种语言)。

尽管您可以为语音转录请求指定备用语言,但仍然必须在 languageCode 字段中提供主要语言代码。此外,您应该将请求使用的语言数量限制在最低限度。请求使用的备用语言代码越少,就越有助于 Speech-to-Text 成功选择正确的语言代码。仅指定一种语言的效果最为理想。

不可用

Picsee-20220323115821.jpeg

具体实施

后台端 (未测试)

需要从 twilio 下载音频文件进行上传,设置参数发送请求,进行识别。

"config":{
    "encoding": "LINEAR16",
    "languageCode": "en-US",
    "enableSpeakerDiarization": true, // 讲话人区分
    "diarizationSpeakerCount": 2,
    "model": "phone_call"
}

需要的RecognitionConfig

Google 文档显示的返回内容

APP 端 (Google Demo 测试)

直接请求相关 API https://speech.googleapis.com/v1/speech:recognize

相关参数
configRequest:
{
    @"encoding":@"LINEAR16",
    @"sampleRateHertz":@(SAMPLE_RATE),
    @"languageCode":@"zh",
    @"maxAlternatives":@30
}

audio: [audioData base64EncodedStringWithOptions:0] // 音频编码后的 data 跟随请求上传

返回结果

RESULT: {
  "results": [
    {
      "alternatives": [
        {
          "transcript": "测试测试测试",
          "confidence": 0.9750025
        }
      ],
      "resultEndTime": "3.900s",
      "languageCode": "cmn-hans-cn"
    }
  ],
  "totalBilledTime": "15s"
}
分离讲话人 功能的参数
@"diarizationConfig":@{
    @"enableSpeakerDiarization":@"true",
}

返回结果

{
  "alternatives": [
    {
      "words": [
    {
      "startTime": "0s",
      "endTime": "1s",
      "word": "测",
      "speakerTag": 1
    },
    {
      "startTime": "1s",
      "endTime": "1.100s",
      "word": "试",
      "speakerTag": 1
    },
    {
      "startTime": "1.100s",
      "endTime": "1.300s",
      "word": "测",
      "speakerTag": 1
    },
    {
      "startTime": "1.300s",
      "endTime": "1.600s",
      "word": "试",
      "speakerTag": 1
    },
    {
      "startTime": "1.600s",
      "endTime": "1.800s",
      "word": "测",
      "speakerTag": 1
    },
    {
      "startTime": "1.800s",
      "endTime": "2s",
      "word": "试",
      "speakerTag": 1
    }
   ]
  }
 ]
}

PS

最佳做法

Cloud Speech-to-Text API

检测录音中不同的讲话人

多语言识别

RecognitionConfig

Google Demo