Vista geral do Cloud Speech-to-Text

Este documento é um guia para as noções básicas da utilização do Cloud Speech-to-Text. Este guia conceptual aborda os tipos de pedidos que pode fazer ao Cloud STT, como criar esses pedidos e como processar as respetivas respostas. Recomendamos que todos os utilizadores do Cloud STT leiam este guia e um dos tutoriais associados antes de explorar a API propriamente dita.

Experimente

Se está a usar o Google Cloud pela primeira vez, crie uma conta para avaliar o desempenho do STT do Google Cloud em cenários reais. Os novos clientes também recebem 300 USD em créditos gratuitos para executar, testar e implementar cargas de trabalho.

Experimente o STT na nuvem gratuitamente

Pedidos de voz

O STT na nuvem tem três métodos principais para realizar o reconhecimento de voz:

  • O reconhecimento síncrono (REST e gRPC) envia dados de áudio para a Cloud Speech-to-Text API, efetua o reconhecimento desses dados e devolve os resultados depois de todo o áudio ter sido processado. Os pedidos de reconhecimento síncronos estão limitados a dados de áudio com uma duração de 1 minuto ou menos.

  • O reconhecimento assíncrono (REST e gRPC) envia dados de áudio para a API Cloud Speech-to-Text e inicia uma operação de longa duração. Com esta operação, pode verificar periodicamente os resultados do reconhecimento. Use pedidos assíncronos para dados de áudio de qualquer duração até 480 minutos.

  • O reconhecimento em streaming (apenas gRPC) realiza o reconhecimento em dados de áudio fornecidos numa stream bidirecional gRPC. Os pedidos de streaming são concebidos para fins de reconhecimento em tempo real, como a captura de áudio em direto de um microfone. O reconhecimento de streaming fornece resultados provisórios enquanto o áudio está a ser capturado, o que permite que o resultado seja apresentado, por exemplo, enquanto um utilizador ainda está a falar.

Os pedidos contêm parâmetros de configuração, bem como dados de áudio. As secções seguintes descrevem estes tipos de pedidos de reconhecimento, as respostas que geram e como processar essas respostas mais detalhadamente.

Reconhecimento da Cloud Speech-to-Text API

Um pedido de reconhecimento síncrono da API Cloud Speech-to-Text é o método mais simples para realizar o reconhecimento em dados de áudio de voz. O STT na nuvem pode processar até 1 minuto de dados de áudio de voz enviados num pedido síncrono. Depois de o STT na nuvem processar e reconhecer todo o áudio, devolve uma resposta.

Um pedido síncrono é de bloqueio, o que significa que o STT na nuvem tem de devolver uma resposta antes de processar o pedido seguinte. Normalmente, o STT na nuvem processa o áudio mais rapidamente do que em tempo real, processando 30 segundos de áudio em média 15 segundos. Em casos de má qualidade de áudio, o seu pedido de reconhecimento pode demorar significativamente mais tempo.

Pedidos de reconhecimento de voz síncronos

Um pedido síncrono da API Cloud Speech-to-Text consiste numa configuração de reconhecimento de voz e em dados de áudio. Por exemplo:

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

