Saiba mais sobre os recursos de reconhecimento de fala

O Speech-to-Text é uma das três APIs pré-treinadas da Vertex AI na Google Distributed Cloud (GDC) isolada por air-gap. O serviço Speech-to-Text reconhece a fala em arquivos de áudio e transcreve o áudio em texto. O Speech-to-Text atende aos requisitos de residência e compliance de dados.

A tabela a seguir descreve os principais recursos do Speech-to-Text:

Principais recursos
Transcrição Aplique algoritmos avançados de rede neural de aprendizado profundo para reconhecimento automático de fala.
Modelos Implante modelos de reconhecimento com tamanho inferior a 1 GB que consomem recursos mínimos.
Compatível com APIs Use a API Speech-to-Text e as bibliotecas de cliente dela para enviar áudio e receber uma transcrição de texto do serviço Speech-to-Text.

Codificações de áudio compatíveis com a Speech-to-Text

A Speech-to-Text API é compatível com várias codificações diferentes. A tabela a seguir lista codecs de áudio compatíveis:

Codec Nome Sem perdas Observações sobre uso
FLAC Codec de áudio livre sem perdas Sim 16 bits ou 24 bits obrigatórios para o stream
LINEAR16 Modulação por código de pulso linear Sim Codificação de modulação de código de pulso linear de 16 bits (PCM) O cabeçalho precisa conter a taxa de amostragem.
MULAW μ-law Não Codificação PCM de 8 bits
OGG_OPUS Frames de áudio codificados Opus em um contêiner Ogg Não A taxa de amostragem precisa ser de 8.000 Hz, 12.000 Hz, 16.000 Hz, 24.000 Hz ou 48.000 Hz

FLAC é um codec de áudio e um formato de arquivo de áudio. Para transcrever arquivos de áudio usando a codificação FLAC, é necessário fornecê-los no formato de arquivo .FLAC, que inclui um cabeçalho contendo metadados.

O Speech-to-Text é compatível com arquivos WAV com áudio codificado como LINEAR16 ou MULAW.

Para mais informações sobre codecs de áudio do Speech-to-Text, consulte a documentação de referência do AudioEncoding.

Se houver uma escolha ao codificar o material de origem, use uma codificação sem perdas como FLAC ou LINEAR16 para um melhor reconhecimento de fala.

Recursos do Speech-to-Text

O Speech-to-Text no Distributed Cloud tem os três métodos a seguir para realizar o reconhecimento de fala:

  • Reconhecimento síncrono: envia dados de áudio para a API Speech-to-Text, executa o reconhecimento nesses dados e retorna os resultados após o processamento do áudio. As solicitações de reconhecimento síncrono são limitadas a dados de áudio de até um minuto.

  • Reconhecimento assíncrono: envia dados de áudio para a API Speech-to-Text e inicia uma operação de longa duração. Usando 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.

  • Reconhecimento de streaming: realiza reconhecimento em dados de áudio fornecidos em um stream 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 os resultados apareçam, por exemplo, enquanto um usuário ainda fala.

As solicitações contêm parâmetros de configuração e dados de áudio. As seções a seguir descrevem esses pedidos de reconhecimento, as respostas que eles geram e como lidar com essas respostas em mais detalhes.

Solicitações e respostas síncronas

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

A Speech-to-Text precisa retornar uma resposta antes de processar a próxima solicitação. O Speech-to-Text normalmente processa o áudio mais rápido do que o tempo real, processando em média 30 segundos de áudio em 15 segundos. Em casos de má qualidade de áudio, sua solicitação de reconhecimento pode demorar muito mais tempo.

Solicitações de reconhecimento de fala

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

