Visão geral da Cloud Speech-to-Text

Este documento é um guia dos princípios básicos para o uso da Cloud Speech-to-Text. Ele é um guia conceitual que explica os tipos de solicitações que podem ser feitas à Cloud STT, como criar essas solicitações e como lidar com as respostas. Recomendamos que todos os usuários da Cloud STT leiam este guia e um dos tutoriais associados antes de usar a API.

Faça um teste

Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho da Cloud STT em situações reais. Clientes novos também recebem US$ 300 em créditos sem custos para executar, testar e implantar cargas de trabalho.

Faça uma avaliação sem custos da Cloud STT

Solicitações de fala

A Cloud STT utiliza três métodos principais para o reconhecimento de fala:

  • O reconhecimento síncrono (REST e gRPC) envia dados de áudio à API Cloud Speech-to-Text, executa o reconhecimento nesses dados e retorna os resultados depois do processamento do áudio. As solicitações de reconhecimento síncrono são limitadas a dados de áudio de até 1 minuto de duração.

  • O reconhecimento assíncrono (REST e gRPC) envia dados de áudio à API Cloud Speech-to-Text e inicia uma operação de longa duração. Com essa operação, é possível pesquisar periodicamente resultados de reconhecimento. Use solicitações assíncronas para dados de áudio de qualquer duração de até 480 minutos.

  • O reconhecimento de streaming (somente gRPC) realiza reconhecimento em dados de áudio fornecidos em um fluxo gRPC bidirecional. As solicitações de streaming são projetadas para fins de reconhecimento em tempo real, como captura de áudio ao vivo de um microfone. O reconhecimento em streaming oferece resultados provisórios enquanto o áudio está sendo capturado, permitindo que o resultado apareça, por exemplo, enquanto um usuário ainda está falando.

As solicitações contêm parâmetros de configuração, bem como dados de áudio. Nas seções a seguir, descrevemos com mais detalhes esses tipos de solicitações de reconhecimento, as respostas geradas por elas e como lidar com essas respostas.

Reconhecimento da API Cloud Speech-to-Text

Uma solicitação de reconhecimento síncrono da API Cloud Speech-to-Text é o método mais simples para realizar o reconhecimento em dados de áudio de fala. A Cloud STT consegue processar até um minuto de dados de áudio de fala enviados em uma solicitação síncrona. Depois que ela processa e reconhece todo o áudio, uma resposta é retornada.

Uma solicitação síncrona causa bloqueios, o que significa que a Cloud STT precisa retornar uma resposta antes de processar a próxima solicitação. Em geral, a Cloud STT processa áudios mais rápido do que o tempo real, processando em média 30 segundos de áudio em 15 segundos. Em casos de qualidade baixa de áudio, sua solicitação de reconhecimento pode demorar muito mais tempo.

Solicitações de reconhecimento de fala síncrono

Uma solicitação síncrona da API Cloud Speech-to-Text consiste em uma configuração de reconhecimento de fala e em dados de áudio. Por exemplo:

{
    "config": {
        "encoding": "LINEAR16",
        "sampleRateHertz": 16000,
        "languageCode": "en-US",
    },
    "audio": {
        "uri": "gs://bucket-name/path_to_audio_file"
    }
}

