Saiba mais sobre as etapas de solução de problemas que podem ser úteis se você tiver problemas ao usar a Speech-to-Text.
Não é possível autenticar a Speech-to-Text
É possível que você receba uma mensagem de erro indicando que o "Application Default Credentials" está indisponível ou pode ser que você esteja se perguntando como ter uma chave de API para usar na Speech-to-Text.
A Speech-to-Text usa AS Application Default Credentials (ADC) para autenticação.
As credenciais das ADC precisam estar disponíveis no contexto em que você chama a API Speech-to-Text. Por exemplo, se você configurar as ADC no terminal, mas executar o código no depurador do ambiente de desenvolvimento integrado, o contexto de execução do seu código poderá não ter acesso às credenciais. Nesse caso, sua solicitação para a Speech-to-Text pode apresentar falha.
Para saber como fornecer credenciais às ADC, consulte Configurar as Application Default Credentials.
A Speech-to-Text retorna uma resposta vazia
Há vários motivos para a Speech-to-Text retornar uma resposta
vazia. A origem do problema pode ser a RecognitionConfig
ou o próprio
áudio.
Resolver problemas RecognitionConfig
O objeto RecognitionConfig
(ou StreamingRecognitionConfig
) faz parte de uma
solicitação de reconhecimento da Speech-to-Text. Existem duas categorias principais de
campos que precisam ser definidas para executar uma transcrição corretamente:
- configuração de áudio;
- modelo e linguagem.
Uma das causas mais comuns de respostas vazias (por exemplo, receber uma
resposta JSON {}
vazia) é fornecer informações incorretas sobre os metadados
de áudio. Se os campos de configuração de áudio não estiverem definidos corretamente, a transcrição
provavelmente falhará e o modelo de reconhecimento retornará resultados vazios.
A configuração de áudio contém os metadados do áudio fornecido. É possível conseguir
os metadados do arquivo de áudio usando o comando ffprobe
, que faz parte
do FFMPEG.
No exemplo a seguir, demonstramos o uso do ffprobe para receber os metadados de https://storage.googleapis.com/cloud-samples-tests/Speech/Commercial_mono.wav.
$ ffprobe commercial_mono.wav
[...]
Input #0, wav, from 'commercial_mono.wav':
Duration: 00:00:35.75, bitrate: 128 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, 1 channels, s16, 128 kb/s
Com o comando acima, vemos que o arquivo tem:
- sample_rate_hertz: 8000
- canais: 1
- codificação LINEAR16 (s16)
Você pode usar essas informações na RecognitionConfig
.
Outros motivos relacionados a áudio para uma resposta vazia podem estar relacionados à codificação de áudio. Veja algumas outras ferramentas e coisas para tentar:
Reproduza o arquivo e ouça o áudio. Ele está claro? A fala está compreensível?
Para reproduzir arquivos, você pode usar o comando SoX (Sound eXchange)
play
. Alguns exemplos baseados em diferentes codificações de áudio são mostrados abaixo.Os arquivos FLAC incluem um cabeçalho que indica a taxa de amostra, o tipo de codificação e o número de canais. Eles podem ser reproduzidos da seguinte maneira:
play audio.flac
Os arquivos LINEAR16 não incluem cabeçalho. Para reproduzi-los, você precisa especificar a taxa de amostra, o tipo de codificação e o número de canais. A codificação LINEAR16 precisa ser 16 bits, de número inteiro assinado e little endian.
play --channels=1 --bits=16 --rate=16000 --encoding=signed-integer \ --endian=little audio.raw
Os arquivos MULAW também não incluem um cabeçalho e geralmente usam uma taxa de amostra menor.
play --channels=1 --rate=8000 --encoding=u-law audio.raw
Verifique se a codificação de áudio de seus dados corresponde aos parâmetros que você enviou em
RecognitionConfig
. Por exemplo, se sua solicitação for especificada, os parâmetros de dados de áudio"encoding":"FLAC"
e"sampleRateHertz":16000
, listados pelo comando SoXplay
devem corresponder a esses parâmetros, da seguinte maneira:play audio.flac
precisa listar:
Encoding: FLAC Channels: 1 @ 16-bit Sampleratehertz: 16000Hz
Se a lista do SoX mostrar um
Sampleratehertz
diferente de16000Hz
, altere o"sampleRateHertz"
emInitialRecognizeRequest
para corresponder. Se oEncoding
não forFLAC
ou oChannels
não for1 @ 16-bit
, você não poderá usar esse arquivo diretamente e será necessário convertê-lo em uma codificação compatível (consulte a próxima etapa).Se o arquivo de áudio não estiver em codificação FLAC, tente convertê-lo para esse formato usando o SoX. Então, repita as etapas acima para reproduzir o arquivo e verificar a codificação, o sampleRateHertz e os canais. Estes são alguns exemplos de conversão de vários formatos de arquivos de áudio para a codificação FLAC.
sox audio.wav --channels=1 --bits=16 audio.flac sox audio.ogg --channels=1 --bits=16 audio.flac sox audio.au --channels=1 --bits=16 audio.flac sox audio.aiff --channels=1 --bits=16 audio.flac
Para converter um arquivo RAW para FLAC, é preciso conhecer a codificação de áudio do arquivo. Por exemplo, para converter um arquivo estéreo de 16 bits little endian em 16.000 Hz para FLAC:
sox --channels=2 --bits=16 --rate=16000 --encoding=signed-integer \ --endian=little audio.raw --channels=1 --bits=16 audio.flac
Execute o exemplo do Guia de início rápido ou um dos Aplicativos de amostra com o arquivo de áudio de amostra fornecido. Quando o exemplo estiver sendo executado corretamente, substitua o arquivo de amostra de áudio pelo seu arquivo de áudio.
Configuração de modelo e linguagem
A seleção de modelos é muito importante para conseguir resultados de transcrição
de alta qualidade. A Speech-to-Text
fornece vários modelos que foram ajustados para diferentes casos de uso e precisam ser
escolhidos para corresponder ao áudio.
Por exemplo, alguns modelos, como latest_short
e command_and_search
,
são modelos curtos, o que significa que são mais adequados para áudios e prompts curtos.
Esses modelos provavelmente retornarão resultados assim que detectarem um período de
silêncio. Modelos longos, por outro lado, como
latest_short, phone_call, video and default
, são mais
adequados para áudios mais longos e não são tão sensíveis à interpretação do silêncio como o
fim do áudio.
Se o reconhecimento terminar muito abruptamente ou não retornar rapidamente, convém verificar e testar outros modelos para ver se você consegue uma melhor qualidade de transcrição. É possível testar vários modelos usando a IU de fala.
Erros de tempo limite
Na maioria das vezes, esses problemas são causados por configuração incorreta ou uso indevido da Speech-to-Text.
LongRunningRecognize
ou BatchRecognize
Problema:você recebe
TimeoutError: Operation did not complete within the designated timeout
.Solução:é possível enviar uma transcrição para o bucket do Cloud Storage ou estender o tempo limite na solicitação.
Esse problema ocorre quando a solicitação LongRunningRecognize
ou BatchRecognize
não é concluída no tempo limite especificado e não é um erro
que indica falha na transcrição de voz. Isso significa que os
resultados da transcrição não estão prontos para extração.
StreamingRecognize
Problema:você recebe
Timeout Error: Long duration elapsed without audio. Audio should be sent close to real time
.Solução:o tempo entre os pedaços de áudio enviados precisa ser reduzido. Se o recurso "Texto por fala" não receber um novo bloco a cada poucos segundos, ele fecha a conexão e gera esse erro.
StreamingRecognize
409 abortado
Problema:você recebe o erro
409 Max duration of 5 minutes reached for stream
.Solução:você está atingindo o limite de reconhecimento de streaming de cinco minutos de áudio. Quando você estiver chegando a esse limite, feche o stream e abra um novo.
Qualidade da transcrição baixa
O reconhecimento automático de fala (ASR) oferece suporte a uma ampla variedade de casos de uso. A maioria dos problemas de qualidade pode ser resolvida testando diferentes opções de API. Para melhorar a precisão do reconhecimento, siga as diretrizes em Práticas recomendadas.
Frases curtas não são reconhecidas
Problema: as falas curtas do usuário final, como Sim, Não e Próxima, não são capturadas pela API e estão ausentes na transcrição.
Solução: siga estas etapas.
Teste a mesma solicitação com diferentes modelos.
Adicione a adaptação de fala e otimize palavras ausentes.
Se você estiver usando entrada de streaming, tente definir
single_utterance=true
.
Palavra ou frase não reconhecida
Problema: algumas palavras ou frases são reconhecidas incorretamente, como a sendo reconhecida como 8.
Solução: siga estas etapas.
Teste a mesma solicitação com diferentes modelos.
Adicione a adaptação de fala e otimize palavras ausentes. É possível usar tokens de classe para aumentar conjuntos inteiros de palavras, como sequências de dígitos ou endereços. Confira os tokens de classe disponíveis.
Aumente o valor de
max_alternatives
. Em seguida, verifique SpeechRecognitionResultalternatives
e escolha o primeiro que corresponde ao formato desejado.
A formatação pode ser um desafio para a ASR. A adaptação de fala pode ajudar a conseguir um formato necessário, mas o pós-processamento pode ser necessário para se ajustar ao formato necessário.
Entradas de vários idiomas ou misturadas
Problema: o áudio contém falas em vários idiomas, como uma conversa entre um falante de inglês e um falante de espanhol, resultando na transcrição errada.
Solução: esse recurso não está disponível. A Conversão de voz em texto pode transcrever apenas um idioma por solicitação.
Permissão negada
Problema:você recebe o seguinte erro.
Permission denied to access GCS object BUCKET-PATH. Source error: PROJECT-ID@gcp-sa-speech.iam.gserviceaccount.com does not have storage.buckets.get access to the Google Cloud Storage bucket. Permission 'storage.buckets.get' denied on resource (or it may not exist).
Solução:conceda permissão para PROJECT_ID@gcp-sa-speech.iam.gserviceaccount.com acessar o arquivo no bucket BUCKET-PATH.
Argumento inválido
Problema:você recebe o seguinte erro.
{ "error": { "code": 400, "message": "Request contains an invalid argument.", "status": "INVALID_ARGUMENT" } }
Solução:verifique os argumentos e compare-os com a documentação da API. Em seguida, valide se eles estão corretos. Verifique se o endpoint selecionado corresponde ao local na solicitação / recurso.
Recurso esgotado
Problema:você recebe o seguinte erro.
RESOURCE_EXHAUSTED: Resource has been exhausted (e.g. check quota)
Solução:confira como solicitar um aumento de cota.
Bloco de streaming muito grande
Problema:você recebe o seguinte erro.
INVALID_ARGUMENT: Request audio can be a maximum of 10485760 bytes. [type.googleapis.com/util.MessageSetPayload='[google.rpc.error_details_ext] { message: "Request audio can be a maximum of 10485760 bytes." }']
Solução:é necessário diminuir o tamanho dos fragmentos de áudio enviados. Recomendamos enviar blocos de 100 ms para ter a melhor latência e evitar o limite de áudio.
Geração de registros de dados
Problema:o recurso "Transcrição de voz" não oferece nenhum registro do Cloud.
Solução:como o Speech-to-Text tem a geração de registros de dados desativada por padrão, os clientes precisam ativá-la no nível do projeto.