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 tipoAudioEncoding
. Se tiver uma escolha num codec, prefira uma codificação sem perdas, comoFLAC
ouLINEAR16
, 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 ficheirosFLAC
eWAV
, 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 ficheirosFLAC
eWAV
, 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 eUS
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 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.
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 listaresults
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.