Todas as solicitações de reconhecimento síncrono da API Cloud Speech-to-Text precisam incluir um campo config de reconhecimento de fala do tipo RecognitionConfig. Um RecognitionConfig contém os seguintes subcampos:

  • encoding (obrigatório): especifica o esquema de codificação do áudio fornecido (do tipo AudioEncoding). Se você tiver opções no codec, opte por uma codificação sem perdas, como FLAC ou LINEAR16, para um melhor desempenho. Para mais informações, consulte Codificações de áudio. O campo encoding é opcional para arquivos FLAC e WAV em que a codificação está incluída no cabeçalho do arquivo.
  • sampleRateHertz (obrigatório): especifica a taxa de amostragem (em Hertz) do áudio fornecido. Para mais informações sobre essa taxa, consulte as Taxas de amostragem abaixo. O campo sampleRateHertz é opcional para arquivos FLAC e WAV em que a taxa de amostragem está incluída no cabeçalho do arquivo.
  • languageCode (obrigatório): contém o idioma e a região ou localidade para uso no reconhecimento de fala do áudio fornecido. O código de idioma precisa ser um identificador BCP-47. Observe que os códigos de idioma geralmente consistem em tags de idioma principais e subtags de região secundárias para indicar dialetos. No exemplo acima, en para inglês e US para os Estados Unidos. Para uma lista de idiomas disponíveis, consulte Idiomas disponíveis.
  • maxAlternatives (opcional): o valor padrão é 1. Indica o número de transcrições alternativas a serem fornecidas na resposta. Por padrão, a API Cloud Speech-to-Text fornece uma transcrição principal. Para avaliar alternativas diferentes, defina maxAlternatives para um valor mais alto. Observe que a Cloud STT só retorna alternativas quando o identificador determina que elas têm qualidade suficiente. De modo geral, elas são mais apropriadas para solicitações em tempo real que exigem feedback do usuário (como comandos de voz) e, portanto, são mais adequadas para solicitações de reconhecimento de streaming.
  • profanityFilter (opcional): indica se palavras ou frases obscenas devem ser filtradas. As palavras filtradas contêm a primeira letra e asteriscos no lugar dos caracteres restantes, como f***. O filtro de linguagem obscena opera em palavras isoladas e não detecta discursos abusivos ou ofensivos em uma frase ou combinação de palavras.
  • speechContext (opcional): contém mais informações contextuais para o processamento do áudio. Um contexto contém os seguintes subcampos:
    • boost: contém um valor que atribui um peso ao reconhecimento de uma determinada palavra ou frase.
    • phrases: contém uma lista de palavras e frases com dicas para a tarefa de reconhecimento de fala. Para saber mais, consulte as informações sobre adaptação de fala.

O áudio é fornecido à Cloud STT por meio do parâmetro audio do tipo RecognitionAudio. O campo audio contém um dos seguintes subcampos:

  • content contém o áudio a ser avaliado, incorporado à solicitação. Consulte Incorporação de conteúdos de áudio para mais informações. O áudio transmitido diretamente nesse campo é limitado a um minuto de duração.
  • uri contém um URI que aponta para o conteúdo do áudio. O arquivo não pode estar compactado (por exemplo, gzip). Esse campo precisa conter um URI do Cloud Storage no formato gs://bucket-name/path_to_audio_file. Consulte Como transmitir uma referência de áudio por um URI.

Taxas de amostragem

Especifique a taxa de amostragem do áudio no campo sampleRateHertz da configuração da solicitação. Ela precisa corresponder à taxa de amostragem do conteúdo ou fluxo de áudio associado. Taxas de amostragem entre 8.000 Hz e 48.000 Hz são aceitas na Cloud STT. É possível especificar a taxa de amostragem para um arquivo FLAC ou WAV no cabeçalho do arquivo em vez de usar o campo sampleRateHertz. Um arquivo FLAC precisa conter a taxa de amostragem no cabeçalho FLAC para ser enviado à API Speech-to-Text.

Se houver uma escolha ao codificar o material de origem, capture o áudio usando uma taxa de amostragem de 16.000 Hz. Valores inferiores a esse podem prejudicar a acurácia do reconhecimento de fala, e níveis mais altos não têm efeito prático na qualidade do reconhecimento.

No entanto, se os dados de áudio já tiverem sido gravados a uma taxa de amostragem diferente de 16.000 Hz, não recrie o áudio para que ele tenha essa taxa. A maior parte dos áudios de telefonia legados, por exemplo, usa taxas de amostragem de 8.000 Hz, que podem oferecer resultados menos precisos. Se realmente for necessário usar esse áudio, envie-o à API Speech com a taxa de amostragem original.

Idiomas

O mecanismo de reconhecimento da Cloud STT aceita vários idiomas e dialetos. Você especifica o idioma (e o dialeto nacional ou regional) do áudio no campo languageCode da configuração da solicitação usando um identificador BCP-47.

Confira uma lista completa de idiomas aceitos para cada recurso na página Suporte a idiomas.

Ajustes de tempo (carimbos de data/hora)

A Cloud STT pode incluir valores de ajuste de tempo (carimbo de data/hora) para o início e o fim de cada palavra falada que é reconhecida no áudio fornecido. Um valor de ajuste de tempo representa a quantidade de tempo decorrido desde o início do áudio, em incrementos de 100 ms.

Os ajustes de horário são especialmente úteis para analisar arquivos de áudio mais longos, quando for necessário pesquisar uma determinada palavra no texto reconhecido e localizá-la (procurar) no áudio original. Ajustes de horário são compatíveis com todos os nossos métodos de reconhecimento: recognize, streamingrecognize e longrunningrecognize.

