Saiba mais sobre as funcionalidades de reconhecimento de voz

A conversão de voz em texto é uma das três APIs pré-preparadas do Vertex AI no Google Distributed Cloud (GDC) air-gapped. O serviço de conversão de voz em texto reconhece a voz em ficheiros de áudio e transcreve o áudio em texto. A conversão de voz em texto está em conformidade com 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 Aplique algoritmos de redes neurais de aprendizagem profunda avançada para o reconhecimento de voz automático.
Modelos Implemente modelos de reconhecimento com um tamanho inferior a 1 GB e que consomem recursos mínimos.
API compatível Use a API Speech-to-Text e as respetivas bibliotecas de cliente para enviar áudio e receber uma transcrição de texto do serviço Speech-to-Text.

Codificações de áudio compatíveis com a conversão de voz em texto

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

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 PCM (modulação por código de impulsos) 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 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 conversão de voz em texto é compatível com ficheiros WAV com áudio codificado em LINEAR16 ou MULAW.

Para mais informações sobre os codecs de áudio da conversão de voz em texto, consulte a AudioEncoding documentação de referência.

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

Funcionalidades da conversão de voz em texto

A conversão de voz em texto no Distributed Cloud 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 tratamento do áudio. Os pedidos de reconhecimento síncrono 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 consultar periodicamente os resultados do reconhecimento. Use pedidos assíncronos para dados de áudio de qualquer duração até 480 minutos.

  • Reconhecimento de streaming: realiza o reconhecimento de dados de áudio fornecidos numa stream bidirecional. Os pedidos de streaming foram concebidos para fins de reconhecimento em tempo real, como a captura 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 de forma mais detalhada.

Pedidos e respostas síncronos

Um pedido de reconhecimento síncrono da conversão de voz em texto é o método mais simples para realizar o reconhecimento de dados de áudio de voz. A conversão de voz em texto pode tratar até um minuto de dados de áudio de voz enviados num pedido síncrono. Depois de a conversão de voz em texto tratar e reconhecer todo o áudio, devolve uma resposta.

A conversão de voz em texto tem de devolver uma resposta antes de tratar o pedido seguinte. Normalmente, a conversão de voz em texto trata o áudio mais rapidamente do que em tempo real, tratando, em média, 30 segundos de áudio em 15 segundos. Em casos de baixa qualidade de áudio, o pedido de reconhecimento pode demorar significativamente mais tempo.

Pedidos de reconhecimento de voz

Um pedido síncrono da API Speech-to-Text compreende 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 da conversão de voz em texto têm de incluir um campo config de reconhecimento de voz 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 um melhor desempenho. Para ver uma lista dos formatos de codificação de áudio compatíveis, consulte o artigo Codificações de áudio compatíveis com a conversão de voz em texto. 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 BCP-47 identificador. Os códigos de idioma consistem em etiquetas de idioma principal e subetiquetas de região secundária para indicar dialetos. No exemplo, en significa inglês e US significa Estados Unidos. Para ver uma lista dos idiomas compatíveis, consulte o artigo Idiomas compatíveis.

Para mais informações e uma descrição dos subcampos opcionais que pode incluir no campo config, consulte o artigo RecognitionConfig.

Forneça áudio à conversão de voz em texto através do audio parâmetro 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 com uma representação binária pura. As representações JSON usam Base64. Para mais informações, consulte o artigo Conteúdo de áudio incorporado. O áudio transmitido diretamente neste campo está 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 do pedido, e esta tem de corresponder à taxa de amostragem do conteúdo de áudio associado. A conversão de voz em texto é compatível com taxas de amostragem entre 8000 Hz e 48 000 Hz. Pode especificar a taxa de amostragem de 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 gravou 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. Por exemplo, a maioria do áudio de telefonia legado usa taxas de amostragem de 8000 Hz, o que pode gerar resultados menos precisos. Se tiver de usar esse áudio, forneça-o à API Speech-to-Text na respetiva taxa de amostragem original.

Idiomas

O motor de reconhecimento da conversão de voz em texto é compatível com vários idiomas e dialetos. Especifique o idioma do áudio (e o dialeto nacional ou regional) no campo language_code da configuração do pedido com um BCP-47 identificador.

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

Seleção de modelos

Quando envia um pedido de transcrição de áudio para a conversão de voz em texto, pode tratar os ficheiros de áudio com 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 RecognitionConfig objeto do pedido, especificando o modelo que quer usar.

A conversão de voz em texto no Distributed Cloud é compatível com o seguinte modelo:

  • default: transcreva áudio que não seja um modelo de áudio específico, como áudio de formato longo.

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 o áudio incorporado fornecido como conteúdo num pedido REST, esse áudio tem de ser compatível com a serialização JSON.

Só pode enviar dados diretamente no campo content para o reconhecimento síncrono se os 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 uma utilidade base64 para codificar um binário em dados de texto ASCII, o que lhe dá as ferramentas e a compatibilidade necessárias. 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. Evite a quebra de linhas usando a sinalização -w 0:

base64 INPUT_FILE -w 0 > OUTPUT_FILE

Python

No 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 síncrona da API Speech-to-Text pode demorar algum tempo a devolver resultados. Após o tratamento, 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 transcrições possíveis 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 fornecidas com alternativas sequenciais, pode concatenar estas transcrições.
      • words: contém uma lista de informações específicas de palavras para cada palavra reconhecida.

Para mais informações, consulte o artigo RecognizeResponse.

Pedidos e respostas assíncronos

Um pedido assíncrono da API Speech-to-Text tem um formulário idêntico a 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 tratar o áudio e usa 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.

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 a 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 numa stream bidirecional. A sua aplicação pode enviar áudio na stream de pedidos e receber resultados de reconhecimento provisórios e finais em tempo real na stream de respostas. Os resultados provisórios representam o resultado de reconhecimento atual de uma secção de áudio, enquanto o resultado de reconhecimento final representa a última e melhor estimativa para essa secção de áudio.

Pedidos de reconhecimento de streaming

Ao contrário das chamadas síncronas e assíncronas, em que 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 é o mesmo que o apresentado em pedidos síncronos e assíncronos.

Respostas de reconhecimento de streaming

Os resultados do reconhecimento de voz de streaming devolvem uma série de respostas do tipo StreamingRecognizeResponse. Uma resposta deste tipo consiste nos 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 stream.
  • results: contém a lista de resultados, que podem ser resultados provisórios ou finais resultados 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 deslocamento de tempo do fim deste resultado em relação ao início do áudio.