{
    "config": {
        "encoding": "LINEAR16",
        "sample_rate_hertz": 16000,
        "language_code": "en-US",
    },
    "audio": {
        "content": "ZkxhQwAAACIQABAAAAUJABtAA+gA8AB+W8FZndQvQAyjv..."
    }
}

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

  • encoding: especifica o esquema de codificação do áudio fornecido. Esse campo é do tipo AudioEncoding. Se você tiver uma opção de codec, prefira uma codificação sem perdas, como FLAC ou LINEAR16, para ter melhor desempenho. Para uma lista de formatos de codificação de áudio compatíveis, consulte Codificações de áudio compatíveis com a Speech-to-Text. O campo encoding é opcional para arquivos FLAC e WAV, que incluem a codificação no cabeçalho do arquivo.
  • sample_rate_hertz: especifica a taxa de amostragem do áudio fornecido em Hertz. Para mais informações sobre taxas de amostragem, consulte Taxas de amostragem. O campo sample_rate_hertz é opcional para arquivos FLAC e WAV, que incluem a taxa de amostragem no cabeçalho do arquivo.
  • language_code: contém o idioma e a região a serem usados para o reconhecimento de fala do áudio fornecido. O código de idioma precisa ser um identificador BCP-47. Os códigos de idioma consistem em tags de idioma principais e subtags de região secundárias para indicar dialetos. No exemplo, en é para inglês e US é para os Estados Unidos. Para uma lista de idiomas compatíveis, consulte Idiomas compatíveis.

Para mais informações e uma descrição dos subcampos opcionais que podem ser incluídos no campo config, consulte RecognitionConfig.

Forneça áudio para a API Speech-to-Text usando o parâmetro audio do tipo RecognitionAudio. O campo audio contém o seguinte subcampo:

  • content: contém o áudio a ser avaliado, incorporado à solicitação. Os bytes de dados de áudio são codificados usando uma representação binária pura. As representações JSON usam Base64. Consulte Conteúdo de áudio incorporado para mais informações. O áudio passado diretamente neste campo é limitado a um minuto de duração.

Taxas de amostragem

Especifique a taxa de amostragem do áudio no campo sample_rate_hertz da configuração da solicitação. Ela precisa corresponder à taxa de amostragem do conteúdo de áudio associado. A Speech-to-Text aceita taxas de amostragem entre 8.000 Hz e 48.000 Hz. É possível especificar a taxa de amostragem para um arquivo FLAC ou WAV no cabeçalho do arquivo em vez de usar o campo sample_rate_hertz. No entanto, o campo sample_rate_hertz é obrigatório para todos os outros formatos de áudio.

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 precisão do reconhecimento de fala, e níveis mais altos não têm efeito apreciável na qualidade do reconhecimento de fala.

No entanto, se você gravou os dados de áudio com uma taxa de amostragem diferente de 16.000 Hz, não faça uma nova amostragem para 16.000 Hz. A maioria dos áudios de telefonia legados, por exemplo, usa taxas de amostragem de 8.000 Hz, o que pode gerar resultados menos precisos. Se você precisa usar esse áudio, apresente-o à API Speech-to-Text com a taxa de amostragem original.

Idiomas

O mecanismo de reconhecimento da Speech-to-Text é compatível com vários idiomas e dialetos. Você especifica o idioma (e o dialeto nacional ou regional) do áudio no campo language_code da configuração da solicitação usando um identificador BCP-47.

A página Idiomas compatíveis tem uma lista completa de idiomas compatíveis para cada recurso.

Seleção de modelos

Ao enviar uma solicitação de transcrição de áudio para a Speech-to-Text, é possível processar seus arquivos de áudio usando um modelo de machine learning treinado para reconhecer o áudio de fala daquele tipo específico de origem.

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

A Speech-to-Text no Distributed Cloud é compatível com os dois modelos a seguir:

  • default: transcrever áudio que não é um modelo de áudio específico, como áudio longo.
  • chirp: transcreva áudio multilíngue quando precisar de mais acurácia. O Chirp realiza o reconhecimento automático de fala em vários idiomas, mesmo que eles tenham poucos recursos e não tenham muitos dados rotulados disponíveis para treinamento.