Os valores de ajuste de tempo só são incluídos para a primeira alternativa apresentada na resposta de reconhecimento.

Para incluir ajustes de tempo nos resultados da solicitação, defina o parâmetro enableWordTimeOffsets como verdadeiro na configuração da solicitação. Para exemplos que usem a API REST ou as bibliotecas de cliente, consulte Como usar ajustes de horário (carimbos de data/hora). Por exemplo, é possível incluir o parâmetro enableWordTimeOffsets na configuração da solicitação, conforme mostrado aqui:

{
"config": {
  "languageCode": "en-US",
  "enableWordTimeOffsets": true
  },
"audio":{
  "uri":"gs://gcs-test-data/gettysburg.flac"
  }
}

O resultado retornado pela API Cloud Speech-to-Text vai conter valores de ajuste de tempo para cada palavra reconhecida, conforme mostrado abaixo:

{
  "name": "6212202767953098955",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata",
    "progressPercent": 100,
    "startTime": "2017-07-24T10:21:22.013650Z",
    "lastUpdateTime": "2017-07-24T10:21:45.278630Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse",
    "results": [
      {
        "alternatives": [
          {
            "transcript": "Four score and twenty...(etc)...",
            "confidence": 0.97186122,
            "words": [
              {
                "startTime": "1.300s",
                "endTime": "1.400s",
                "word": "Four"
              },
              {
                "startTime": "1.400s",
                "endTime": "1.600s",
                "word": "score"
              },
              {
                "startTime": "1.600s",
                "endTime": "1.600s",
                "word": "and"
              },
              {
                "startTime": "1.600s",
                "endTime": "1.900s",
                "word": "twenty"
              },
              ...
            ]
          }
        ]
      },
      {
        "alternatives": [
          {
            "transcript": "for score and plenty...(etc)...",
            "confidence": 0.9041967,
          }
        ]
      }
    ]
  }
}

Seleção de modelos

A Cloud STT pode usar um dos vários modelos de machine learning para transcrever seu arquivo de áudio. O Google treinou esses modelos de reconhecimento de fala para origens e tipos de áudio específicos.

Ao enviar uma solicitação de transcrição de áudio à Cloud STT, é possível melhorar os resultados recebidos especificando a origem do áudio original. Assim, a API Cloud Speech-to-Text pode processar os arquivos de áudio usando um modelo de machine learning treinado para reconhecer áudios de fala daquele tipo específico de origem.

Para especificar um modelo para o reconhecimento de fala, inclua o campo model no objeto RecognitionConfig da solicitação, especificando o modelo que você quer usar.

Consulte a lista de modelos de transcrição da Cloud STT para conferir os modelos de machine learning disponíveis.

Conteúdo de áudio incorporado

O áudio incorporado é incluído na solicitação de reconhecimento de fala ao transmitir um parâmetro content no campo audio da solicitação. O áudio incorporado apresentado como conteúdo dentro de uma solicitação gRPC precisa ser compatível com a serialização Proto3 e oferecido como dados binários. O áudio incorporado apresentado como conteúdo em uma solicitação REST precisa ser aceito pela serialização JSON e codificado primeiro em Base64. Consulte Como codificar áudios em Base64 para mais informações.

Ao criar uma solicitação usando uma biblioteca de cliente do Google Cloud, você geralmente grava esses dados binários (ou codificados em Base64) diretamente no campo content.

Transmitir o áudio referenciado por um URI

Normalmente, você transmite um parâmetro uri no campo audio da solicitação da API, apontando para um arquivo de áudio em formato binário, não em Base64, que está no Cloud Storage no seguinte formato:

gs://bucket-name/path_to_audio_file

Por exemplo, a parte abaixo de uma solicitação da API Speech faz referência ao arquivo de áudio de exemplo usado no guia de início rápido:

...
    "audio": {
        "uri":"gs://cloud-samples-tests/speech/brooklyn.flac"
    }
...

Você precisa ter permissões de acesso apropriadas para ler arquivos do Cloud Storage, como uma das seguintes:

  • Leitura pública (como de arquivos de áudio de exemplo).
  • Leitura pela conta de serviço, se estiver usando a autorização da conta de serviço.
  • Leitura por uma conta de usuário, ao usar o OAuth de três etapas para a autorização da conta de usuário.

