转录流式输入中的音频

本部分演示了如何将流式音频(如麦克风输入)转录为文字。

流式语音识别允许您将音频流式传输到 Speech-to-Text,并在音频处理的过程中实时接收流式语音识别的结果。另请参阅流式语音识别请求的音频限制。流式语音识别只能通过 gRPC 实现。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. Enable the Speech-to-Text APIs.

    Enable the APIs

  5. Make sure that you have the following role or roles on the project: Cloud Speech Administrator

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role colunn to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      前往 IAM
    2. 选择项目。
    3. 点击 授予访问权限
    4. 新的主账号字段中,输入您的用户标识符。 这通常是 Google 账号的电子邮件地址。

    5. 选择角色列表中,选择一个角色。
    6. 如需授予其他角色,请点击 添加其他角色,然后添加其他各个角色。
    7. 点击保存
    8. Install the Google Cloud CLI.
    9. To initialize the gcloud CLI, run the following command:

      gcloud init
    10. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

      Go to project selector

    11. 确保您的 Google Cloud 项目已启用结算功能

    12. Enable the Speech-to-Text APIs.

      Enable the APIs

    13. Make sure that you have the following role or roles on the project: Cloud Speech Administrator

      Check for the roles

      1. In the Google Cloud console, go to the IAM page.

        Go to IAM
      2. Select the project.
      3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

      4. For all rows that specify or include you, check the Role colunn to see whether the list of roles includes the required roles.

      Grant the roles

      1. In the Google Cloud console, go to the IAM page.

        前往 IAM
      2. 选择项目。
      3. 点击 授予访问权限
      4. 新的主账号字段中,输入您的用户标识符。 这通常是 Google 账号的电子邮件地址。

      5. 选择角色列表中,选择一个角色。
      6. 如需授予其他角色,请点击 添加其他角色,然后添加其他各个角色。
      7. 点击保存
      8. Install the Google Cloud CLI.
      9. To initialize the gcloud CLI, run the following command:

        gcloud init
      10. 客户端库可以使用应用默认凭据轻松进行 Google API 身份验证,并向这些 API 发送请求。借助应用默认凭据,您可以在本地测试应用并部署它,无需更改底层代码。有关详情,请参阅使用客户端库进行身份验证

      11. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      此外,请确保您已安装客户端库

      对本地文件执行流式语音识别

      以下是对本地音频文件执行流式语音识别的示例。数据流请求中发送的音频不得超过 25 KB。此限制适用于初始 StreamingRecognize 请求和数据流中每一条消息的大小。超出此限制时,系统会抛出错误。

      Python

      import os
      
      from google.cloud.speech_v2 import SpeechClient
      from google.cloud.speech_v2.types import cloud_speech as cloud_speech_types
      
      PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
      
      
      def transcribe_streaming_v2(
          stream_file: str,
      ) -> cloud_speech_types.StreamingRecognizeResponse:
          """Transcribes audio from an audio file stream using Google Cloud Speech-to-Text API.
          Args:
              stream_file (str): Path to the local audio file to be transcribed.
                  Example: "resources/audio.wav"
          Returns:
              list[cloud_speech_types.StreamingRecognizeResponse]: A list of objects.
                  Each response includes the transcription results for the corresponding audio segment.
          """
          # Instantiates a client
          client = SpeechClient()
      
          # Reads a file as bytes
          with open(stream_file, "rb") as f:
              audio_content = f.read()
      
          # In practice, stream should be a generator yielding chunks of audio data
          chunk_length = len(audio_content) // 5
          stream = [
              audio_content[start : start + chunk_length]
              for start in range(0, len(audio_content), chunk_length)
          ]
          audio_requests = (
              cloud_speech_types.StreamingRecognizeRequest(audio=audio) for audio in stream
          )
      
          recognition_config = cloud_speech_types.RecognitionConfig(
              auto_decoding_config=cloud_speech_types.AutoDetectDecodingConfig(),
              language_codes=["en-US"],
              model="long",
          )
          streaming_config = cloud_speech_types.StreamingRecognitionConfig(
              config=recognition_config
          )
          config_request = cloud_speech_types.StreamingRecognizeRequest(
              recognizer=f"projects/{PROJECT_ID}/locations/global/recognizers/_",
              streaming_config=streaming_config,
          )
      
          def requests(config: cloud_speech_types.RecognitionConfig, audio: list) -> list:
              yield config
              yield from audio
      
          # Transcribes the audio into text
          responses_iterator = client.streaming_recognize(
              requests=requests(config_request, audio_requests)
          )
          responses = []
          for response in responses_iterator:
              responses.append(response)
              for result in response.results:
                  print(f"Transcript: {result.alternatives[0].transcript}")
      
          return responses
      
      

      虽然您可以将本地音频文件流式传输到 Speech-to-Text API,但建议您执行同步音频识别。

      清理

      为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。

      1. Optional: Revoke the authentication credentials that you created, and delete the local credential file.

        gcloud auth application-default revoke
      2. Optional: Revoke credentials from the gcloud CLI.

        gcloud auth revoke

      控制台

    14. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    15. In the project list, select the project that you want to delete, and then click Delete.
    16. In the dialog, type the project ID, and then click Shut down to delete the project.
    17. gcloud

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

      后续步骤