Conteúdo de áudio incorporado

O áudio incorporado é incluído na solicitação de reconhecimento de fala ao transmitir um parâmetro content dentro do campo audio da solicitação. O áudio incorporado apresentado como conteúdo dentro de uma solicitação da REST precisa ser compatível com a serialização JSON.

Só é possível enviar dados diretamente no campo content para reconhecimento síncrono se os seus dados de áudio tiverem no máximo 60 segundos e 10 MB. Todos os dados de áudio no campo content precisam estar no formato Base64.

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

A maioria dos ambientes de desenvolvimento vem com um utilitário base64 para codificar um binário em dados de texto ASCII, oferecendo as ferramentas e o suporte necessários. Além disso, o Python tem mecanismos integrados para codificar conteúdo em Base64. Os exemplos a seguir mostram como codificar um arquivo:

Linux

Codifique o arquivo usando a ferramenta de linha de comando base64. Para evitar a quebra de linha, use a flag -w 0:

base64 INPUT_FILE -w 0 > OUTPUT_FILE

Python

Em Python, codifique os arquivos de áudio em Base64 da seguinte maneira:

# Import the base64 encoding library.
import base64

# Pass the audio data to an encoding function.
def encode_audio(audio):
  audio_content = audio.read()
  return base64.b64encode(audio_content)

Respostas de reconhecimento de fala

Uma resposta síncrona da API Speech-to-Text pode levar algum tempo para retornar resultados. Depois de processado, a API retorna uma resposta como no exemplo a seguir:

{
  "results": [
    {
      "alternatives": [
        {
          "transcript": "how old is the Brooklyn Bridge",
          "words": [
            {
              "word": "how"
            },
            {
              "word": "old"
            },
            {
              "word": "is"
            },
            {
              "word": "the"
            },
            {
              "word": "Brooklyn"
            },
            {
              "word": "Bridge"
            }
          ]
        }
      ]
    }
  ]
}

Todas as respostas de reconhecimento síncrono da API Speech-to-Text incluem resultados de reconhecimento de fala do tipo RecognizeResponse. Um objeto RecognizeResponse contém os seguintes campos:

  • results: contém a lista de resultados do tipo SpeechRecognitionResult, em que cada resultado corresponde a um segmento de áudio. Cada resultado consiste em um ou mais dos seguintes subcampos:

    • alternatives: contém uma lista de transcrições possíveis do tipo SpeechRecognitionAlternative. A primeira opção na resposta é sempre a mais provável. Cada alternativa consiste nos seguintes subcampos:

      • transcript: contém o texto transcrito. Quando forem apresentadas alternativas sequenciais, você poderá concatenar essas transcrições juntas.
      • words: contém uma lista de informações específicas para cada palavra reconhecida.

Para ver mais informações, consulte RecognizeResponse.

Solicitações e respostas assíncronas

Uma solicitação assíncrona da API Speech-to-Text é idêntica em forma a uma solicitação síncrona. No entanto, em vez de retornar uma resposta, a solicitação assíncrona inicia uma operação de longa duração e retorna essa operação imediatamente. É possível usar o reconhecimento de fala assíncrono com áudio de qualquer duração de até 480 minutos.

Confira a seguir um exemplo de resposta de operação:

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

Observe que os resultados ainda não estão presentes. A Speech-to-Text continua processando o áudio e usa essa operação para armazenar os resultados. Os resultados aparecem no campo response da operação retornada quando a solicitação LongRunningRecognize é concluída.

Confira a seguir um exemplo de 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_v1p1beta1.LongRunningRecognizeMetadata",
    "startTime": "2016-08-31T00:16:29.539820Z",
    "progressPercent": 100
  }
  "response": {
    "@type": "type.googleapis.com/google.cloud.speech_v1p1beta1.LongRunningRecognizeResponse",
    "results": [{
      "alternatives": [{
        "transcript": "how old is the Brooklyn Bridge",
        "words": [
            {
              "word": "how"
            },
            {
              "word": "old"
            },
            {
              "word": "is"
            },
            {
              "word": "the"
            },
            {
              "word": "Brooklyn"
            },
            {
              "word": "Bridge"
            }
          ]
      }]}]
  },
  "done": True
}

