Transcrever vários arquivos de áudio longos de maneira assíncrona

Esta página demonstra como transcrever um ou mais arquivos de áudio longos de maneira assíncrona. O Recognize impõe um limite de duração de áudio de um minuto. Portanto, para arquivos mais longos, use BatchRecognize.

O reconhecimento de fala em lote retorna um google.longrunning.Operation que pode ser consultado para saber quando a transcrição dos seus arquivos foi concluída. As transcrições são gravadas em um bucket do Google Cloud Storage especificado por você.

Fazer reconhecimento de fala em lote

Para que a Speech-to-Text acesse seus arquivos no Google Cloud Storage, crie uma conta de serviço para a Speech-to-Text e conceda a ela acesso de leitura ao objeto de armazenamento relevante. Para criar uma conta de serviço no Cloud Shell, execute o comando a seguir e crie a conta, se ela não existir, e exiba-a.

Configuração de BatchRecognizeRequest

O BatchRecognize usa o reconhecedor especificado para executar o reconhecimento. Portanto, os parâmetros de decodificação são a única configuração que você precisa fornecer, explicitamente ou escolhendo a decodificação automática.

Confira um exemplo de solicitação 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"
      }
    }
}

Substituições no nível de solicitação

Além do idioma e do modelo, o reconhecedor também inclui uma lista de parâmetros de reconhecimento (como enable_automatic_punctuation e outras opções). Há parâmetros que podem ser substituídos no nível da solicitação, para sua conveniência, para que você não precise criar um reconhecedor diferente para cada combinação de recursos de reconhecimento que quiser.

Supondo que um reconhecedor foi criado como acima:

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

É assim que os recursos são substituídos no nível da solicitação. Isso significa que o reconhecimento de cada arquivo terá esses recursos aplicados a ele.

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"
      }
    }
}

Isso vai executar o ASR em gs://my-audio-bucket/en-us/cheese.wav com apenas o recurso de reconhecimento enableWordTimeOffsets ativado, porque foi ativado no nível do reconhecedor e não especificado no nível da solicitação. Como enableAutomaticPunctuation foi especificado como falso no nível da solicitação, ele vai substituir o valor original do conjunto verdadeiro no nível do reconhecedor, e essa solicitação não vai realizar a pontuação automática.

Substituições no nível de arquivo

Essa mesma situação pode acontecer no arquivo, permitindo máxima flexibilidade para definir os recursos de reconhecimento por arquivo. Por exemplo, talvez você queira que todos os arquivos tenham pontuação automática, mas tenham ajustes de tempo de palavras apenas em arquivos específicos.

Você pode criar seu reconhecedor como acima. Além de especificar uma solicitação, desta forma:

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"
    }
  }
}

Processar uma resposta em BatchRecognize

BatchRecognize retorna uma google.longrunning.Operation como resposta. Consulte a página Operações para saber como pesquisar uma operação.

O BatchRecognizeResponse é definido após a conclusão e detalha por arquivo o resultado, que é um URI do Cloud Storage para a transcrição ou uma mensagem de erro descrevendo o que deu errado.

A resposta JSON será semelhante a esta:

'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'
    }
  }
}

O arquivo de transcrição para BatchRecognize é formatado como um objeto do tipo BatchRecognizeResults.