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
Talvez você receba uma mensagem de erro indicando que as credenciais padrão do aplicativo não estão disponíveis. Ou talvez você esteja se perguntando como ter uma chave de API para usar ao chamar a 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. Para fazer uma transcrição corretamente, defina os campos que se enquadram nas seguintes categorias principais:
- Configuração de áudio
- Modelo e idioma
Uma causa comum de respostas vazias (como 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 vai falhar, e o modelo de reconhecimento vai 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.
O exemplo a seguir demonstra o uso do comando para receber os metadados desta amostra de fala.
$ 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
O arquivo tem claramente 8.000 Hz, um canal e codificação LINEAR16 (s16). Você pode usar essas informações no seu RecognitionConfig
.
Solução de problemas relacionados à codificação
Siga estas etapas para resolver outros possíveis motivos de uma resposta vazia:
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
. Confira alguns exemplos baseados em diferentes codificações de áudio.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, especifique 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: 16000 Hz
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. Repita as etapas para reproduzir o arquivo e verificar a codificação, o sampleRateHertz e os canais. 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, siga este exemplo:
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, teste outros modelos usando a IU de fala para melhorar a qualidade da transcrição.
Erros de tempo limite
Esses problemas são causados, na maior parte, por configuração incorreta ou uso indevido do Speech-to-Text.
LongRunningRecognize
ou BatchRecognize
Problema:você está recebendo
TimeoutError: Operation did not complete within the designated timeout
.Solução:envie uma transcrição para o bucket do Cloud Storage ou aumente 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 serem extraídos.
StreamingRecognize
Problema:você está recebendo
Timeout Error: Long duration elapsed without audio. Audio should be sent close to real time
.Solução:o tempo entre os trechos de áudio enviados precisa diminuir. Se o Speech-to-Text não receber um novo bloco a cada poucos segundos, ele vai fechar a conexão e acionar esse erro.
StreamingRecognize
409 cancelada
Problema:você está recebendo 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 perto desse limite, feche o stream e abra um novo.
Qualidade da transcrição baixa
O reconhecimento automático de fala (ASR) oferece suporte a uma grande 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: respostas curtas do usuário final, como Sim, Não e Próximo, não são capturadas pela API e não aparecem 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 de forma consistente
Problema: algumas palavras ou frases são reconhecidas incorretamente de forma consistente, como a é reconhecido 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.
Tente aumentar
max_alternatives
. Em seguida, marque SpeechRecognitionResultalternatives
e escolha o primeiro que corresponder ao formato desejado.
A formatação pode ser um desafio para a ASR. A adaptação de voz geralmente ajuda a conseguir um formato necessário, mas o pós-processamento pode ser necessário para ajustar o formato exigido.
Entradas em vários idiomas ou misturadas
Problema: o áudio contém fala em vários idiomas, como uma conversa entre um falante de inglês e um de espanhol, resultando em uma transcrição incorreta.
Solução: esse recurso não é compatível. O Speech-to-Text só pode transcrever um idioma por solicitação.
Permissão negada
Problema:você está recebendo 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ê está recebendo 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. Depois, valide se eles estão corretos. Verifique se o endpoint selecionado corresponde ao local na solicitação / recurso.
Recurso esgotado
Problema:você está recebendo o seguinte erro.
RESOURCE_EXHAUSTED: Resource has been exhausted (e.g. check quota)
Solução:consulte Solicitar um ajuste de cota.
O bloco de streaming é muito grande
Problema:você está recebendo 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:diminua o tamanho dos trechos de áudio enviados. Recomendamos enviar partes de 100 ms para ter a melhor latência e evitar atingir o limite de áudio.
Geração de registros de dados
Problema:a Speech-to-Text não oferece o Cloud Logging.
Solução:como o Speech-to-Text tem o registro de dados desativado por padrão, os clientes precisam ativá-lo no nível do projeto.