异步转写多个长音频文件

本页面演示如何异步转写一个或多个长音频文件。Recognize 设定 1 分钟的音频长度限制。因此,对于长度超过此限制的文件,您应该使用 BatchRecognize

批量语音识别会返回 google.longrunning.Operation,您可以通过轮询该操作来查看文件转写何时完成。转写内容会写入您指定的 Google Cloud Storage 存储桶中。

执行批量语音识别

为了让 Speech-to-Text 能够访问您的 Google Cloud Storage 中的文件,您必须为 Speech-to-Text 创建一个服务帐号,并向该帐号授予对相关存储对象的读取权限。如果目前没有服务帐号并且您想要创建一个服务帐号,请在 Cloud Shell 中运行以下命令以创建并显示帐号。

BatchRecognizeRequest 配置

BatchRecognize 使用您指定的识别器来执行识别。因此,您需要提供的唯一配置是解码参数,您可以显式提供,也可以通过选择自动解码来提供。

以下是 BatchRecognize 请求示例:

POST /v2/projects/<PROJECT-ID>/locations/<LOCATION>/recognizers/<RECOGNIZER-ID>:batchRecognize
{
    'config': {
      'autoDecodingConfig': {}
    },
    'files': [
      {
        'uri': "gs://my-audio-bucket/en-us/cheese.wav"
      }
    ],
    'recognitionOutputConfig': {
      'gcsOutputConfig': {
        'uri': "gs://my-transcripts-bucket/en-us"
      }
    }
}

请求级替换

除了语言和模型之外,识别器还包含一系列识别参数(例如 enable_automatic_punctuation 等)。为方便起见,您可以在请求级别替换这些参数,这样就无需为所需的每个识别功能组合创建不同的识别器。

假设识别器是按照上述方式创建的:

POST /v2/projects/<PROJECT-ID>/locations/<LOCATION>/recognizers?recognizer_id=<RECOGNIZER-ID>
{
  'languageCodes': 'en-US',
  'model': 'latest_long',
  'config': {
    'features': {
      'enableAutomaticPunctuation': true
      'enableWordTimeOffsets': true
    }
  }
}

下面展示了如何在请求级别替换功能(这意味着每个文件的识别都会应用这些功能)。

POST /v2/projects/<PROJECT-ID>/locations/<LOCATION>/recognizers/<RECOGNIZER-ID>:batchRecognize
{
    'config': {
      'autoDecodingConfig': {}
      'features': {
        'enableAutomaticPunctuation': false
      }
    },
    'files': [
      {
        'uri': "gs://my-audio-bucket/en-us/cheese.wav"
      }
    ],
    'recognitionOutputConfig': {
      'gcsOutputConfig': {
        'uri': "gs://my-transcripts-bucket/en-us"
      }
    }
}

这将在仅启用识别功能 enableWordTimeOffsets 的情况下在 gs://my-audio-bucket/en-us/cheese.wav 执行 ASR,因为该功能是在识别器级别启用的,并且在请求级别完全没有指定。由于 enableAutomaticPunctuation 在请求级别被指定为 false,因此它将替换在识别器级别设置的原始值 true,并且此请求将不会执行自动加注标点符号操作。

文件级替换

在文件级别也可以实现上述同一情况,从而能够灵活地为每个文件设置识别功能。例如,您可能希望对所有文件都应用自动加注标点符号功能,但仅对特定文件应用字词时间偏移功能。

您可以按照上述方式创建识别器。然后按如下所示指定请求:

POST /v2/projects/<PROJECT-ID>/locations/<LOCATION>/recognizers/<RECOGNIZER-ID>:batchRecognize
{
  # This specifies that all files will use automatic decoding
  'config': {
    'autoDecodingConfig': {}
  },
  'files': [
    {
      'uri': "gs://my-audio-bucket/en-us/cheese1.wav"
      'config': {
        # This file will not include word time offsets.
        'features': {
          'enableAutomaticPunctuation': false
        }
      },
    },
    {
      'uri': "gs://my-audio-bucket/en-us/cheese2.wav"
      'config': {
        # This file will include word time offsets.
        'features': {
          'enableAutomaticPunctuation': true
        }
      },
    },
  ]
  'recognitionOutputConfig': {
    'gcsOutputConfig': {
      'uri': "gs://my-transcripts-bucket/en-us"
    }
  }
}

处理 BatchRecognize 响应

BatchRecognize 会返回 google.longrunning.Operation 作为其响应。 请参阅操作页面,了解如何轮询操作。

BatchRecognizeResponse 会在完成后进行设置,并按文件详细说明结果,结果是转写内容的 Cloud Storage URI,或者是描述问题的错误消息。

响应 JSON 如下所示:

'response': {
  '@type': 'type.googleapis.com/google.cloud.speech.v2.BatchRecognizeResponse',
  'results': {
    # Input file name
    'gs://my-audio-bucket/audio/en-us/cheese.wav': {
      # Output (transcript) file name
      'uri': 'gs://my-transcripts-bucket/en-us/cheese_transcript_63d14a9d-0000-2c31-b9b4-c82add6c82a4.json'
    }
  }
}

BatchRecognize 的转写文件采用 BatchRecognizeResults 类型对象的格式。