Resolução de problemas

Saiba mais sobre os passos de resolução de problemas que podem ser úteis se tiver problemas ao usar a conversão de voz em texto.

Não é possível autenticar a conversão de voz em texto

Pode receber uma mensagem de erro a indicar que as suas credenciais predefinidas da aplicação não estão disponíveis. Em alternativa, pode perguntar-se como obter uma chave da API para usar quando chama a API Speech-to-Text.

O Speech-to-Text usa as Credenciais padrão da aplicação (ADC) para autenticação.

As credenciais para o ADC têm de estar disponíveis no contexto em que chama a API Speech-to-Text. Por exemplo, se configurar o ADC no seu terminal, mas executar o código no depurador do IDE, o contexto de execução do código pode não ter acesso às credenciais. Nesse caso, o seu pedido de conversão de voz em texto pode falhar.

Para saber como fornecer credenciais ao ADC, consulte o artigo Configure as Credenciais padrão da aplicação.

A conversão de voz em texto devolve uma resposta vazia

Existem vários motivos pelos quais o Speech-to-Text pode devolver uma resposta vazia. A origem do problema pode ser o RecognitionConfig ou o próprio áudio.

Resolva problemas RecognitionConfig

O objeto RecognitionConfig (ou StreamingRecognitionConfig) faz parte de um pedido de reconhecimento de voz em texto. 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) é o fornecimento de informações incorretas sobre os metadados de áudio. Se os campos de configuração de áudio não estiverem definidos corretamente, é muito provável que a transcrição falhe e o modelo de reconhecimento devolva resultados vazios.

A configuração de áudio contém os metadados do áudio fornecido. Pode obter os metadados do seu ficheiro de áudio através do comando ffprobe, que faz parte do FFMPEG.

O exemplo seguinte demonstra a utilização do comando para obter os metadados desta amostra de voz.

$ 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 ficheiro tem claramente 8000 Hz, um canal e codificação LINEAR16 (s16), e pode usar estas informações no seu RecognitionConfig.

Siga os passos seguintes para resolver outros possíveis motivos para uma resposta vazia:

  1. Reproduza o ficheiro e ouça o resultado. O áudio é claro e a voz é inteligível?

    Para reproduzir ficheiros, pode usar o comando SoX (Sound eXchange) play. Seguem-se alguns exemplos baseados em diferentes codificações de áudio.

    Os ficheiros FLAC incluem um cabeçalho que indica a taxa de amostragem, o tipo de codificação e o número de canais, e podem ser reproduzidos da seguinte forma:

    play audio.flac

    Os ficheiros LINEAR16 não incluem um cabeçalho. Para os reproduzir, especifique a taxa de amostragem, o tipo de codificação e o número de canais. A codificação LINEAR16 tem de ser de 16 bits, um número inteiro com sinal e little-endian.

    play --channels=1 --bits=16 --rate=16000 --encoding=signed-integer \
    --endian=little audio.raw

    Os ficheiros MULAW também não incluem um cabeçalho e usam frequentemente uma taxa de amostragem mais baixa.

    play --channels=1 --rate=8000 --encoding=u-law audio.raw
  2. Verifique se a codificação de áudio dos seus dados corresponde aos parâmetros que enviou em RecognitionConfig. Por exemplo, se o seu pedido tiver especificado "encoding":"FLAC" e "sampleRateHertz":16000, os parâmetros de dados de áudio indicados pelo comando SoX play devem corresponder a estes parâmetros, da seguinte forma:

    play audio.flac

    Deve indicar:

    Encoding: FLAC
    Channels: 1 @ 16-bit
    Sampleratehertz: 16000 Hz

    Se a ficha de SoX mostrar um valor Sampleratehertz diferente de 16000Hz, altere o valor "sampleRateHertz" em InitialRecognizeRequest para corresponder. Se o Encoding não for FLAC ou o Channels não for 1 @ 16-bit, não pode usar este ficheiro diretamente e tem de o converter numa codificação compatível (consulte o passo seguinte).

  3. Se o seu ficheiro de áudio não estiver na codificação FLAC, experimente convertê-lo para FLAC usando o SoX. Repita os passos para reproduzir o ficheiro e validar a codificação, o sampleRateHertz e os canais. Exemplos que convertem vários formatos de ficheiros de áudio para 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 ficheiro RAW em FLAC, tem de saber a codificação de áudio do ficheiro. Por exemplo, para converter estéreo, 16 bits, com sinal, little-endian a 16 000 Hz em FLAC, siga este exemplo:

    sox --channels=2 --bits=16 --rate=16000 --encoding=signed-integer \
    --endian=little audio.raw --channels=1 --bits=16 audio.flac
  4. Execute o exemplo de início rápido ou uma das aplicações de exemplo com o ficheiro de áudio de exemplo fornecido. Quando o exemplo estiver a ser executado com êxito, substitua o ficheiro de áudio de exemplo pelo seu ficheiro de áudio.

Configuração do modelo e do idioma

