Otimize ficheiros de áudio para a conversão de voz em texto


Este tutorial mostra como executar uma verificação prévia em ficheiros de áudio que está a preparar para utilização com o Speech-to-Text. Fornece informações gerais sobre os formatos de ficheiros de áudio, descreve como otimizar os ficheiros de áudio para utilização com a conversão de voz em texto e como diagnosticar erros. Este tutorial foi concebido para profissionais de meios de comunicação e entretenimento não técnicos e profissionais de pós-produção. Não requer conhecimentos detalhados deGoogle Cloud; requer apenas conhecimentos básicos de como usar a ferramenta de linha de comandos gcloud com ficheiros armazenados localmente e num contentor do Cloud Storage.

Objetivos

  • Instale a ferramenta FFMPEG.
  • Transfira os ficheiros multimédia de exemplo.
  • Reproduza ficheiros de áudio e vídeo com o FFMPEG.
  • Extraia, transcodifique e converta propriedades de ficheiros de áudio com o FFMPEG.
  • Executar a API Speech-to-Text numa variedade de ficheiros de exemplo que contenham diálogos.

Custos

Este tutorial usa os seguintes componentes faturáveis do Google Cloud:

Pode usar a calculadora de preços para gerar uma estimativa de custo com base na sua utilização prevista.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.

  5. Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.

  6. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Verify that billing is enabled for your Google Cloud project.

  9. Install the Google Cloud CLI.

  10. Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.

  11. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  12. Neste tutorial, usa o Cloud Shell para realizar os procedimentos, como copiar dados de um contentor do Cloud Storage para a sessão do Cloud Shell. O Cloud Shell é um ambiente de shell com a CLI do Google Cloud já instalada. Vai usar a CLI gcloud para muitos passos neste tutorial. Também instala software e ficheiros de áudio de exemplo na sua máquina local e executa estes mesmos exercícios a partir do terminal, conforme descrito na secção Executar exemplos de tutoriais num terminal local mais adiante.

    Vista geral

    Neste tutorial, vai usar o FFMPEG, uma ferramenta de código aberto para gravar, converter e fazer streaming de áudio e vídeo. O tutorial fornece mais informações sobre esta ferramenta mais tarde.

    Compreenda os atributos dos ficheiros de som

    Esta secção descreve os tipos de ficheiros de áudio típicos, as taxas de amostragem, as profundidades de bits e os meios de gravação encontrados nos fluxos de trabalho de produção e pós-produção de multimédia.

    Para obter os melhores resultados com a conversão de voz em texto, tem de se certificar de que os ficheiros usados para a transcrição são ficheiros monaurais (mono) que cumprem determinadas especificações mínimas, conforme descrito mais tarde. Se os ficheiros não cumprirem as especificações, pode ter de gerar ficheiros modificados. Por exemplo, pode ter de fazer o seguinte:

    • Extrair os dados de áudio de um ficheiro de vídeo.
    • Extrair uma única faixa monaural de um ficheiro de áudio com várias faixas.
    • Transcodificar de um codec de áudio para outro codec mais adequado para a conversão de voz em texto.

    Taxa de amostragem (intervalo de frequência)

    A taxa de amostragem determina o intervalo de frequências do ficheiro de áudio. Baseia-se no número de amostras por segundo que constituem o ficheiro de áudio. Normalmente, a frequência mais alta reproduzível de um ficheiro de áudio digital é equivalente a metade da taxa de amostragem. Por exemplo, a frequência mais alta que pode ser reproduzida a partir de um ficheiro de áudio de 44,1 kHz é de aproximadamente 22 kHz, que se encontra no limite superior ou além do intervalo de resposta de frequência da audição de um ouvinte típico.

    As taxas de amostragem em telefonia e telecomunicações tendem a estar no intervalo de 8 kHz a 16 kHz. Este tutorial centra-se em formatos específicos da indústria de multimédia e entretenimento, que são normalmente superiores a 16 kHz. Para mais informações sobre telefonia e outras aplicações de som, consulte o artigo Transcrever áudio do telemóvel com modelos melhorados.

    Recomendamos uma taxa de amostragem de, pelo menos, 16 kHz nos ficheiros de áudio que usa para a transcrição com a API Speech-to-Text. As taxas de amostragem encontradas em ficheiros de áudio são normalmente 16 kHz, 32 kHz, 44, 1 kHz e 48 kHz. Uma vez que a inteligibilidade é muito afetada pelo intervalo de frequências, especialmente nas frequências mais elevadas, uma taxa de amostragem inferior a 16 kHz resulta num ficheiro de áudio com pouca ou nenhuma informação acima de 8 kHz. Isto pode impedir que a conversão de voz em texto transcreva corretamente o áudio falado. A inteligibilidade da voz requer informações em toda a gama de 2 kHz a 4 kHz, embora as harmónicas (múltiplos) dessas frequências na gama mais alta também sejam importantes para preservar a inteligibilidade da voz. Por conseguinte, manter a taxa de amostragem num mínimo de 16 kHz é uma boa prática.

    É possível converter de uma taxa de amostragem para outra. No entanto, não existe qualquer vantagem em aumentar a taxa de amostragem do áudio, uma vez que as informações do intervalo de frequências são limitadas pela taxa de amostragem mais baixa e não podem ser recuperadas através da conversão para uma taxa de amostragem mais alta. Isto significa que a sobreamostragem de 8 kHz para 44,1 kHz limitaria o intervalo de frequências reproduzível a metade da taxa de amostragem inferior, ou aproximadamente 4 kHz. Neste tutorial, ouve ficheiros de áudio gravados a várias taxas de amostragem e profundidades de bits para poder ouvir a diferença.

    Profundidade de bits (intervalo dinâmico)

    A profundidade de bits do ficheiro de áudio determina o intervalo entre os sons mais baixos e os sons mais altos, bem como a relação sinal/ruído do ficheiro. A gama dinâmica tem menos efeito na qualidade da transcrição do que a resposta de frequência, mas as profundidades de bits iguais ou inferiores a 8 bits podem causar ruído de quantização excessivo na faixa de áudio, o que dificulta a transcrição precisa. (Os erros de quantização são erros de arredondamento entre o sinal de entrada analógico e o mapeamento do valor de saída digital desse sinal. Os erros causam distorção audível que afeta diretamente a fidelidade do som.) A profundidade de bits recomendada dos ficheiros para análise com a API Speech-to-Text é de 16 bits ou superior. Tal como acontece com a frequência de amostragem, não existe vantagem em converter a profundidade de bits de 8 para 16 bits, porque as informações do intervalo dinâmico estão limitadas ao formato original de 8 bits.

    Meio de gravação

    O meio de gravação original também pode afetar a qualidade do ficheiro de áudio. Por exemplo, o conteúdo de áudio gravado originalmente numa fita magnética pode ter um chiado de fundo incorporado no ficheiro. Em alguns casos, pode ter de pré-processar áudio com ruído para obter melhores resultados no processo de transcrição quando usa a API Speech-to-Text. O tratamento de gravações ruidosas e a interferência de ruído de fundo estão fora do âmbito deste tutorial. Para mais informações, consulte as práticas recomendadas na documentação do Speech-to-Text.

    Introdução ao FFMPEG

    Neste tutorial, vai usar o FFMPEG para trabalhar com ficheiros de áudio. O conjunto de ferramentas FFMPEG oferece uma grande variedade de funções, incluindo as seguintes:

    • Ouvir um ficheiro de áudio ou ver um ficheiro de vídeo.
    • Converter ficheiros de áudio num dos codecs reconhecidos pelo serviço Speech-to-Text.
    • Converter as taxas de amostragem e as taxas de bits dos ficheiros de áudio em configurações ideais para análise pela conversão de voz em texto.
    • Extrair faixas de áudio ou streams individuais de um ficheiro de stream de transporte ou de um ficheiro de vídeo.
    • Dividir ficheiros estéreo em dois ficheiros mono.
    • Dividir ficheiros de áudio 5.1 em seis ficheiros monaurais.
    • Aplicar equalização e filtragem para melhorar a clareza do áudio.

    Também pode usar a função ffprobe do FFMPEG para revelar metadados associados a um ficheiro multimédia. Isto é importante quando quer diagnosticar problemas relacionados com os tipos e os formatos de ficheiros para análise de aprendizagem automática.

    Codecs reconhecidos pela Conversão de voz em texto

    Embora a API Speech-to-Text reconheça vários formatos de ficheiros de áudio, pode não ler nem analisar corretamente determinados codecs. O tutorial mostra-lhe como pode verificar se o seu conteúdo está num dos formatos de ficheiros suportados.

    No tutorial, lê as informações dos metadados para revelar e corrigir potenciais problemas antes de usar a funcionalidade de conversão de voz em texto. As mesmas ferramentas permitem-lhe converter o ficheiro num formato compatível se descobrir uma incompatibilidade.

    A API Speech-to-Text reconhece os seguintes codecs:

    • FLAC: Free Lossless Audio Codec
    • LINEAR16: um formato de modulação de código de impulsos (PCM) não comprimido usado em contentores WAV, AIFF, AU e RAW
    • MULAW: um codec PCM concebido para telecomunicações nos EUA e no Japão
    • AMR: um codec de taxa múltipla adaptável concebido para a voz
    • AMR_WB: uma variação de banda larga do AMR com o dobro da largura de banda do AMR
    • OGG_OPUS: um codec com perdas concebido para aplicações de baixa latência
    • SPEEX_WITH_HEADER_BYTE: um códex concebido para aplicações de voz sobre IP (VOIP)

    É importante compreender que os codecs e os formatos de ficheiros não são a mesma coisa. A extensão do nome do ficheiro não indica necessariamente que o codec usado na criação do ficheiro pode ser lido pelo Speech-to-Text.

    Este tutorial centra-se nos codecs FLAC e LINEAR16, porque são frequentemente encontrados em ambientes de fluxo de trabalho de multimédia. Ambos são formatos sem perdas.

    Se usar ficheiros WAV (que estão no formato PCM linear não comprimido) com a API Speech-to-Text, os ficheiros têm de ter uma profundidade máxima de 16 bits e ser codificados num formato não de vírgula flutuante. A extensão do nome de ficheiro .wav não garante que o ficheiro possa ser lido pelo Speech-to-Text. A secção Otimize os ficheiros de áudio para análise deste tutorial fornece um exemplo de como converter o ficheiro de ponto flutuante para profundidade de bits inteira (com sinal) para transcrever o ficheiro no Speech-to-Text.

    Inicialize o seu ambiente

    Antes de realizar as tarefas deste tutorial, tem de inicializar o seu ambiente instalando o FFMPEG, definindo algumas variáveis de ambiente e transferindo ficheiros de áudio. Usa ficheiros multimédia armazenados numa instância do Cloud Shell e num contentor do Cloud Storage. A utilização de diferentes origens permite-lhe trabalhar com diferentes capacidades da API Speech-to-Text.

    Nesta secção, instala o FFMPEG e configura variáveis de ambiente que apontam para as localizações de armazenamento de dados de amostra no armazenamento da instância do Cloud Shell e num contentor do Cloud Storage. Os ficheiros multimédia são os mesmos em ambas as localizações, e alguns dos exemplos neste tutorial acedem a ficheiros a partir do Cloud Shell e do contentor do Cloud Storage. Pode instalar o FFMPEG na sua máquina local e executar estes mesmos exercícios, conforme descrito mais adiante na secção Executar exemplos de tutoriais num terminal local.

    1. In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

      At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    2. No Cloud Shell, instale a versão atual do FFMPEG:

      sudo apt update
      sudo apt install ffmpeg
      
    3. Verifique se o FFMPEG está instalado:

      ffmpeg -version
      

      Se for apresentado um número de versão, a instalação foi bem-sucedida.

    4. Crie um diretório para os ficheiros do projeto:

      mkdir project_files
      
    5. Crie um diretório para os ficheiros de saída que vai criar num passo posterior:

      mkdir output
      
    6. Transfira os ficheiros de áudio de exemplo:

      gcloud storage cp gs://cloud-samples-data/speech/project_files/*.* ~/project_files/
      
    7. Crie uma variável de ambiente para o nome do contentor do Cloud Storage:

      export GCS_BUCKET_PATH=gs://cloud-samples-data/speech/project_files
      
    8. Crie uma variável de ambiente para o caminho do diretório da instância do Cloud Shell que aponta para os ficheiros de áudio de exemplo transferidos:

      export PROJECT_FILES=~/project_files
      
    9. Examine os metadados em ficheiros multimédia

      Quando analisa ficheiros de áudio ou vídeo com a API Speech-to-Text, tem de conhecer os detalhes dos metadados do ficheiro. Isto ajuda a identificar inconsistências ou parâmetros incompatíveis que possam causar problemas.

      Nesta secção, usa o comando ffprobe no FFMPEG para examinar os metadados de vários ficheiros multimédia e compreender as especificações de um ficheiro.

      1. No Cloud Shell, revele os metadados do ficheiro HumptyDumptySample4416.flac:

        ffprobe $PROJECT_FILES/HumptyDumptySample4416.flac
        

        O resultado é o seguinte:

        Input #0, flac, from 'project_files/HumptyDumptySample4416.flac':
          Duration: 00:00:26.28, start: 0.000000, bitrate: 283 kb/s
            Stream #0:0: Audio: flac, 44100 Hz, mono, s16
        

        Esta saída indica os seguintes metadados sobre o ficheiro:

        • A duração do ficheiro de áudio é de 26,28 segundos.
        • A taxa de bits é de 283 KB por segundo.
        • O formato do codec é FLAC.
        • A taxa de amostragem é de 44,1 kHz.
        • O ficheiro é um ficheiro mono de um único canal.
        • A profundidade de bits é de 16 bits (número inteiro com sinal).
      2. Revele os metadados do ficheiro HumptyDumptySampleStereo.flac:

        ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
        

        O resultado é o seguinte:

        Input #0, flac, from 'project_files/HumptyDumptySampleStereo.flac':
          Duration: 00:00:26.28, start: 0.000000, bitrate: 378 kb/s
            Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
        

        As diferenças entre este ficheiro e o anterior são que este é um ficheiro estéreo com uma taxa de bits mais elevada (378 KB/segundo em vez de 283 KB/segundo) porque contém reprodução de dois canais em vez de uma faixa mono. Todos os outros valores são iguais.

        Deve verificar o número de canais num ficheiro de áudio que quer processar com a API Speech-to-Text. Os ficheiros de áudio devem ter apenas um canal de áudio. Para transcrever vários canais de áudio no mesmo ficheiro, recomendamos que crie um script dos comandos, conforme descrito na secção Otimize ficheiros de áudio para análise mais adiante.

      3. Revele os metadados de um ficheiro de mistura de áudio 5.1:

        ffprobe $PROJECT_FILES/Alice_51_sample_mix.aif
        

        O resultado é o seguinte:

        Duration: 00:00:58.27, bitrate: 4610 kb/s
            Stream #0:0: Audio: pcm_s16be, 48000 Hz, 5.1, s16, 4608 kb/s
        

        Uma vez que este ficheiro está num formato diferente do ficheiro mono ou estéreo, são apresentadas informações adicionais. Neste caso, o áudio está num formato PCM linear, gravado a uma taxa de amostragem de 44,1 kHz e uma taxa de bits de 16 bits (inteiro com sinal, little-endian).

        Repare na designação 5.1. A taxa de dados de 4608 Kbits por segundo neste ficheiro é significativamente superior à taxa de qualquer um dos exemplos anteriores, porque o ficheiro de áudio contém 6 faixas de áudio.

        Mais adiante neste tutorial, vai ver como este ficheiro causa erros quando tenta transcrevê-lo com a API Speech-to-Text. Mais importante, vai ver como otimizar o ficheiro para o usar com a funcionalidade de conversão de voz em texto sem erros.

      Otimize os ficheiros de áudio para análise

      Conforme mencionado anteriormente, quando usa a conversão de voz em texto, os ficheiros de áudio têm de ser ficheiros mono de canal único para evitar erros no processo de transcrição. A tabela seguinte mostra os formatos de áudio comuns e o processo de conversão para converter ficheiros mono para processamento.

      Formato de áudio atual Processo de conversão Formato de áudio de saída
      Mono Não é necessária extração FLAC ou LINEAR16
      Estéreo Divida em 2 ficheiros mono ou reduza para um ficheiro mono FLAC ou LINEAR16
      Várias faixas (5.1) Dividir em 6 ficheiros mono FLAC ou LINEAR16
      Áudio/vídeo em vários streams Divida em ficheiros mono separados FLAC ou LINEAR16

      Para processar ficheiros com várias faixas de áudio, extraia faixas mono do ficheiro estéreo com o FFMPEG ou outras ferramentas de edição de áudio. Em alternativa, pode automatizar o processo conforme descrito na secção Transcrever áudio com vários canais da documentação do Speech-to-Text. Neste tutorial, vai explorar a opção de usar o FFMPEG para extrair faixas mono individuais do ficheiro estéreo.

      Conforme mostrado na secção anterior, pode usar o comando ffprobe para determinar quantos canais de áudio um ficheiro contém e, em seguida, usar o comando ffmpeg para extrair ou converter o ficheiro para um formato mono, se necessário.

      Pré-visualize um erro com base num formato inválido

      Para ver como um formato incorreto afeta a transcrição, pode experimentar executar o Speech-to-Text num ficheiro que não esteja no formato mono.

      1. No Cloud Shell, execute o Speech-to-Text no ficheiro HumptyDumptySampleStereo.flac:

        gcloud ml speech recognize $PROJECT_FILES/HumptyDumptySampleStereo.flac \
            --language-code='en-US'
        

        O resultado é o seguinte:

        ERROR: (gcloud.ml.speech.recognize) INVALID_ARGUMENT: Invalid audio channel count
        

        Embora o formato do codec, a taxa de amostragem e a profundidade de bits do ficheiro estejam corretos, o descritor estéreo significa que existem duas faixas no ficheiro de áudio. Por conseguinte, a execução da conversão de voz em texto causa um erro Invalid audio channel count.

      2. Execute o comando ffprobe no ficheiro:

        ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
        

        O resultado é o seguinte:

        Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
        

        Isto revela que o erro de conversão de voz em texto é causado pela tentativa de processar um ficheiro estéreo

      Para informações sobre como gerir ficheiros estéreo através de scripts, consulte o artigo Transcrever áudio com vários canais na documentação do Speech-to-Text.

      Divida um ficheiro estéreo em vários ficheiros mono FLAC

      Um exemplo de como evitar o erro de várias faixas é extrair duas faixas mono de um ficheiro de áudio estéreo. As faixas resultantes estão no formato FLAC e são escritas no diretório de saída. Quando extrai dois ficheiros mono de um ficheiro estéreo, é recomendável criar nomes para os ficheiros extraídos que indiquem a localização do canal do ficheiro original. Por exemplo, no procedimento seguinte, designa o canal esquerdo com o sufixo FL e designa o canal direito com o sufixo FR.

      Se a amostra de áudio a transcrever estiver em ambos os canais, apenas um canal é usado para a transcrição. No entanto, se diferentes oradores forem gravados em canais diferentes, recomendamos que transcreva os canais separadamente. A conversão de voz em texto pode reconhecer várias vozes numa única gravação. No entanto, isolar cada voz em canais separados resulta em níveis de confiança mais elevados na transcrição. (O valor de confiança também é conhecido como taxa de erro de palavras, ou TER, no reconhecimento de voz.) Para mais informações sobre como trabalhar com várias vozes na mesma gravação, consulte o artigo Separar diferentes oradores numa gravação de áudio na documentação do Speech-to-Text.

      • No Cloud Shell, divida o ficheiro HumptyDumptySampleStereo.flac estéreo em 2 ficheiros mono:

        ffmpeg -i $PROJECT_FILES/HumptyDumptySampleStereo.flac -filter_complex "[0:a]channelsplit=channel_layout=stereo[left][right]" -map "[left]" output/HumptyDumptySample_FL.flac -map "[right]" output/HumptyDumptySample_FR.flac
        

        O resultado é o seguinte, que mostra os ficheiros mono HumptyDumptySample_FL.flac (canal frontal esquerdo) e HumptyDumptySample_FR.flac (canal frontal direito).

        Output #0, flac, to 'HumptyDumptySample_FL.flac':
          Input #0, flac, from 'project_files/HumptyDumptySampleStereo.flac':
          Duration: 00:00:26.28, start: 0.000000, bitrate: 378 kb/s
            Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
        Stream mapping:
          Stream #0:0 (flac) -> channelsplit
          channelsplit:FL -> Stream #0:0 (flac)
          channelsplit:FR -> Stream #1:0 (flac)
        (...)
        Output #0, flac, to 'HumptyDumptySample_FL.flac':
        (...)
        Stream #0:0: Audio: flac, 44100 Hz, 1 channels (FL), s16, 128 kb/s
        (...)
        Output #1, flac, to 'HumptyDumptySample_FR.flac':
        (...)
        Stream #1:0: Audio: flac, 44100 Hz, 1 channels (FR), s16, 128 kb/s
        (...)
        size=918kB time=00:00:26.27 bitrate= 286.2kbits/s speed= 357x
        video:0kB audio:1820kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
        

        Este ficheiro está agora otimizado para a funcionalidade de conversão de voz em texto.

      Divida um ficheiro de áudio 5.1 em vários ficheiros mono

      Outro exemplo de como otimizar ficheiros de áudio é dividi-los em ficheiros mono FLAC individuais. Quando se refere a canais numa mistura multicanal, como uma mistura 5.1, as designações dos nomes de ficheiros são normalmente diferentes das dos ficheiros estéreo ou mono. Normalmente, o ficheiro do canal esquerdo é designado como FL para a frente esquerda e o canal direito é designado como FR para a frente direita. Os canais restantes de uma mistura 5.1 são referidos aqui como FC para o centro frontal, LFE para efeitos de baixa frequência, BL para a parte traseira esquerda (também conhecido como surround esquerdo) e BR para a parte traseira direita (também conhecido como surround direito). Estas não são designações padrão, mas são uma prática convencional para identificar a origem de um ficheiro de som.

      Normalmente, nos ficheiros de áudio multicanal para cinema e televisão, o diálogo principal é transmitido pelo canal central frontal. Normalmente, este é o ficheiro a escolher quando usa a conversão de voz em texto, porque contém a maior parte do diálogo na mistura.

      Num ambiente de pós-produção, os elementos principais do diálogo, da música e dos efeitos são divididos em grupos denominados stems, para que todo o diálogo de uma mistura seja mantido separado da música e dos efeitos até à conclusão da mistura final. Uma vez que o segmento de diálogo consiste apenas em diálogo, a conversão de voz em texto dá melhores resultados quando transcreve os segmentos em vez de tentar extrair o canal central de uma mistura final. Isto acontece porque um canal central extraído pode ser misturado com sons que não são diálogos, o que prejudica a inteligibilidade.

      1. No Cloud Shell, divida o ficheiro Alice_51_sample_mix.aif em ficheiros FLAC, especificando os nomes dos ficheiros de saída para cada canal:

        ffmpeg -i $PROJECT_FILES/Alice_51_sample_mix.aif -filter_complex "channelsplit=channel_layout=5.1[FL][FR][FC][LFE][BL][BR]" -map "[FL]" output/Alice_FL.flac -map "[FR]" output/Alice_FR.flac -map "[FC]" output/Alice_FC.flac -map "[LFE]" output/Alice_LFE.flac -map "[BL]" output/Alice_BL.flac -map "[BR]" output/Alice_BR.flac
        

        O resultado é o seguinte:

        Duration: 00:00:55.00, bitrate: 4235 kb/s
          Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 5.1, s16, 4233 kb/s
        Stream mapping:
          Stream #0:0 (pcm_s16le) -> channelsplit
          channelsplit:FL -> Stream #0:0 (flac)
          channelsplit:FR -> Stream #1:0 (flac)
          channelsplit:FC -> Stream #2:0 (flac)
          channelsplit:LFE -> Stream #3:0 (flac)
          channelsplit:BL -> Stream #4:0 (flac)
          channelsplit:BR -> Stream #5:0 (flac)
        Press [q] to stop, [?] for help
        Output #0, flac, to 'Alice_FL.flac':
        (...)
            Stream #0:0: Audio: flac, 44100 Hz, 1 channels (FL), s16, 128 kb/s
        (...)
        Output #1, flac, to 'output/Alice_FR.flac':
        (...)
            Stream #1:0: Audio: flac, 44100 Hz, 1 channels (FR), s16, 128 kb/s
        (...)
        Output #2, flac, to 'output/Alice_FC.flac':
        (...)
            Stream #2:0: Audio: flac, 44100 Hz, mono, s16, 128 kb/s
        (...)
        Output #3, flac, to 'output/Alice_LFE.flac':
        (...)
            Stream #3:0: Audio: flac, 44100 Hz, 1 channels (LFE), s16, 128 kb/s
        (...)
        Output #4, flac, to 'output/Alice_BL.flac':
        (...)
            Stream #4:0: Audio: flac, 44100 Hz, 1 channels (BL), s16, 128 kb/s
        (...)
        Output #5, flac, to 'output/Alice_BR.flac':
        (...)
            Stream #5:0: Audio: flac, 44100 Hz, 1 channels (BR), s16, 128 kb/s
        (...)
        
      2. Clique no seguinte ficheiro para o ouvir. Este ficheiro encontra-se no contentor do Cloud Storage e, quando clica no nome, o ficheiro é reproduzido num novo separador do navegador.

        Alice_mono_downmix.flac
        
      3. Ouça o ficheiro FC (canal apenas central) que acabou de criar. (O diálogo começa após alguns segundos de silêncio.)

        Alice_FC.flac
        

        Repare na diferença de nitidez em relação ao ficheiro anterior. Esta faixa baseia-se apenas na parte de diálogo da mistura.

      Teste a qualidade dos ficheiros de áudio

      Antes de converter os ficheiros multimédia com a API Speech-to-Text, é recomendável ouvir os ficheiros para determinar se têm anomalias na qualidade de som que possam impedir que as ferramentas de ML forneçam resultados precisos. Nesta secção, pode ouvir os ficheiros no navegador clicando nos respetivos nomes. (Recomendamos que use auscultadores ou altifalantes de ampla gama dinâmica.)

      Ouça o áudio de um ficheiro de vídeo

      1. Clique no seguinte ficheiro para o reproduzir:

        HumptyDumptySample4416.flac
        

        Este ficheiro tem uma frequência de 44,1 kHz e uma profundidade de bits de 16 bits. Repare na fidelidade clara e sem distorções, e na inteligibilidade deste ficheiro. Este texto é um bom candidato para transcrição com a conversão de voz em texto.

      2. Reproduza o seguinte ficheiro de vídeo de formato 5.1 de exemplo para ouvir uma mistura surround com não diálogo em todos os canais, exceto no canal central:

        sample_51_mix_movie.mp4
        

        O ficheiro foi concebido para reprodução num sistema de áudio 5.1. Se estiver a usar apenas auscultadores ou um sistema de dois canais, nem todos os canais podem ser audíveis durante a reprodução. (Para ouvir os seis canais, a reprodução tem de ser descodificada num sistema 5.1 ou tem de criar uma conversão multicanal de 2 canais.)

        Idealmente, deve usar o canal apenas de diálogo para a conversão de voz em texto. O ficheiro de exemplo tem áudio que não é diálogo em cinco canais e diálogo num canal. Na secção Otimize os ficheiros de áudio para análise mais adiante, vai aprender a extrair os seis canais de áudio mono individuais codificados no ficheiro 5.1 para ouvir cada faixa. Isto permite-lhe isolar o canal apenas de diálogo (normalmente, o canal central ou frontal central) dos canais sem diálogo para melhorar a capacidade de conversão de voz em texto para transcrever o ficheiro.

      Teste o mesmo ficheiro com diferentes taxas de amostragem

      A tabela seguinte apresenta várias versões do mesmo ficheiro de áudio para ouvir, cada uma com uma profundidade de bits e uma taxa de amostragem diferentes.

      Ficheiro de áudio Taxa de amostragem/profundidade de bits
      HumptyDumptySample4416.flac 44,1 kHz/16 bits PCM linear
      HumptyDumptySample2216.flac PCM linear de 22 kHz/16 bits
      HumptyDumptySample1616.flac PCM linear de 16 kHz/16 bits
      HumptyDumptySample1116.flac PCM linear de 11 kHz/16 bits
      HumptyDumptySample0808.flac PCM linear de 8 kHz/8 bits
      HumptyDumptyUpSample4416.flac 44,1 kHz (com sobreamostragem)/PCM linear de 16 bits
      HumptyDumptySample4408.flac 44,1 kHz/PCM linear de 8 bits
      HumptyDumptySample4408to16.flac 44,1 kHz/16 bits PCM linear (conversão ascendente)
      1. Para cada ficheiro na tabela anterior, clique no nome do ficheiro para o ouvir. (O leitor de áudio é aberto num novo separador do navegador.) Repare na diferença de qualidade quando a taxa de amostragem é diminuída.

        A fidelidade dos ficheiros de 16 bits é reduzida nas taxas de amostragem mais baixas e a relação sinal/ruído é drasticamente reduzida nas versões de ficheiros de 8 bits devido aos erros de quantização. O último ficheiro na tabela é um ficheiro original de 8 kHz e 8 bits que foi sobreamostrado para 44,1 kHz/16 bits. Repare que a qualidade de som é a mesma que a do ficheiro de 8 kHz/8 bits.

      2. No Cloud Shell, examine os metadados do ficheiro: HumptyDumptySampleStereo.flac

        ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
        

        O resultado é o seguinte:

        Input #0, flac, from 'project_files/HumptyDumptySampleStereo.flac':
            Duration: 00:00:26.28, start: 0.000000, bitrate: 378 kb/s
            Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
        

        O resultado mostra o seguinte:

        • A duração do ficheiro é de 26 segundos e 28 frames. Estas informações são úteis para exemplos de utilização avançados, por exemplo, se quiser processar ficheiros com mais de 1 minuto usando o comando gcloud speech recognize-long-running.
        • A taxa de bits do ficheiro é de 378 kb/s.
        • O número de streams no ficheiro é 1. (Isto é diferente do número de canais.)
        • A taxa de amostragem do ficheiro é de 44,1 kHz.
        • O número de canais de áudio é 2 (estéreo).
        • A profundidade de bits do ficheiro é de 16 bits.

        Um stream de transporte pode conter vários streams, incluindo áudio, vídeo e metadados. Cada um destes tem características diferentes, como o número de canais de áudio por stream, o codec das streams de vídeo e o número de frames por segundo das streams de vídeo.

        Repare que os metadados revelam que se trata de um ficheiro estéreo. Isto é importante porque o número predefinido de canais de áudio recomendado para análise com a API Speech-to-Text é um canal mono.

      Transcreva ficheiros com a conversão de voz em texto

      Agora que extraiu ficheiros mono, pode usar a API Speech-to-Text para transcrever as faixas de áudio. Usa o comando gcloud ml speech, que invoca a API Speech-to-Text.

      • Transcreva o ficheiro de diálogo Alice_FC.flac limpo:

        gcloud ml speech recognize ~/output/Alice_FC.flac \
            --language-code='en-US' --format=text
        

        Aguarde alguns segundos para concluir a transcrição. O resultado é o seguinte:

        results[0].alternatives[0].confidence: 0.952115
        results[0].alternatives[0].transcript: the walrus and the carpenter were walking close at hand they whip like anything to see such quantities of sand if this were only cleared away they said it would be grand
        results[1].alternatives[0].confidence: 0.968585
        results[1].alternatives[0].transcript: " if 7 Maids with seven mops swept it for half a year do you suppose the walrus said that they could get it clear I doubt it said the Carpenter and shed a bitter tear"
        results[2].alternatives[0].confidence: 0.960146
        results[2].alternatives[0].transcript: " oysters come and walk with us the walrus did beseech a pleasant walk a pleasant talk along the Briny Beach we cannot do with more than four to give a hand to each the eldest oyster look at him but never a word he said the eldest oyster winked his eye and shook his heavy head"
        

      Transcreva uma faixa "suja"

      Pode ter ficheiros de áudio de pessoas a falar com outros elementos de som misturados no diálogo. Estes são frequentemente denominados faixas "sujas", em oposição à faixa "limpa" apenas com diálogos, que não tem outros elementos misturados. Embora a conversão de voz em texto possa reconhecer a voz em ambientes ruidosos, os resultados podem ser menos precisos do que para faixas limpas. Pode ser necessário filtrar e processar o áudio adicionalmente para melhorar a inteligibilidade do diálogo antes de analisar o ficheiro com a API Speech-to-Text.

      Nesta secção, transcreve um downmix mono do ficheiro de áudio 5.1 que analisou no exemplo anterior.

      1. No Cloud Shell, transcreva o ficheiro Alice_mono_downmix.flac:

        gcloud ml speech recognize $PROJECT_FILES/Alice_mono_downmix.flac \
            --language-code='en-US' --format=text
        

        O resultado é o seguinte:

        results[0].alternatives[0].confidence: 0.891331
        results[0].alternatives[0].transcript: the walrus and the carpenter Milwaukee Corsicana they reflect anything to see such quantity if this were only
        results[1].alternatives[0].confidence: 0.846227
        results[1].alternatives[0].transcript: " it's Sunday 7th March 23rd happy few supposed former said that they could get it clear I doubt it to the doctor and she said it did it to just come and walk with us"
        results[2].alternatives[0].confidence: 0.917319
        results[2].alternatives[0].transcript: " along the Briny Beach it cannot do with more than four to give a hand to each the eldest oyster look at him but he said it was poised to Rich's eye and shook his head"
        

        Os resultados desta análise são imprecisos devido aos sons adicionais que ocultam o diálogo. O nível de confiança da transcrição está abaixo de 85%. Como pode ver na saída, o texto não corresponde ao diálogo na gravação tão fielmente quanto deveria.

      Transcreva ficheiros de áudio com diferentes taxas de amostragem e profundidades de bits

      Para compreender melhor como a taxa de amostragem e a profundidade de bits afetam a transcrição, nesta secção, transcreva o mesmo ficheiro de áudio gravado numa variedade de taxas de amostragem e profundidades de bits. Isto permite-lhe ver o nível de confiança da conversão de voz em texto e a respetiva relação com a qualidade de som geral.

      1. Clique nos nomes dos ficheiros na tabela seguinte para ouvir a amostra e reparar na diferença de qualidade. Sempre que clica no nome de um ficheiro, o ficheiro de áudio é reproduzido num novo separador do navegador.

        Nome do ficheiro de áudio Especificações dos ficheiros
        Speech_11k8b.flac Taxa de amostragem de 11025 Hz, profundidade de 8 bits
        Speech_16k8b.flac Taxa de amostragem de 16 kHz, profundidade de 8 bits
        Speech_16k16b.flac Taxa de amostragem de 16 kHz, profundidade de 16 bits
        Speech_441k8b.flac Taxa de amostragem de 44 100 Hz, profundidade de 8 bits
        Speech_441k16b.flac Taxa de amostragem de 44 100 Hz, profundidade de 16 bits
      2. No Cloud Shell, transcreva o ficheiro Speech_11k8b.flac, que representa a qualidade de áudio mais baixa neste exemplo:

        gcloud ml speech recognize $PROJECT_FILES/Speech_11k8b.flac \
            --language-code='en-US' --format=text
        

        O resultado é o seguinte:

        results[0].alternatives[0].confidence: 0.77032
        results[0].alternatives[0].transcript: number of Pentacle represent
        results[1].alternatives[0].confidence: 0.819939
        results[1].alternatives[0].transcript: " what people can get in trouble if we take a look at the X again"
        
      3. Transcreva o ficheiro Speech_441k16b.flac, que é gravado com uma fidelidade significativamente superior:

        gcloud ml speech recognize $PROJECT_FILES/Speech_441k16b.flac \
            --language-code='en-US' --format=text
        

        O resultado é o seguinte:

        results[0].alternatives[0].confidence: 0.934018
        results[0].alternatives[0].transcript: that gives us the number of pixels per inch when magnified to a 40-foot screen size now we take that number and multiply it by the distance between our eyes the interocular distance of 2 and 1/2 inch number of 10 pixels in other words on a 40-foot screen 10 pixels of information represents 2 and 1/2 in anything farther apart than that and positive Parallax is going to start to force the eyes to rotate that word in order to use the image
        results[1].alternatives[0].confidence: 0.956892
        results[1].alternatives[0].transcript: " where people tend to get in trouble is by looking at these images on a small monitor now if we take a look at the same math using a smaller monitor in this case 60 in the screen size in the resolution to multiply It Again by the distance between our eyes we end up with eighty pixels of Divergence on a monitor which equals two and a half inches so on the monitor things might look fine but when magnified up to the larger screen in this case for defeat we've created a situation that's eight times what we can stand to look at its very painful and should be avoided"
        

        Repare na diferença na confiança no resultado dos dois exemplos. O primeiro ficheiro (Speech_11k8b.flac), que foi gravado a 11 kHz com uma profundidade de 8 bits, tem um nível de confiança inferior a 78%. O segundo ficheiro tem um nível de confiança de cerca de 94%.

      4. Opcionalmente, transcreva os outros ficheiros indicados na tabela no passo 1 para fazer mais comparações entre a taxa de amostragem do ficheiro de áudio e a precisão da profundidade de bits.

      A tabela seguinte mostra um resumo da saída da API Speech-to-Text para cada um dos ficheiros indicados na tabela no passo 1 do procedimento anterior. Repare na diferença nos resultados do valor de confiança para cada tipo de ficheiro. (Os seus resultados podem variar ligeiramente.) As transcrições dos ficheiros de áudio com taxas de amostragem e de bits mais baixas tendem a ter resultados de confiança mais baixos devido à qualidade de som inferior.

      Nome do ficheiro de áudio Confiança (secção um) Confiança (secção dois)
      Speech_11k8b.flac 0,770318 0,81994
      Speech_16k8b.flac 0,935356 0,959684
      Speech_16k16b.flac 0,945423 0,964689
      Speech_44.1k8b.flac 0,934017 0,956892
      Speech_44.1k16b.flac 0,949069 0,961777

      Otimize ficheiros de vídeo para análise

      Esta secção do tutorial explica os passos necessários para extrair áudio 5.1 de um ficheiro de filme.

      1. No Cloud Shell, extraia 6 canais mono de um ficheiro de filme 5.1 e converta os ficheiros individuais para o formato FLAC:

        ffmpeg -i $PROJECT_FILES/sample_51_mix_movie.mp4 -filter_complex "channelsplit=channel_layout=5.1[FL][FR][FC][LFE][BL][BR]" -map "[FL]" output/sample_FL.flac -map "[FR]" output/sample_FR.flac -map "[FC]" output/sample_FC.flac -map "[LFE]" output/sample_LFE.flac -map "[BL]" output/sample_BL.flac -map "[BR]" output/sample_BR.flac
        

        Este comando extrai os seguintes ficheiros para o diretório de saída:

        sample_BL.flac
        sample_BR.flac
        sample_FC.flac
        sample_FL.flac
        sample_FR.flac
        sample_LFE.flac
        
      2. Verifique os metadados do ficheiro de exemplo:

        ffprobe $PROJECT_FILES/Speech_48kFloat.wav
        

        O resultado é o seguinte:

        Duration: 00:00:05.12, bitrate: 1536 kb/s
        Stream #0:0: Audio: pcm_f32le ([3][0][0][0] / 0x0003), 48000 Hz, mono, flt, 1536 kb/s
        

        Os valores de metadados pcm_f32le e flt indicam que este ficheiro tem uma taxa de bits de ponto flutuante. Tem de converter um ficheiro WAV com uma taxa de bits de vírgula flutuante num formato de número inteiro com sinal.

      3. Converta a taxa de bits do ficheiro para um formato de número inteiro com sinal:

        ffmpeg -i $PROJECT_FILES/Speech_48kFloat.wav -c:a pcm_s16le output/Speech_48k16bNonFloatingPoint.wav
        

        Este comando cria um novo ficheiro WAV cuja taxa de bits está no formato de número inteiro com sinal.

      4. Examine os metadados do ficheiro criado recentemente:

        ffprobe ~/output/Speech_48k16bNonFloatingPoint.wav
        

        O resultado é o seguinte:

        Duration: 00:00:05.12, bitrate: 768 kb/s
        Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, 1 channels, s16, 768 kb/s
        

        Os metadados mostram agora que a taxa de bits no ficheiro convertido está num formato de número inteiro com sinal (little-endian), conforme indicado pelas designações pcm_s16le e s16.

      Execute exemplos de tutoriais num terminal local

      Pode executar todos os exemplos neste tutorial a partir de um terminal no seu computador local. A execução dos exemplos localmente oferece uma capacidade importante para reproduzir ficheiros de áudio e vídeo diretamente através do comando ffplay (em vez de simplesmente ouvi-los no navegador).

      1. Num terminal no seu computador local, instale a ferramenta FFMPEG:

        sudo apt update
        sudo apt install ffmpeg
        
      2. Transfira os ficheiros de exemplo para a sua máquina local:

        gcloud storage cp gs://cloud-samples-data/speech/project_files/*.* local_destination_path
        

        Substitua local_destination_path pela localização onde quer colocar os ficheiros de exemplo.

      3. Defina a variável de ambiente LOCAL_PATH para a localização no seu computador onde transferiu os ficheiros de exemplo:

        export LOCAL_PATH=local_destination_path
        

        Substitua local_destination_path pelo caminho do passo anterior.

      4. No terminal, use o comando ffplay para ouvir um ficheiro de áudio de amostra:

        • Ficheiro de áudio: ffplay $LOCAL_PATH/HumptyDumpty4416.flac
        • Ficheiro de vídeo: ffplay $LOCAL_PATH/sample_51_mix_movie.mp4
        • Reprodução do contentor do Cloud Storage: ffplay $GCS_BUCKET_PATH/HumptyDumpty4416.flac

        Experimente no seu terminal local com os exemplos que usou anteriormente neste tutorial. Isto ajuda a compreender melhor como usar a Conversão de voz em texto da melhor forma.

      Resolução de problemas

      Os erros podem ser causados por vários fatores, por isso, vale a pena examinar alguns erros comuns e saber como os corrigir. Pode ocorrerem vários erros num determinado ficheiro de áudio que impedem a conclusão do processo de transcrição.

      O áudio é demasiado longo

      O comando gcloud speech recognize pode processar ficheiros com uma duração máxima de 1 minuto. Por exemplo, experimente o seguinte exemplo:

      gcloud ml speech recognize $PROJECT_FILES/HumptyDumpty4416.flac \
          --language-code='en-US' --format=text
      

      O resultado é o seguinte:

      ERROR: (gcloud.ml.speech.recognize) INVALID_ARGUMENT: Request payload size exceeds the limit: 10485760 bytes.
      

      O erro é causado pela tentativa de usar o comando speech recognize para processar um ficheiro com mais de 1 minuto.

      Para ficheiros com mais de 1 minuto e menos de 80 minutos, pode usar o comando speech recognize-long-running. Para ver o tamanho do ficheiro, pode usar o comando ffprobe, como no exemplo seguinte:

      ffprobe $PROJECT_FILES/HumptyDumpty4416.flac
      

      O resultado é semelhante ao seguinte:

      Duration: 00:04:07.91, start: 0.000000, bitrate: 280 kb/s
      Stream #0:0: Audio: flac, 44100 Hz, mono, s16
      

      Repare que o tempo de execução do ficheiro de áudio é de aproximadamente 4 minutos e 8 segundos.

      Leia ficheiros grandes a partir do seu computador local

      O comando speech recognize-long-running só pode processar ficheiros com uma duração máxima de 1 minuto a partir do computador local. Para ver onde pode encontrar um erro, experimente usar o comando speech recognize-long-running no Cloud Shell para um ficheiro mais longo:

      gcloud ml speech recognize-long-running $PROJECT_FILES/HumptyDumpty4416.flac \
          --language-code='en-US' --format=text
      

      O resultado é o seguinte:

      ERROR: (gcloud.ml.speech.recognize-long-running) INVALID_ARGUMENT: Request payload size exceeds the limit: 10485760 bytes.
      

      Este erro não é resultado da duração do áudio, mas sim do tamanho do ficheiro na máquina local. Quando usa o comando recognize-long-running, o ficheiro tem de estar num contentor do Cloud Storage.

      Para ler ficheiros com mais de 1 minuto, use o comando recognize-long-running para ler um ficheiro de um contentor do Cloud Storage, como no comando seguinte:

      gcloud ml speech recognize-long-running $GCS_BUCKET_PATH/HumptyDumpty4416.flac \
          --language-code='en-US' --format=text
      

      Este processo demora alguns minutos a ser concluído.

    Limpar

    Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.

    Elimine o projeto

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    O que se segue?