Todos os pedidos de reconhecimento síncrono da Cloud Speech-to-Text API têm de incluir um campo de reconhecimento de voz config (do tipo RecognitionConfig). O elemento A RecognitionConfig contém os seguintes subcampos:

  • encoding: obrigatório. Especifica o esquema de codificação do áudio fornecido (do tipo AudioEncoding). Se tiver uma escolha de codec, prefira uma codificação sem perdas, como FLAC ou LINEAR16, para um melhor desempenho. (Para mais informações, consulte o artigo Codificações de áudio.) O campo encoding é opcional para ficheiros FLAC e WAV em que a codificação está incluída no cabeçalho do ficheiro.
  • sampleRateHertz: obrigatório. Especifica a taxa de amostragem (em Hertz) do áudio fornecido. (Para mais informações sobre as taxas de amostragem, consulte a secção Taxas de amostragem abaixo.) O campo sampleRateHertz é opcional para ficheiros FLAC e WAV em que a taxa de amostragem está incluída no cabeçalho do ficheiro.
  • languageCode: obrigatório. Contém o idioma, além da região ou da localidade a usar para o reconhecimento de voz do áudio fornecido. O código de idioma tem de ser um identificador BCP-47. Tenha em atenção que os códigos de idioma consistem normalmente em etiquetas de idioma principais e subetiquetas de região secundárias para indicar dialetos (por exemplo, "en" para inglês e "US" para os Estados Unidos no exemplo anterior). (Para ver uma lista de idiomas suportados, consulte o artigo Idiomas suportados.)
  • maxAlternatives: opcional, predefinição 1. Indica o número de transcrições alternativas a fornecer na resposta. Por predefinição, a Cloud Speech-to-Text API fornece uma transcrição principal. Se quiser avaliar diferentes alternativas, defina maxAlternatives para um valor mais elevado. Tenha em atenção que o STT na nuvem só devolve alternativas se o reconhecedor determinar que as alternativas têm qualidade suficiente. Em geral, as alternativas são mais adequadas para pedidos em tempo real que requerem feedback do utilizador (por exemplo, comandos de voz) e, por isso, são mais adequadas para pedidos de reconhecimento de streaming.
  • profanityFilter: opcional. Indica se devem ser filtradas palavras ou expressões profanas. As palavras filtradas contêm a primeira letra e asteriscos para os restantes carateres (por exemplo, f***). O filtro de obscenidades funciona com palavras únicas e não deteta discurso abusivo ou ofensivo que seja uma expressão ou uma combinação de palavras.
  • speechContext: opcional. Contém informações contextuais adicionais para o tratamento deste áudio. Um contexto contém os seguintes subcampos:
    • boost: contém um valor que atribui um peso ao reconhecimento de uma determinada palavra ou expressão.
    • phrases: contém uma lista de palavras e expressões que dão sugestões à tarefa de reconhecimento de voz. Para mais informações, consulte as informações sobre a adaptação de voz.

