긴 오디오 파일을 텍스트로 변환

이 페이지에서는 Speech-to-Text API 및 비동기 음성 인식을 사용하여 긴 오디오 파일(1분 이상)의 스크립트를 작성하는 방법을 설명합니다.

비동기 음성 인식 정보

일괄 음성 인식은 장기 실행 오디오 처리 작업을 시작합니다. 비동기 음성 인식을 사용하여 60초 이상의 오디오를 텍스트로 변환합니다. 이보다 짧은 오디오는 동기 음성 인식이 더 빠르고 더 간단합니다. 비동기 음성 인식의 상한값은 480분(8시간)입니다.

일괄 음성 인식은 Cloud Storage에 저장된 오디오의 스크립트만 작성할 수 있습니다. 스크립트 작성 출력은 응답에서 단일 파일 일괄 인식 요청의 인라인으로 제공되거나 Cloud Storage에 작성될 수 있습니다.

일괄 인식 요청은 진행 중인 요청의 인식 처리에 대한 정보가 포함된 Operation을 반환합니다. 작업을 폴링하면 작업이 완료되고 스크립트를 사용할 수 있는 시점을 알 수 있습니다.

시작하기 전에

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  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. Make sure that billing is enabled for your Google Cloud project.

    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.

      또한 클라이언트 라이브러리를 설치했는지 확인합니다.

      Cloud Storage에 대한 액세스 사용 설정

      Speech-to-Text는 서비스 계정을 사용하여 Cloud Storage의 파일에 액세스합니다. 기본적으로 서비스 계정은 동일한 프로젝트의 Cloud Storage 파일에 액세스할 수 있습니다.

      서비스 계정 이메일 주소는 다음과 같습니다.

      service-PROJECT_NUMBER@gcp-sa-speech.iam.gserviceaccount.com
      

      다른 프로젝트의 Cloud Storage 파일을 텍스트로 변환하려면 이 서비스 계정에 다른 프로젝트의 Speech-to-Text 서비스 에이전트 역할을 부여하면 됩니다.

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-speech.iam.gserviceaccount.com \
          --role=roles/speech.serviceAgent

      프로젝트 IAM 정책에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

      또한 서비스 계정에 특정 Cloud Storage 버킷에 대한 권한을 부여하여 보다 세분화된 액세스 권한을 제공할 수 있습니다.

      gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
          --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-speech.iam.gserviceaccount.com \
          --role=roles/storage.admin

      Cloud Storage의 액세스 관리에 대한 자세한 내용은 Cloud Storage 문서의 액세스 제어 목록(ACL) 생성 및 관리를 참조하세요.

      인라인 결과로 일괄 인식 수행

      다음은 Cloud Storage의 오디오 파일에서 일괄 음성 인식을 수행하고 응답에서 스크립트 작성 결과를 인라인으로 읽는 예시입니다.

      Python

      import os
      
      from google.cloud.speech_v2 import SpeechClient
      from google.cloud.speech_v2.types import cloud_speech
      
      PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
      
      
      def transcribe_batch_gcs_input_inline_output_v2(
          audio_uri: str,
      ) -> cloud_speech.BatchRecognizeResults:
          """Transcribes audio from a Google Cloud Storage URI using the Google Cloud Speech-to-Text API.
              The transcription results are returned inline in the response.
          Args:
              audio_uri (str): The Google Cloud Storage URI of the input audio file.
                  E.g., gs://[BUCKET]/[FILE]
          Returns:
              cloud_speech.BatchRecognizeResults: The response containing the transcription results.
          """
          # Instantiates a client
          client = SpeechClient()
      
          config = cloud_speech.RecognitionConfig(
              auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
              language_codes=["en-US"],
              model="long",
          )
      
          file_metadata = cloud_speech.BatchRecognizeFileMetadata(uri=audio_uri)
      
          request = cloud_speech.BatchRecognizeRequest(
              recognizer=f"projects/{PROJECT_ID}/locations/global/recognizers/_",
              config=config,
              files=[file_metadata],
              recognition_output_config=cloud_speech.RecognitionOutputConfig(
                  inline_response_config=cloud_speech.InlineOutputConfig(),
              ),
          )
      
          # Transcribes the audio into text
          operation = client.batch_recognize(request=request)
      
          print("Waiting for operation to complete...")
          response = operation.result(timeout=120)
      
          for result in response.results[audio_uri].transcript.results:
              print(f"Transcript: {result.alternatives[0].transcript}")
      
          return response.results[audio_uri].transcript
      
      

      일괄 인식 수행 및 Cloud Storage에 결과 작성

      다음은 Cloud Storage의 오디오 파일에서 일괄 음성 인식을 수행하고 Cloud Storage의 출력 파일에서 스크립트 작성 결과를 읽는 예시입니다. Cloud Storage에 기록된 파일은 JSON 형식의 BatchRecognizeResults 메시지임에 유의하세요.

      Python

      import os
      
      import re
      
      from google.cloud import storage
      from google.cloud.speech_v2 import SpeechClient
      from google.cloud.speech_v2.types import cloud_speech
      
      PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
      
      
      def transcribe_batch_gcs_input_gcs_output_v2(
          audio_uri: str,
          gcs_output_path: str,
      ) -> cloud_speech.BatchRecognizeResults:
          """Transcribes audio from a Google Cloud Storage URI using the Google Cloud Speech-to-Text API.
          The transcription results are stored in another Google Cloud Storage bucket.
          Args:
              audio_uri (str): The Google Cloud Storage URI of the input audio file.
                  E.g., gs://[BUCKET]/[FILE]
              gcs_output_path (str): The Google Cloud Storage bucket URI where the output transcript will be stored.
                  E.g., gs://[BUCKET]
          Returns:
              cloud_speech.BatchRecognizeResults: The response containing the URI of the transcription results.
          """
          # Instantiates a client
          client = SpeechClient()
      
          config = cloud_speech.RecognitionConfig(
              auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
              language_codes=["en-US"],
              model="long",
          )
      
          file_metadata = cloud_speech.BatchRecognizeFileMetadata(uri=audio_uri)
      
          request = cloud_speech.BatchRecognizeRequest(
              recognizer=f"projects/{PROJECT_ID}/locations/global/recognizers/_",
              config=config,
              files=[file_metadata],
              recognition_output_config=cloud_speech.RecognitionOutputConfig(
                  gcs_output_config=cloud_speech.GcsOutputConfig(
                      uri=gcs_output_path,
                  ),
              ),
          )
      
          # Transcribes the audio into text
          operation = client.batch_recognize(request=request)
      
          print("Waiting for operation to complete...")
          response = operation.result(timeout=120)
      
          file_results = response.results[audio_uri]
      
          print(f"Operation finished. Fetching results from {file_results.uri}...")
          output_bucket, output_object = re.match(
              r"gs://([^/]+)/(.*)", file_results.uri
          ).group(1, 2)
      
          # Instantiates a Cloud Storage client
          storage_client = storage.Client()
      
          # Fetch results from Cloud Storage
          bucket = storage_client.bucket(output_bucket)
          blob = bucket.blob(output_object)
          results_bytes = blob.download_as_bytes()
          batch_recognize_results = cloud_speech.BatchRecognizeResults.from_json(
              results_bytes, ignore_unknown_fields=True
          )
      
          for result in batch_recognize_results.results:
              print(f"Transcript: {result.alternatives[0].transcript}")
      
          return batch_recognize_results
      
      

      여러 파일에서 일괄 인식 수행

      다음은 Cloud Storage의 여러 오디오 파일에서 일괄 음성 인식을 수행하고 Cloud Storage의 출력 파일에서 스크립트 작성 결과를 읽는 예시입니다.

      Python

      import os
      import re
      from typing import List
      
      from google.cloud import storage
      from google.cloud.speech_v2 import SpeechClient
      from google.cloud.speech_v2.types import cloud_speech
      
      PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
      
      
      def transcribe_batch_multiple_files_v2(
          audio_uris: List[str],
          gcs_output_path: str,
      ) -> cloud_speech.BatchRecognizeResponse:
          """Transcribes audio from multiple Google Cloud Storage URIs using the Google Cloud Speech-to-Text API.
          The transcription results are stored in another Google Cloud Storage bucket.
          Args:
              audio_uris (List[str]): The list of Google Cloud Storage URIs of the input audio files.
                  E.g., ["gs://[BUCKET]/[FILE]", "gs://[BUCKET]/[FILE]"]
              gcs_output_path (str): The Google Cloud Storage bucket URI where the output transcript will be stored.
                  E.g., gs://[BUCKET]
          Returns:
              cloud_speech.BatchRecognizeResponse: The response containing the URIs of the transcription results.
          """
          # Instantiates a client
          client = SpeechClient()
      
          config = cloud_speech.RecognitionConfig(
              auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
              language_codes=["en-US"],
              model="long",
          )
      
          files = [cloud_speech.BatchRecognizeFileMetadata(uri=uri) for uri in audio_uris]
      
          request = cloud_speech.BatchRecognizeRequest(
              recognizer=f"projects/{PROJECT_ID}/locations/global/recognizers/_",
              config=config,
              files=files,
              recognition_output_config=cloud_speech.RecognitionOutputConfig(
                  gcs_output_config=cloud_speech.GcsOutputConfig(
                      uri=gcs_output_path,
                  ),
              ),
          )
      
          # Transcribes the audio into text
          operation = client.batch_recognize(request=request)
      
          print("Waiting for operation to complete...")
          response = operation.result(timeout=120)
      
          print("Operation finished. Fetching results from:")
          for uri in audio_uris:
              file_results = response.results[uri]
              print(f"  {file_results.uri}...")
              output_bucket, output_object = re.match(
                  r"gs://([^/]+)/(.*)", file_results.uri
              ).group(1, 2)
      
              # Instantiates a Cloud Storage client
              storage_client = storage.Client()
      
              # Fetch results from Cloud Storage
              bucket = storage_client.bucket(output_bucket)
              blob = bucket.blob(output_object)
              results_bytes = blob.download_as_bytes()
              batch_recognize_results = cloud_speech.BatchRecognizeResults.from_json(
                  results_bytes, ignore_unknown_fields=True
              )
      
              for result in batch_recognize_results.results:
                  print(f"     Transcript: {result.alternatives[0].transcript}")
      
          return response
      
      

      일괄 인식에서 동적 일괄 처리 사용 설정

      동적 일괄 처리를 사용하면 스크립트 작성 비용을 절감하고 지연 시간이 더 길어집니다. 이 기능은 일괄 인식에만 사용할 수 있습니다.

      다음은 동적 일괄 처리가 사용 설정된 상태에서 Cloud Storage에 있는 오디오 파일에 대해 일괄 인식을 수행한 예입니다.

      Python

      import os
      
      from google.cloud.speech_v2 import SpeechClient
      from google.cloud.speech_v2.types import cloud_speech
      
      PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
      
      
      def transcribe_batch_dynamic_batching_v2(
          audio_uri: str,
      ) -> cloud_speech.BatchRecognizeResults:
          """Transcribes audio from a Google Cloud Storage URI using dynamic batching.
          Args:
              audio_uri (str): The Cloud Storage URI of the input audio.
              E.g., gs://[BUCKET]/[FILE]
          Returns:
              cloud_speech.BatchRecognizeResults: The response containing the transcription results.
          """
          # Instantiates a client
          client = SpeechClient()
      
          config = cloud_speech.RecognitionConfig(
              auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
              language_codes=["en-US"],
              model="long",
          )
      
          file_metadata = cloud_speech.BatchRecognizeFileMetadata(uri=audio_uri)
      
          request = cloud_speech.BatchRecognizeRequest(
              recognizer=f"projects/{PROJECT_ID}/locations/global/recognizers/_",
              config=config,
              files=[file_metadata],
              recognition_output_config=cloud_speech.RecognitionOutputConfig(
                  inline_response_config=cloud_speech.InlineOutputConfig(),
              ),
              processing_strategy=cloud_speech.BatchRecognizeRequest.ProcessingStrategy.DYNAMIC_BATCHING,
          )
      
          # Transcribes the audio into text
          operation = client.batch_recognize(request=request)
      
          print("Waiting for operation to complete...")
          response = operation.result(timeout=120)
      
          for result in response.results[audio_uri].transcript.results:
              print(f"Transcript: {result.alternatives[0].transcript}")
      
          return response.results[audio_uri].transcript
      
      

      파일마다 인식 기능 재정의

      기본 일괄 인식은 일괄 인식 요청의 각 파일에 대해 동일한 인식 구성을 사용합니다. 파일마다 다른 구성 또는 기능이 필요한 경우 [BatchRecognizeFileMetadata][batch-file-metadata-grpc] 메시지의 config 필드를 사용하여 파일별로 구성을 재정의할 수 있습니다. 인식 기능 재정의의 예시를 보려면 인식자 문서를 참조하세요.

      삭제

      이 페이지에서 사용한 리소스 비용이 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

      다음 단계