Saiba como gerenciar o acesso ao Cloud Storage em Como criar e gerenciar listas de controle de acesso na documentação do Cloud Storage.

Respostas da API Cloud Speech-to-Text

Como indicado anteriormente, uma resposta síncrona da API Cloud Speech-to-Text pode levar algum tempo para retornar resultados, proporcionalmente à duração do áudio fornecido. Depois do processamento, a API retorna uma resposta conforme mostrado neste bloco de código:

{
  "results": [
    {
      "alternatives": [
        {
          "confidence": 0.98267895,
          "transcript": "how old is the Brooklyn Bridge"
        }
      ]
    }
  ]
}
  • results contém a lista de resultados (do tipo SpeechRecognitionResult), em que cada resultado corresponde a um segmento de áudio (segmentos de áudio são separados por pausas). Cada resultado consistirá em um ou mais dos seguintes campos:
    • alternatives contém uma lista de transcrições possíveis, do tipo SpeechRecognitionAlternatives. Para que mais de uma alternativa apareça, você precisa ter solicitado mais de uma alternativa (definindo maxAlternatives para um valor maior que 1) e a Cloud STT precisa ter produzido alternativas com qualidade alta o suficiente. Cada alternativa vai consistir nos seguintes campos:

Os componentes dessa resposta são explicados nas seções a seguir.

Selecionar alternativas

Cada resultado em uma resposta de reconhecimento síncrona bem-sucedida pode conter um ou mais alternatives (caso o valor maxAlternatives da solicitação seja maior que 1). Se a Cloud STT determinar que uma alternativa tem um nível de confiança suficiente, essa alternativa será incluída na resposta. A primeira opção na resposta é sempre a melhor alternativa (a mais provável).

Configurar maxAlternatives com um valor maior que 1 não implica ou garante que várias alternativas serão retornadas. Em geral, é mais apropriado fornecer mais de uma alternativa para oferecer opções em tempo real aos usuários que terão acesso aos resultados por meio de uma solicitação de reconhecimento de streaming.

Como processar transcrições

Cada alternativa fornecida na resposta terá um transcript contendo o texto reconhecido. Quando forem apresentadas alternativas sequenciais, você deverá concatenar essas transcrições juntas.

O seguinte código do Python itera sobre uma lista de resultados e concatena as transcrições juntas. Observe que tomamos a primeira alternativa (o zero) em todos os casos.

response = service_request.execute()
recognized_text = 'Transcribed Text: \n'
for i in range(len(response['results'])):
    recognized_text += response['results'][i]['alternatives'][0]['transcript']

Níveis de confiança

O valor confidence é uma estimativa entre 0.0 e 1.0. Ele é calculado agregando os valores de “probabilidade” atribuídos a cada palavra no áudio. Um número maior indica uma probabilidade maior estimada de que as palavras individuais foram reconhecidas corretamente. Esse campo normalmente é fornecido apenas para a hipótese principal e somente para resultados em que is_final=true. Por exemplo, é possível usar o valor confidence para decidir exibir resultados alternativos para o usuário ou solicitar a confirmação do usuário.

No entanto, esteja ciente de que o modelo determina o resultado melhor classificado com base em mais sinais do que a pontuação confidence isoladamente (como o contexto da frase). Por isso, há casos eventuais em que o principal resultado não tem o maior índice de confiança. Se você não solicitou vários resultados alternativos, o único resultado "melhor" retornado pode ter um valor de confiança menor do que o previsto. Isso pode ocorrer, por exemplo, nos casos em que palavras raras estão sendo usadas. Uma palavra que é raramente usada pode receber um valor baixo de “verossimilhança”, mesmo que seja reconhecida corretamente. Se o modelo determinar que uma palavra rara é a opção mais provável com base no contexto, esse resultado será retornado na parte superior, mesmo que o valor confidence do resultado seja menor do que as opções alternativas.

Respostas e solicitações assíncronas

Uma solicitação assíncrona da API Cloud Speech-to-Text para o método LongRunningRecognize é idêntica a uma solicitação síncrona da API Cloud Speech-to-Text. No entanto, em vez de retornar uma resposta, a solicitação assíncrona vai iniciar uma operação de longa duração (do tipo Operação) e retornar essa operação imediatamente ao recebedor da chamada. É possível usar o reconhecimento de fala assíncrono com áudios de qualquer duração, até 480 minutos.

Por exemplo:

