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 tipoAudioEncoding
. Se você tiver uma opção de codec, prefira uma codificação sem perdas, comoFLAC
ouLINEAR16
, 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 campoencoding
é opcional para arquivosFLAC
eWAV
, 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 camposample_rate_hertz
é opcional para arquivosFLAC
eWAV
, 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 eUS
é 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 tipoSpeechRecognitionResult
, 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 tipoSpeechRecognitionAlternative
. 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 tipoSpeechEventType
. 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 tipoStreamingRecognitionResult
. A listaresults
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.