Saiba mais sobre as funcionalidades de reconhecimento de voz

O Speech-to-Text é uma das três APIs pré-treinadas do Vertex AI no dispositivo isolado do Google Distributed Cloud (GDC). O serviço de conversão de voz em texto reconhece a voz em ficheiros de áudio e transcreve o áudio em texto. A API Speech-to-Text cumpre os requisitos de residência e conformidade dos dados.

A tabela seguinte descreve as principais capacidades da conversão de voz em texto:

Principais capacidades
Transcrição Aplicar algoritmos de redes neurais de aprendizagem profunda avançada para o reconhecimento de voz automático.
Modelos Implemente modelos de reconhecimento com menos de 1 GB e que consumam recursos mínimos.
Compatível com API Use a API Speech-to-Text e as respetivas bibliotecas cliente para enviar áudio e receber uma transcrição de texto do serviço Speech-to-Text.

Codificações de áudio suportadas para a conversão de voz em texto

A API Speech-to-Text suporta várias codificações diferentes. A tabela seguinte indica os codecs de áudio suportados:

Codec Nome Sem perdas Notas de utilização
FLAC Free Lossless Audio Codec Sim 16 ou 24 bits necessários para streams
LINEAR16 PCM linear Sim Codificação de modulação por impulsos de código (PCM) linear de 16 bits. O cabeçalho tem de conter a taxa de amostragem.
MULAW μ-law Não Codificação PCM de 8 bits
OGG_OPUS Frames de áudio codificados em Opus num contentor Ogg Não A taxa de amostragem tem de ser uma das seguintes: 8000 Hz, 12 000 Hz, 16 000 Hz, 24 000 Hz ou 48 000 Hz

FLAC é um codec de áudio e um formato de ficheiro de áudio. Para transcrever ficheiros de áudio com a codificação FLAC, tem de os fornecer no formato de ficheiro .FLAC, que inclui um cabeçalho com metadados.

A funcionalidade de conversão de voz em texto suporta ficheiros WAV com áudio codificado em LINEAR16 ou MULAW.

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

Funcionalidades de conversão de voz em texto

A conversão de voz em texto no dispositivo isolado do GDC tem os seguintes três métodos para realizar o reconhecimento de voz:

  • Reconhecimento síncrono: envia dados de áudio para a API Speech-to-Text, realiza o reconhecimento desses dados e devolve os resultados após o processamento de áudio. Os pedidos de reconhecimento síncronos estão limitados a um minuto ou menos de dados de áudio.

  • Reconhecimento assíncrono: envia dados de áudio para a API 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.

  • Reconhecimento em streaming: realiza o reconhecimento em dados de áudio fornecidos numa stream bidirecional. Os pedidos de streaming são concebidos para fins de reconhecimento em tempo real, como a captação de áudio em direto a partir de um microfone. O reconhecimento de streaming fornece resultados provisórios enquanto o áudio está a ser capturado, o que permite que os resultados sejam apresentados, por exemplo, enquanto um utilizador ainda está a falar.

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

Pedidos e respostas síncronos

Um pedido de reconhecimento síncrono de conversão de voz em texto é o método mais simples para fazer o reconhecimento de dados de áudio de voz. O Speech-to-Text pode processar até um minuto de dados de áudio de voz enviados num pedido síncrono. Depois de o Speech-to-Text processar e reconhecer todo o áudio, devolve uma resposta.

O Speech-to-Text tem de devolver uma resposta antes de processar o pedido seguinte. Pode transcrever até sete minutos de áudio por minuto, o que equivale a sete segundos de áudio transcrito por segundo em cada unidade de eletrodoméstico. Em casos de má qualidade de áudio, o seu pedido de reconhecimento pode demorar significativamente mais tempo.

Pedidos de reconhecimento de voz

Um pedido síncrono da API Speech-to-Text inclui uma configuração de reconhecimento de voz e dados de áudio. O exemplo seguinte mostra um pedido:

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

Todos os pedidos de reconhecimento síncrono de voz para texto têm de incluir um campo de reconhecimento de voz config do tipo RecognitionConfig. Um objeto RecognitionConfig contém os seguintes subcampos obrigatórios:

  • encoding: especifica o esquema de codificação do áudio fornecido. Este campo é do tipo AudioEncoding. Se tiver uma escolha num codec, prefira uma codificação sem perdas, como FLAC ou LINEAR16, para ter o melhor desempenho. Para ver uma lista dos formatos de codificação de áudio suportados, consulte o artigo Codificações de áudio suportadas para a API Speech-to-Text. O campo encoding é opcional para ficheiros FLAC e WAV, que incluem a codificação no cabeçalho do ficheiro.
  • sample_rate_hertz: especifica a taxa de amostragem do áudio fornecido em Hertz. Para mais informações sobre as taxas de amostragem, consulte o artigo Taxas de amostragem. O campo sample_rate_hertz é opcional para ficheiros FLAC e WAV, que incluem a taxa de amostragem no cabeçalho do ficheiro.
  • language_code: contém o idioma e a região a usar para o reconhecimento de voz do áudio fornecido. O código de idioma tem de ser um identificador BCP-47. Os códigos de idioma consistem em etiquetas de idioma principal e subetiquetas de região secundárias para indicar dialetos. No exemplo, en refere-se ao inglês e US refere-se aos Estados Unidos. Para ver uma lista dos idiomas suportados, consulte o artigo Idiomas suportados.