{
  "name": "operation_name",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata"
    "progressPercent": 34,
    "startTime": "2016-08-30T23:26:29.579144Z",
    "lastUpdateTime": "2016-08-30T23:26:29.826903Z"
  }
}

Observe que ainda não resultados. A Cloud STT vai continuar processando o áudio e vai usar essa operação para armazenar os resultados. Os resultados serão exibidos no campo response da operação retornada quando a solicitação LongRunningRecognize for concluída.

Confira este exemplo de uma resposta completa após a conclusão da solicitação:

{
  "name": "1268386125834704889",
  "metadata": {
    "lastUpdateTime": "2016-08-31T00:16:32.169Z",
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongrunningRecognizeMetadata",
    "startTime": "2016-08-31T00:16:29.539820Z",
    "progressPercent": 100
  }
  "response": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse",
    "results": [{
      "alternatives": [{
        "confidence": 0.98267895,
        "transcript": "how old is the Brooklyn Bridge"
      }]}]
  },
  "done": True,
}

Observe que done foi definido como True e que a response da operação contém um conjunto de resultados do tipo SpeechRecognitionResult, que é o mesmo tipo retornado por uma solicitação síncrona de reconhecimento da API Cloud Speech-to-Text.

Solicitações de reconhecimento de streaming da API Cloud Speech-to-Text

Uma chamada de reconhecimento de streaming da API Cloud Speech-to-Text é projetada para captura e reconhecimento em tempo real de áudios em um fluxo bidirecional. Seu aplicativo pode enviar áudios no stream de solicitação e receber resultados de reconhecimento provisórios e finais no stream de resposta em tempo real. Resultados provisórios representam o resultado de reconhecimento atual para uma seção de áudio, enquanto o resultado de reconhecimento final apresenta a última e melhor sugestão para essa seção de áudio.

Solicitações de streaming

Ao contrário das chamadas síncronas e assíncronas, em que você envia tanto a configuração quanto o áudio em uma única solicitação, chamar a API Speech de streaming exige o envio de várias solicitações. O primeiro StreamingRecognizeRequest precisa conter uma configuração do tipo StreamingRecognitionConfig sem qualquer áudio de acompanhamento. Os StreamingRecognizeRequests subsequentes enviados pelo mesmo stream consistirão em frames consecutivos de bytes de áudio brutos.

Um StreamingRecognitionConfig é composto dos seguintes campos:

  • config (obrigatório): contém as informações de configuração do áudio, do tipo RecognitionConfig, e é igual ao que é mostrado em solicitações síncronas e assíncronas.
  • single_utterance (opcional): o padrão é false. Indica se a solicitação deve ser encerrada automaticamente quando a fala não é mais detectada. Se definido, a Cloud STT vai detectar pausas, silêncios ou áudios sem fala para determinar quando encerrar o reconhecimento. Se não definido, o fluxo vai continuar a ouvir e processar o áudio até que seja encerrado diretamente ou que o comprimento limite seja excedido. Definir single_utterance como true é útil para processar comandos de voz.
  • interim_results (opcional): o padrão é false. Indica que a solicitação de stream deve retornar resultados temporários que podem ser refinados posteriormente (após o processamento de mais áudios). Os resultados provisórios serão anotados nas respostas por meio da configuração de is_final como false.

Respostas de streaming

Os resultados de reconhecimento de fala em streaming são retornados dentro de uma série de respostas do tipo StreamingRecognitionResponse. Essa resposta consiste nos seguintes campos:

  • speechEventType contém eventos do tipo SpeechEventType. O valor desses eventos indicará quando uma única fala for determinada como concluída. Os eventos de fala atuam como marcadores na resposta do fluxo.
  • results contém a lista de resultados, que podem ser intermediários ou finais, do tipo StreamingRecognitionResult. A lista results contém os seguintes subcampos:
    • alternatives contém uma lista de transcrições alternativas.
    • isFinal indica se os resultados obtidos nessa entrada da lista são intermediários ou finais. O Google pode retornar vários resultados isFinal=true em um fluxo, mas o resultado isFinal=true só é garantido depois que o fluxo de gravação é encerrado (metade do encerramento).
    • stability indica a volatilidade dos resultados obtidos até agora, com 0.0 indicando instabilidade completa e 1.0 indicando estabilidade completa. Diferentemente da confiança, que estima se uma transcrição está correta, stability estima se o resultado parcial pode ser alterado. Se isFinal estiver definido como true, stability não será definido.