A seleção do modelo é muito importante para obter resultados de transcrição de alta qualidade. A conversão de voz em texto oferece vários modelos que foram otimizados para diferentes exemplos de utilização e têm de ser escolhidos para corresponderem o mais fielmente possível ao seu áudio. Por exemplo, alguns modelos (como o latest_short e o command_and_search) são modelos de formato curto, o que significa que são mais adequados para áudios e comandos curtos. É provável que estes modelos devolvam resultados assim que detetarem um período de silêncio. Por outro lado, os modelos de formato longo (como o 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 demasiado abruptamente ou não for devolvido rapidamente, veja se consegue obter uma melhor qualidade de transcrição experimentando outros modelos através da IU de voz.

Erros de limite de tempo

Estes problemas são, na sua maioria, causados por uma configuração incorreta ou uma utilização indevida do serviço Speech-to-Text.

LongRunningRecognize ou BatchRecognize

  • Problema: está a receber TimeoutError: Operation did not complete within the designated timeout.

  • Solução: pode enviar uma transcrição para o contentor do Cloud Storage ou prolongar o limite de tempo na solicitação.

Este problema ocorre quando o pedido LongRunningRecognize ou BatchRecognize não é concluído dentro do limite de tempo especificado e não é um erro que indique uma falha na transcrição de voz. Significa que os resultados da transcrição não estão prontos para serem extraídos.

StreamingRecognize

  • Problema: está a receber Timeout Error: Long duration elapsed without audio. Audio should be sent close to real time.

  • Solução: o tempo entre os fragmentos de áudio enviados tem de diminuir. Se o Speech-to-Text não receber um novo fragmento a cada poucos segundos, fecha a ligação e aciona este erro.

StreamingRecognize 409 aborted

  • Problema: está a receber o erro 409 Max duration of 5 minutes reached for stream.

  • Solução: está a atingir o limite de reconhecimento de streaming de cinco minutos de áudio. Quando se aproximar deste limite, feche a stream e abra uma nova.

Qualidade baixa da transcrição

O reconhecimento de voz automático (ASR) suporta uma grande variedade de exemplos de utilização. A maioria dos problemas de qualidade pode ser resolvida experimentando diferentes opções de API. Para melhorar a precisão do reconhecimento, siga as diretrizes em Práticas recomendadas.

As expressões curtas não são reconhecidas

  • Problema: as expressões curtas do utilizador final, como Sim, Não e Seguinte, não são captadas pela API e estão em falta na transcrição.

  • Solução: siga os passos abaixo.

    1. Teste o mesmo pedido com diferentes modelos.

    2. Adicionar adaptação de voz e melhorar as palavras em falta.

    3. Se estiver a usar a entrada de streaming, experimente definir single_utterance=true.

Palavra ou expressão não reconhecida de forma consistente

  • Problema: determinadas palavras ou expressões são consistentemente mal reconhecidas, como quando a é reconhecido como 8.

  • Solução: siga os passos abaixo.

    1. Teste o mesmo pedido com diferentes modelos.

    2. Adicionar adaptação de voz e melhorar as palavras em falta. Pode usar tokens de classe para melhorar conjuntos inteiros de palavras, como sequências de dígitos ou moradas. Verifique os tokens de classe disponíveis.

    3. Experimente aumentar max_alternatives. Em seguida, selecione SpeechRecognitionResult alternatives e escolha o primeiro que corresponda ao formato pretendido.

A formatação pode ser desafiante para o RVC. A adaptação da voz pode ajudar a obter um formato obrigatório, mas o pós-processamento pode ser necessário para se adequar ao formato obrigatório.

Entradas em vários idiomas

  • Problema: o áudio contém voz em vários idiomas, como uma conversa entre uma pessoa a falar inglês e outra a falar espanhol, o que resulta numa transcrição incorreta.

  • Solução: esta funcionalidade não é suportada. A conversão de voz em texto só pode transcrever um idioma por pedido.

Autorização recusada

  • Problema: está a receber 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 autorização a PROJECT_ID@gcp-sa-speech.iam.gserviceaccount.com para aceder ao ficheiro no contentor BUCKET-PATH.

Argumento inválido

  • Problema: está a receber 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 estão corretos. Certifique-se de que o ponto final selecionado corresponde à localização no pedido / recurso.

Recurso esgotado

  • Problema: está a receber o seguinte erro.

    RESOURCE_EXHAUSTED: Resource has been exhausted (e.g. check quota)
  • Solução: consulte o artigo Peça um ajuste da quota.

Streaming chunk too large

  • Problema: está a receber 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: tem de diminuir o tamanho dos fragmentos de áudio enviados. Recomendamos o envio de blocos de 100 ms para obter a melhor latência e evitar atingir o limite de áudio.

Registo de dados

  • Problema: o Speech-to-Text não fornece registo no Google Cloud.

  • Solução: uma vez que o Speech-to-Text tem o registo de dados desativado por predefinição, os clientes têm de o ativar ao nível do projeto.