O áudio é fornecido ao STT do Cloud através do parâmetro audio do tipo RecognitionAudio. O campo audio contém qualquer um dos seguintes subcampos:

  • content contém o áudio a avaliar, incorporado no pedido. Consulte o artigo Incorporar conteúdo de áudio para mais informações. O áudio transmitido diretamente neste campo está limitado a 1 minuto.
  • uri contém um URI que aponta para o conteúdo de áudio. O ficheiro não pode estar comprimido (por exemplo, gzip). Este campo tem de conter um URI do Cloud Storage (no formato gs://bucket-name/path_to_audio_file). Consulte o artigo Transmitir referência de áudio através de um URI.

Taxas de amostragem

Especifica a taxa de amostragem do áudio no campo sampleRateHertz da configuração do pedido e tem de corresponder à taxa de amostragem do conteúdo ou da stream de áudio associada. As taxas de amostragem entre 8000 Hz e 48 000 Hz são suportadas no Cloud STT. Pode especificar a taxa de amostragem de um ficheiro FLAC ou WAV no cabeçalho do ficheiro em vez de usar o campo sampleRateHertz. Um ficheiro FLAC tem de conter a taxa de amostragem no cabeçalho FLAC para ser enviado para a API Speech-to-Text.

Se tiver uma escolha ao codificar o material de origem, capture o áudio com uma taxa de amostragem de 16 000 Hz. Os valores inferiores a este podem prejudicar a precisão do reconhecimento de voz, e os níveis mais elevados não têm um efeito apreciável na qualidade do reconhecimento de voz.

No entanto, se os seus dados de áudio já tiverem sido gravados a uma taxa de amostragem existente diferente de 16 000 Hz, não volte a fazer a amostragem do áudio para 16 000 Hz. Por exemplo, a maioria do áudio de telefonia antigo usa taxas de amostragem de 8000 Hz, o que pode dar resultados menos precisos. Se tiver de usar esse áudio, forneça-o à API Speech com a taxa de amostragem original.

Idiomas

O motor de reconhecimento do STT do Cloud suporta vários idiomas e dialetos. Especifica o idioma (e o dialeto nacional ou regional) do áudio no campo languageCode da configuração do pedido, através de um identificador BCP-47.

Pode consultar uma lista completa dos idiomas suportados para cada funcionalidade na página Suporte de idiomas.

Compensações de tempo (indicações de tempo)

O STT na nuvem pode incluir valores de desvio de tempo (datas/horas) para o início e o fim de cada palavra falada que é reconhecida no áudio fornecido. Um valor de deslocamento de tempo representa a quantidade de tempo decorrido desde o início do áudio, em incrementos de 100 ms.

Os deslocamentos de tempo são especialmente úteis para analisar ficheiros de áudio mais longos, nos quais pode ter de pesquisar uma palavra específica no texto reconhecido e localizá-la (procurá-la) no áudio original. Os desvios de tempo são suportados para todos os nossos métodos de reconhecimento: recognize, streamingrecognize e longrunningrecognize.

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

Para incluir desvios de tempo nos resultados do seu pedido, defina o parâmetro enableWordTimeOffsets como verdadeiro na configuração do pedido. Para ver exemplos de utilização da API REST ou das bibliotecas cliente, consulte o artigo Usar desvios de tempo (datas/horas). Por exemplo, pode incluir o parâmetro enableWordTimeOffsets na configuração do pedido, conforme mostrado aqui:

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

O resultado devolvido pela API Cloud Speech-to-Text contém valores de desvio 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 modelo

O STT na nuvem pode usar um de vários modelos de aprendizagem automática para transcrever o seu ficheiro de áudio. A Google preparou estes modelos de reconhecimento de voz para tipos e fontes de áudio específicos.

Quando envia um pedido de transcrição de áudio para o Cloud STT, pode melhorar os resultados que recebe especificando a origem do áudio original. Isto permite que a API Cloud Speech-to-Text processe os seus ficheiros de áudio através de um modelo de aprendizagem automática preparado para reconhecer áudio de voz desse tipo específico de origem.

Para especificar um modelo para o reconhecimento de voz, inclua o campo model no objeto RecognitionConfig para o seu pedido, especificando o modelo que quer usar.

Consulte a lista de modelos de transcrição do STT do Google Cloud para ver os modelos de aprendizagem automática disponíveis.

Conteúdo de áudio incorporado

O áudio incorporado é incluído no pedido de reconhecimento de voz quando transmite um parâmetro content no campo audio do pedido. Para áudio incorporado fornecido como conteúdo num pedido gRPC, esse áudio tem de ser compatível com a serialização Proto3 e fornecido como dados binários. Para o áudio incorporado fornecido como conteúdo num pedido REST, esse áudio tem de ser compatível com a serialização JSON e tem de estar codificado em Base64. Consulte o artigo Codificar o áudio em Base64 para mais informações.

Quando cria um pedido com uma biblioteca de cliente do Google Cloud, normalmente, escreve estes dados binários (ou codificados em base 64) diretamente no campo content.

Transmita áudio referenciado por um URI

Normalmente, transmite um parâmetro uri no campo audio do pedido de voz, que aponta para um ficheiro de áudio (em formato binário, não base64) localizado no Cloud Storage do seguinte formulário:

gs://bucket-name/path_to_audio_file

Por exemplo, a seguinte parte de um pedido de voz faz referência ao ficheiro de áudio de exemplo usado no início rápido:

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

Tem de ter as autorizações de acesso adequadas para ler ficheiros do Cloud Storage, como uma das seguintes:

  • Legíveis publicamente (como os nossos ficheiros de áudio de exemplo)
  • Legível pela sua conta de serviço, se usar a autorização da conta de serviço.
  • Legível por uma conta de utilizador, se usar o OAuth trilateral para autorização da conta de utilizador.

Estão disponíveis mais informações sobre a gestão do acesso ao Cloud Storage no artigo Criar e gerir listas de controlo de acesso na documentação do Cloud Storage.

Respostas da Cloud Speech-to-Text API

Conforme indicado anteriormente, uma resposta síncrona da API Cloud Speech-to-Text pode demorar algum tempo a devolver resultados, proporcional à duração do áudio fornecido. Depois de processada, a API devolve uma resposta, conforme mostrado no seguinte 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 (os segmentos de áudio são separados por pausas). Cada resultado é composto por um ou mais dos seguintes campos:
    • alternatives contém uma lista de transcrições possíveis do tipo SpeechRecognitionAlternatives. A apresentação de mais do que uma alternativa depende de ter pedido mais do que uma alternativa (definindo maxAlternatives para um valor superior a 1) e de o Cloud STT ter produzido alternativas de qualidade suficientemente elevada. Cada alternativa vai consistir nos seguintes campos:

Os componentes desta resposta são explicados nas secções seguintes.

Selecione alternativas

Cada resultado numa resposta de reconhecimento síncrono bem-sucedida pode conter um ou mais alternatives (se o valor maxAlternatives do pedido for superior a 1). Se o Cloud STT determinar que uma alternativa tem um Valor de confiança suficiente, essa alternativa é incluída na resposta. A primeira alternativa na resposta é sempre a melhor (mais provável) alternativa.

A definição de maxAlternatives para um valor superior a 1 não implica nem garante que serão devolvidas várias alternativas. Em geral, mais do que uma alternativa é mais adequada para fornecer opções em tempo real aos utilizadores que obtêm resultados através de um pedido de reconhecimento de streaming.

Processamento de transcrições

Cada alternativa fornecida na resposta vai conter um transcript com o texto reconhecido. Quando lhe são apresentadas alternativas sequenciais, deve concatenar estas transcrições.

O seguinte código Python itera uma lista de resultados e concatena as transcrições. Tenha em atenção que consideramos a primeira alternativa (a alternativa 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']

Valores de confiança

O valor de confidence é uma estimativa entre 0.0 e 1.0. É calculado agregando os valores de "probabilidade" atribuídos a cada palavra no áudio. Um número mais elevado indica uma probabilidade estimada maior de que as palavras individuais tenham sido reconhecidas corretamente. Este campo é normalmente fornecido apenas para a hipótese principal e apenas para resultados em que is_final=true. Por exemplo, pode usar o valor confidence para decidir se deve mostrar resultados alternativos ao utilizador ou pedir-lhe confirmação.

No entanto, tenha em atenção que o modelo determina o "melhor" resultado com a classificação mais elevada com base em mais sinais do que apenas a pontuação confidence (como o contexto da frase). Por este motivo, existem casos ocasionais em que o resultado principal não tem a pontuação de confiança mais elevada. Se não tiver pedido vários resultados alternativos, o único "melhor" resultado devolvido pode ter um valor de confiança inferior ao esperado. Isto pode ocorrer, por exemplo, em casos em que estão a ser usadas palavras raras. A uma palavra raramente usada pode ser atribuído um valor de "probabilidade" baixo, mesmo que seja reconhecida corretamente. Se o modelo determinar que a palavra rara é a opção mais provável com base no contexto, esse resultado é devolvido na parte superior, mesmo que o valor confidence do resultado seja inferior às opções alternativas.

Pedidos e respostas assíncronos

Um pedido assíncrono da Cloud Speech-to-Text API para o método LongRunningRecognize é idêntico em termos de forma a um pedido síncrono da Cloud Speech-to-Text API. No entanto, em vez de devolver uma resposta, o pedido assíncrono inicia uma operação de longa duração (do tipo Operation) e devolve esta operação imediatamente ao autor da chamada. Pode usar o reconhecimento de voz assíncrono com áudio 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"
  }
}