Forneça áudio à conversão de voz em texto através do parâmetro audio do tipo RecognitionAudio. O campo audio contém o seguinte subcampo:

  • content: contém o áudio a avaliar, incorporado no pedido. Os bytes de dados de áudio são codificados através de uma representação binária pura. As representações JSON usam Base64. Consulte o artigo Conteúdo de áudio incorporado para mais informações. O áudio transmitido diretamente neste campo está limitado a um minuto de duração.

Taxas de amostragem

Especifica a taxa de amostragem do áudio no campo sample_rate_hertz da configuração do pedido, e tem de corresponder à taxa de amostragem do conteúdo de áudio associado. O Speech-to-Text suporta taxas de amostragem entre 8000 Hz e 48 000 Hz. Pode especificar a taxa de amostragem para um ficheiro FLAC ou WAV no cabeçalho do ficheiro 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 tiver uma escolha ao codificar o material de origem, capture o áudio com uma taxa de amostragem de 16 000 Hz. Os valores mais baixos 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 tiver gravado os dados de áudio a uma taxa de amostragem diferente de 16 000 Hz, não volte a amostrar o áudio para 16 000 Hz. A maioria do áudio de telefonia antigo, por exemplo, usa taxas de amostragem de 8000 Hz, o que pode dar resultados menos precisos. Se tiver de usar esse áudio, faculte-o à API Speech-to-Text à taxa de amostragem original.

Idiomas

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

A página Idiomas suportados tem uma lista completa dos idiomas suportados para cada funcionalidade.

Seleção de modelo

Quando envia um pedido de transcrição de áudio para o Speech-to-Text, pode processar os seus ficheiros de áudio através de um modelo de aprendizagem automática preparado para reconhecer áudio de voz desse tipo de origem específico.

Para especificar um modelo para o reconhecimento de voz, inclua o campo model no objeto RecognitionConfig do seu pedido, especificando o modelo que quer usar. A funcionalidade de conversão de voz em texto no dispositivo isolado do GDC só é compatível com o modelo default.

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 numa solicitação REST, esse áudio tem de ser compatível com a serialização JSON.

Pode enviar dados diretamente no campo content para reconhecimento síncrono apenas se os seus dados de áudio tiverem um máximo de 60 segundos e 10 MB. Todos os dados de áudio no campo content têm de estar no formato Base64.

Quando cria um pedido com uma biblioteca de cliente, escreve estes dados binários ou codificados em Base64 diretamente no campo content.

A maioria dos ambientes de desenvolvimento inclui um utilitário base64 para codificar um ficheiro binário em dados de texto ASCII, o que lhe fornece as ferramentas e o apoio técnico necessários. Além disso, o Python tem mecanismos incorporados para codificar conteúdo em Base64. Os exemplos seguintes mostram como codificar um ficheiro:

Linux

Codifique o ficheiro com a ferramenta de linha de comandos base64. Impeça a mudança de linha usando a flag -w 0:

base64 INPUT_FILE -w 0 > OUTPUT_FILE

Python

Em Python, codifique ficheiros de áudio em Base64 da seguinte forma:

# 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 voz

Uma resposta da API Speech-to-Text síncrona pode demorar algum tempo a devolver resultados. Após o processamento, a API devolve uma resposta como no exemplo seguinte:

{
  "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 voz 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 num ou mais dos seguintes subcampos:

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

      • transcript: contém o texto transcrito. Quando são fornecidas alternativas sequenciais, pode concatenar estas transcrições.
      • words: contém uma lista de informações específicas de palavras para cada palavra reconhecida.

Pedidos e respostas assíncronos

Um pedido da API Speech-to-Text assíncrono tem a mesma forma que um pedido síncrono. No entanto, em vez de devolver uma resposta, o pedido assíncrono inicia uma operação de longa duração e devolve esta operação imediatamente. Pode usar o reconhecimento de voz assíncrono com áudio de qualquer duração até 480 minutos.

Segue-se um exemplo de uma 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"
  }
}

Tenha em atenção que os resultados ainda não estão presentes. A conversão de voz em texto continua a processar o áudio e usa esta operação para armazenar os resultados. Os resultados aparecem no campo response da operação devolvida quando o pedido LongRunningRecognize estiver concluído.

Segue-se um exemplo de 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_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
}

Tenha em atenção que done está definido como True e que o response da operação contém um conjunto de resultados do tipo SpeechRecognitionResult, o mesmo tipo devolvido por um pedido de reconhecimento síncrono.

Pedidos e respostas de streaming

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

Pedidos de reconhecimento 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-to-Text de streaming requer o envio de vários pedidos. O primeiro StreamingRecognizeRequest tem de 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 apresentado em pedidos síncronos e assíncronos.

Respostas de reconhecimento de streaming

Os resultados do reconhecimento de voz em streaming devolvem uma série de respostas do tipo StreamingRecognizeResponse. Uma resposta deste tipo é composta pelos seguintes campos:

  • speech_event_type: contém eventos do tipo SpeechEventType. O valor destes eventos indica quando 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 inclui os seguintes subcampos:
    • alternatives: contém uma lista de transcrições alternativas.
    • is_final: indica se os resultados obtidos nesta entrada da lista são provisórios ou finais.
    • result_end_time: indica o desvio de tempo do fim deste resultado relativamente ao início do áudio.