Observe que done está definido como True e que a response da operação contém um conjunto de resultados do tipo SpeechRecognitionResult, o mesmo tipo retornado por uma solicitação de reconhecimento síncrono.

Solicitações e respostas de streaming

Uma chamada de reconhecimento da API Speech-to-Text em streaming é projetada para captura e reconhecimento em tempo real do áudio em um fluxo bidirecional. Seu aplicativo pode enviar áudio no stream de solicitação e receber resultados de reconhecimento provisórios e finais em tempo real no stream de resposta. 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 reconhecimento 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-to-Text de streaming exige o envio de várias solicitações. O primeiro StreamingRecognizeRequest precisa conter uma configuração do tipo StreamingRecognitionConfig.

Um StreamingRecognitionConfig consiste no campo config, que contém informações de configuração para o áudio do tipo RecognitionConfig e é igual ao mostrado em solicitações síncronas e assíncronas.

Respostas de reconhecimento de streaming

Os resultados de reconhecimento de fala em streaming retornam uma série de respostas do tipo StreamingRecognizeResponse. Essa resposta consiste nos seguintes campos:

  • speech_event_type: contém eventos do tipo SpeechEventType. O valor desses eventos indica quando uma única fala foi concluída. Os eventos de fala servem como marcadores dentro da resposta de streaming.
  • results: contém a lista de resultados, que podem ser provisórios ou finais, do tipo StreamingRecognitionResult. A lista results inclui os seguintes subcampos:
    • alternatives: contém uma lista de transcrições alternativas.
    • is_final: indica se os resultados obtidos nessa entrada da lista são intermediários ou finais.
    • result_end_time: indica o ajuste de tempo relativo ao final deste resultado e correspondente ao início do áudio.

Chirp: modelo de fala universal

O Chirp é a próxima geração de modelos de conversão da Speech-to-Text no Google Distributed Cloud (GDC) com isolamento físico. Representando uma versão de um modelo de fala universal, o Chirp tem mais de 2 bilhões de parâmetros e pode transcrever vários idiomas em um único modelo.

Você pode transcrever arquivos de áudio em outros idiomas disponíveis ativando o componente Chirp.

O Chirp alcança a taxa de erro de palavra (WER, na sigla em inglês) mais avançada em vários conjuntos de testes e idiomas públicos, oferecendo suporte a vários idiomas na Distributed Cloud. Ele usa um codificador universal que treina modelos com uma arquitetura diferente dos modelos de fala atuais, usando dados em muitos outros idiomas. Em seguida, o modelo é ajustado para oferecer transcrição em idiomas específicos. Um único modelo unifica dados de vários idiomas. No entanto, os usuários ainda especificam o idioma em que o modelo deve reconhecer a fala.

O Chirp processa a fala em blocos muito maiores do que outros modelos. Os resultados só ficam disponíveis depois que uma declaração termina, o que significa que o Chirp pode não ser adequado para uso em tempo real.

O identificador de modelo do Chirp é chirp. Portanto, é possível definir o valor chirp no campo model do objeto RecognitionConfig da solicitação.

Métodos de API disponíveis

O Chirp é compatível com os métodos da API Speech-to-Text Recognize e StreamingRecognize.

Os dois métodos são diferentes porque StreamingRecognize só retorna resultados após cada declaração. Por isso, esse método tem uma latência da ordem de segundos, e não milissegundos, após o início da fala, em comparação com o método Recognize. No entanto, o StreamingRecognize tem uma latência muito baixa depois que uma expressão é concluída, por exemplo, em uma frase seguida de uma pausa.