O Speech-to-Text é uma das três APIs pré-treinadas do Vertex AI no Google Distributed Cloud (GDC) isolado. 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.
Para mais informações sobre os codecs de áudio da API Speech-to-Text, 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 uma melhor reconhecimento de voz.
Funcionalidades de conversão de voz em texto
O Speech-to-Text no Distributed Cloud tem os três métodos seguintes 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 sondar 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. Normalmente, a conversão de voz em texto processa o áudio mais rapidamente do que em tempo real, processando, em média, 30 segundos de áudio em 15 segundos. Em casos de má 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 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 tipoAudioEncoding. Se tiver uma escolha num codec, prefira uma codificação sem perdas, comoFLACouLINEAR16, 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 campoencodingé opcional para ficheirosFLACeWAV, 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 camposample_rate_hertzé opcional para ficheirosFLACeWAV, 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,enrefere-se ao inglês eUSrefere-se aos Estados Unidos. Para ver uma lista dos idiomas suportados, consulte o artigo Idiomas suportados.
Para mais informações e uma descrição dos subcampos opcionais que pode incluir no campo config, consulte RecognitionConfig.
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 para o seu pedido, especificando o modelo que quer usar.
O Speech-to-Text no Distributed Cloud suporta os seguintes dois modelos:
default: transcrever áudio que não seja um modelo de áudio específico, como áudio de formato longo.chirp: transcrever áudio multilingue quando precisar de maior precisão. O Chirp realiza o reconhecimento automático de voz em muitos idiomas, mesmo que sejam idiomas com poucos recursos que não tenham muitos dados etiquetados disponíveis para preparação.
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 tipoSpeechRecognitionResult, 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 tipoSpeechRecognitionAlternative. 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.
Para mais informações, consulte RecognizeResponse.
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 tipoSpeechEventType. 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 tipoStreamingRecognitionResult. A listaresultsinclui 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.
Chirp: modelo de voz universal
O Chirp é a próxima geração de modelos de conversão de voz em texto no Google Distributed Cloud (GDC) isolado. O Chirp, que representa uma versão de um modelo de voz universal, tem mais de 2 mil milhões de parâmetros e pode transcrever muitos idiomas num único modelo.
Pode transcrever ficheiros de áudio noutros idiomas suportados ativando o componente Chirp.
O Chirp alcança a taxa de erro de palavras (WER) mais avançada em vários conjuntos de testes e idiomas públicos, oferecendo suporte multilingue na nuvem distribuída. Usa um codificador universal que forma modelos com uma arquitetura diferente dos modelos de voz atuais, usando dados em muitas outras línguas. Em seguida, o modelo é otimizado para oferecer transcrição para idiomas específicos. Um único modelo unifica os dados de vários idiomas. No entanto, os utilizadores continuam a especificar o idioma no qual o modelo tem de reconhecer a voz.
O Chirp processa a voz em blocos muito maiores do que outros modelos. Os resultados só estão disponíveis depois de uma expressão completa terminar, o que significa que o Chirp pode não ser adequado para uma utilização verdadeiramente em tempo real.
O identificador do modelo do Chirp é chirp. Por conseguinte, pode definir o valor
chirp no campo model do objeto RecognitionConfig do pedido.
Métodos da API disponíveis
O Chirp suporta os métodos da API Speech-to-Text Recognize e StreamingRecognize.
Ambos os métodos diferem porque o StreamingRecognize só devolve resultados após cada expressão. Por este motivo, este método tem uma latência na ordem dos segundos, em vez de 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 de uma expressão estar concluída, por exemplo, numa frase seguida de uma pausa.