Tenha em atenção que ainda não existem resultados. O STT na nuvem vai continuar a processar o áudio e usar esta operação para armazenar os resultados. Os resultados são apresentados no campo response da operação devolvida quando o pedido LongRunningRecognize estiver concluído.

O exemplo seguinte é uma resposta completa após a conclusão do pedido:

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

Tenha em atenção que done foi definido como True e que a operação response contém um conjunto de resultados do tipo SpeechRecognitionResult que é o mesmo tipo devolvido por um pedido de reconhecimento da API Cloud Speech-to-Text síncrono.

Pedidos de reconhecimento da API Streaming Cloud Speech-to-Text

Uma chamada de reconhecimento da Cloud Speech-to-Text API de streaming foi concebida para a captura e o reconhecimento de áudio em tempo real, numa stream bidirecional. A sua aplicação pode enviar áudio na stream de pedido e receber resultados de reconhecimento interinos e finais na stream de resposta em tempo real. Os resultados provisórios representam o resultado do reconhecimento atual de uma secção de áudio, enquanto o resultado do reconhecimento final representa a melhor estimativa final para essa secção de áudio.

Pedidos de streaming

Ao contrário das chamadas síncronas e assíncronas, nas quais envia a configuração e o áudio num único pedido, a chamada da API Speech Streaming requer o envio de vários pedidos. O primeiro StreamingRecognizeRequest tem de conter uma configuração do tipo StreamingRecognitionConfig sem áudio associado. Os StreamingRecognizeRequests enviados posteriormente na mesma stream consistirão em frames consecutivos de bytes de áudio não processados.

Um StreamingRecognitionConfig é composto pelos seguintes campos:

  • config: obrigatório. Contém informações de configuração para o áudio, do tipo RecognitionConfig e é igual ao apresentado em pedidos síncronos e assíncronos.
  • single_utterance: (opcional, predefinição: false) indica se este pedido deve terminar automaticamente quando a fala deixar de ser detetada. Se estiver definido, o STT na nuvem deteta pausas, silêncio ou áudio sem voz para determinar quando terminar o reconhecimento. Se não for definido, a stream continua a ouvir e a processar áudio até ser fechada diretamente ou o comprimento limite da stream ser excedido. A definição de single_utterance para true é útil para processar comandos de voz.
  • interim_results: (opcional, predefinição: false) indica que este pedido de stream deve devolver resultados temporários que podem ser refinados posteriormente (após o processamento de mais áudio). Os resultados provisórios são indicados nas respostas através da definição de is_final como false.

Respostas de streaming

Os resultados do reconhecimento de voz em streaming são devolvidos numa série de respostas do tipo StreamingRecognitionResponse. Uma resposta deste tipo é composta pelos seguintes campos:

  • speechEventType contém eventos do tipo SpeechEventType. O valor destes eventos indica quando se determinou que uma única expressão foi concluída. Os eventos de voz servem como marcadores na resposta da sua stream.
  • results contém a lista de resultados, que podem ser resultados provisó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 nesta entrada da lista são provisórios ou finais. A Google pode devolver vários resultados isFinal=true ao longo de uma única stream, mas o resultado isFinal=true só é garantido após o fecho parcial da stream de gravação.
    • stability indica a volatilidade dos resultados obtidos até agora, com 0.0 a indicar instabilidade completa, enquanto 1.0 indica estabilidade completa. Tenha em atenção que, ao contrário da confiança, que estima se uma transcrição está correta, a stability estima se o resultado parcial fornecido pode mudar. Se isFinal estiver definido como true, stability não é definido.