Tutorial para transcrever áudios para texto de graça utilizando a API Speech to Text do Google e ferramentas do Google Cloud

Fábio Aleixo
11 min readMar 27, 2021

--

Cada vez mais precisamos ter atenção com o tema da acessibilidade. Já vemos alguns blogs que trazem versões de áudio dos posts e isso vai ser cada vez mais comum.

A situação pode ficar trabalhosa quando temos uma mensagem de voz em áudio e precisamos transcrever. Estou escrevendo um artigo, curiosamente sobre acessibilidade, e me deparei com a necessidade de transcrever quase 30 minutos de áudio após entrevistar uma pessoa por Whatsapp.

Já é do meu desejo ter versões em áudio dos meus artigos e, neste caso, terei como deixar a locução com a própria voz da entrevistada no formato de perguntas e respostas, o que é muito legal! Mas precisamos entender como não deixar isso impactar na produtividade.

Comecei, então, a procurar soluções de Speech to Text. A maioria fazia esse serviço em tempo real e no caso, já tinha os áudios como arquivos.

Outras soluções eram pagas. Outras com avaliações terríveis dos usuários. Até que achei a API de Speech to Text do Google, a mesma que o Google usa em seus app. Dado que nenhum APP de transcrição de voz é 100% fiel, faz sentido buscar um que tenha a menor taxa de erros, pois será inevitável repassar os textos corrigindo os erros e, neste caso, somos impactados novamente pela questão da produtividade.

Fiquei com vontade de usar. Tudo que é do Google tem um certo crédito de funcionar muito bem e ainda teria meu primeiro contato com a plataforma realizando uma atividade prática.No entanto, existem algumas peculiaridades que sofri para entender, principalmente por que tenho pouca fluência na interface do Google Cloud. Aqui, pretendo deixar o processo mamão com açúcar para você poder utilizar a API para transcrever seus áudios também. Não se assuste com os termos API, console, Google Cloud Platform. A API é poderosa, você pode integrar com Phyton, Node, PHP e diversas linguagens de programação, mas aqui vamos utilizar apenas o console das máquinas virtuais do Google Cloud, que não passa de um painel de controle.

Vamos lá.

Dica: é bom já conhecer o HomeBrew ou outro gerenciador de pacotes para o seu sistema operacional ou algum outro software para codificação de áudio, pois será utilizado no decorrer do artigo.

1. Visão geral da API

A API Google Speech to Text funciona com a chamada de uma requisição a um arquivo JSON que possui um bloco de configurações e outro bloco com o caminho de onde se encontra o arquivo de áudio. Com linguagens de programação avançadas, é possível utilizar arquivos locais (de dentro da memória do seu computador).

2. Preparando o áudio

A primeira vez que comecei a realizar testes de requisição para ver como a API se comportava eu tive muitos problemas. Às vezes, faltavam parâmetros no bloco de configurações, às vezes eles estavam incorretos, às vezes tinha problemas com autenticação e às vezes simplesmente não funcionava, me retornando um arquivo “vazio”, ao invés do texto transcrito.

Com o tempo e milhares de testes, percebi que o erro era por conta da codificação do áudio. Codificação é como nos referimos ao conjunto de especificações de um arquivo de áudio ou vídeo. O Google Speech to Text funciona melhor com algumas especificações, portanto vamos “encodar” nosso arquivo para funcionar corretamente com a API.

2.1 — Conhecendo o SoX

SoX é um software para manipulação de arquivos de áudio que possui uma interface de linha de comando. Vou dar sequência explicando como realizar a instalação dele no MAC OS utilizando o HomeBrew para não ficar muito extenso, mas o SoX funciona em diversos sistemas operacionais como o Windows. Você pode consultar a página do software e o Google se precisar de ajuda com ele ou utilizar outro software que prefira para a mesma finalidade.

2.2 — Instalando o SoX no MacOS

Aqui eu utilizei o HomeBrew (um gerenciador de pacotes via linha de comando para MacOS e Linux). Siga o passo a passo:

  1. Abra o terminal no MacOS teclando “command+espaço”, digitando “terminal” e apertando “Enter”;
  2. Instale o SoX copiando e colando o seguinte comando:
$ brew install sox;
  1. Aguarde finalizar.

2.3- Encodando o áudio com o SoX

Para deixar o áudio com as especificações compatíveis com a API do Google Speech to Text, acesse via terminal o diretório que encontra-se o arquivo e digite o seguinte comando:

$ sox nome_e_extensão_do_seu_arquivo --channels=1 --bits=16 audio.flac

Não esqueça de substituir o nome e a extensão de seu arquivo.

Por exemplo:

$ sox WhatsApp Ptt 2021–03–22 at 14.22.04.ogg --channels=1 --bits=16 audio.flac

Após apertar “Enter”, o SoX vai salvar o arquivo “audio.flac” no mesmo diretório. Você também poderia escolher outro nome de arquivo além de “audio”, mas é importante manter a extensão como .flac.

3. No ambiente do gCloud

Agora, vamos configurar os recursos do gCloud que vamos utilizar:

  1. API e Serviços
    Onde ativamos o serviço de Speech to Text e criamos uma chave para acesso seguro.
  2. Compute Engine
    Onde criamos uma instância de máquina virtual que usaremos para criar as chamadas API e processar a transcrição.
  3. Cloud Storage
    Onde iremos armazenar o áudio que queremos transcrever. Lembrando que é possível utilizar linguagens de programação para fazer requisição de arquivos locais.

Inicialmente, você precisa acessar o Google Cloud e clicar em “Iniciar Gratuitamente”.

3.1 — Cobrança — ATENÇÃO

Os produtos do Google Cloud possuem um período inicial de 90 dias gratuitos com o limite de crédito de U$300. Após esse período, alguns produtos podem ser cobrados.

Tudo que vamos utilizar aqui possui nível gratuito, ou seja, até certo limite, podem ser usados gratuitamente, conforme colocado abaixo:

  1. API e Serviços: Speech to Text: 60 minutos por mês
  2. Compute Engine: 1 instância F1-micro por mês
  3. Cloud Storage: 5 GB por mês de armazenamento padrão

Para mais detalhes da cobrança, consulte a página oficial. Todas essas regras podem ser alteradas com o tempo. Fique atento.

3.2 — API e Serviços

Após logar no Google Cloud e realizar as configurações necessárias (provavelmente, ele vai pedir para que você deixe configurado alguma opção de faturamento), vamos criar a chave de acesso a API do serviço Speech to Text que nos permitirá ter permissão de usá-lo.

1- Para isso, no menu lateral esquerdo, clique em “API” e “Serviços e em painel”;

2- Na barra superior clique em “Ativar API e Serviços”;

3- Na barra de busca digite “speech” e clique no resultado “Cloud Speech-to-Text API”;

4- Clique no botão “Ativar”;

5- Você será direcionado para o painel da API Speech to Text. Clique na parte superior esquerda onde aparece “API e Serviços — Speech to Text” para ir para o painel principal de APIs e Serviços;

6- No menu lateral esquerdo, clique em credenciais e, após carregar o painel, na barra superior clique em “Criar Credenciais” e, no menu que vai aparecer, clique em “Chave de API”;

7- Vai aparecer uma tela no centro do painel com a chave. Clique no botão de copiar e cole sua chave em um bloco de notas para utilizar mais tarde. Neste momento, você também pode restringir o uso da chave ou não. Como o foco aqui não é segurança, vamos deixar em aberto, mas seria interessante você pesquisar a respeito.

3.3 — Compute Engine

Agora que criamos a chave de acesso da API de serviço de Speech to Text, vamos criar a máquina virtual. Nós vamos utilizar o terminal dessa máquina virtual pelo próprio ambiente do Google Cloud para fazer a requisição da API e pegar o resultado.

1- Volte para o painel principal do Google Cloud (clique no logo bem acima e na esquerda da tela) e, depois, vá até o menu lateral esquerdo “Compute Engine” e clique na segunda opção “Instância de VM” (VM do inglês Virtual Machine);

2- Na barra superior clique em “Criar instância”;

3- ATENÇÃO: Existem parâmetros para configuração da máquina para se enquadrar como gratuíta e o serviço possui seus limites.

EU NUNCA VOU ACEITAR SER RESPONSABILIZADO POR QUALQUER COBRANÇA QUE VOCÊ SOFRA ;).

4- Configure a máquina conforme a seguir:
1- Dê um nome que identifique sua máquina, como “speech-to-text”;
2- Selecione a região “us-central1 (Iowa)”;
3- Em “Configuração da Máquina” seleciona Série “N1” e Tipo de Máquina “f-1 Micro”.

5- É muito importante você observar a questão de cobrança na parte esquerda da configuração:

6- Abaixo, as informações do Google Cloud a respeito da gratuidade da VM na data de hoje:

7- A demais configurações pode deixar como está, lembrando que nosso foco é a utilização do serviço Speech To Text e não segurança. Clique em “Criar”.

3.4 — Cloud Storage

Neste artigo, estamos transcrevendo áudios hospedados no Cloud Storage. Para acessá-lo, no painel principal, navegue no menu lateral esquerdo, role um pouco para baixo e acesse “Cloud Storage” e “Navegador”.

1- Agora clique em “Criar em Intervalo” ou bucket.

2- Preencha as informações conforme for solicitado:
1- Nome: dê um nome que faça sentido como “audios-speech-to-text”;
2- Deixe “multi-region”;
3- Classe de armazenamento “standard”;
4- Como controlar o acesso a objetos deixe uniforme;
5- Deixe as configurações avançadas como está e clique em criar.

3- O “intervalo” ou “bucket” é como uma “pasta” onde você vai realizar o upload do seu áudio.

4- Faça o upload do seu áudio

5- Agora, você precisa deixar o arquivo de acesso público para a API conseguir ler ele:
1- Clique em permissões;
2- Clique em adicionar;
3- Em “Novos Membros” escreva “allUsers”;
4- Clique em “+ Adicionar outro papel” e selecione “Leitor de bucket legado do storage”;
5- Clique em “+ Adicionar outro papel” e selecione “Leitor de objeto legado do storage”;
6- Clique em “Salvar”;
7- Na tela de confirmação clique em “Permitir Acesso Público”.

4. Finalmente, fazendo as transcrições

Agora que temos os recursos do Google Cloud configurados vamos fazer as transcrições.

Acesse o painel de máquina virtual clicando no menu lateral esquerdo em “Compute Engine” e “Instâncias de VM” na sequência.

Vai aparecer a máquina que criamos anteriormente. Clique no botão “SSH” para abrir o terminal da máquina.

Com isso, a janela do terminal vai abrir.

Agora, para iniciar a transcrição, precisamos criar um arquivo JSON com os blocos de configuração e o caminho do áudio no Cloud Storage.

Digite:

$ touch request.json

Com o arquivo criado, vamos utilizar o editor VIM para inserir conteúdo nele.

Digite:

$ vi request.json

O editor VIM é diferente e muito chato. Para inserir conteúdo nele, primeiro, você precisa teclar “i” do seu teclado para entrar no modo “insert”. Com isso, copie e cole o código a seguir:

{
“config”: {
“encoding”:”FLAC”,
“languageCode”: “pt-BR”
},
“audio”: {
“uri”:”gs://audios-speech-to-text/audio.flac”
}
}

Esses são os blocos de configuração (config) e caminho do áudio (audio).

Em config podemos ter diversas outras opções, aqui vamos trabalhar apenas com essas. Em “enconding” estamos dizendo que o áudio a ser transcrito está no formato FLAC e a língua a ser transcrita é português do Brasil (pt-BR). A API trabalha com diversos idiomas que você pode conferir nessa tabela.

Em “audio” passamos o caminho do arquivo no Cloud Storage que segue o formato:

”uri”: “gs://nome_do_bucket/caminho_arquivo_audio”

IMPORTANTE: não esqueça de colocar o nome do seu áudio correto no bloco acima, substituindo “audio.flac”.

Agora, aperte a tecla “ESC” para sair do modo “insert” do VIM e digite

:wq

e tecle `Enter`.

PSC: O “W” informa que o arquivo deve ser salvo e o “Q” informa para sair do editor.

Você pode conferir se deu certo digitando no terminal:

$ cat request.json

Isso trará o conteúdo do arquivo no terminal.

Vamos, então, fazer a chamada da API. Cole no terminal o seguinte comando e tecle “Enter”.

$ curl -s -X POST -H "Content-Type: application/json" --data-binary @request.json "https://speech.googleapis.com/v1/speech:recognize?key=CHAVE_DA_API" > result.json

Não esqueça de substituir sua chave da API, aquela que salvamos, em CHAVE_DA_API.

Pronto! Áudio transcrito. O comando acima criou o arquivo “result.json” com o resultado da transcrição. Para ver, digite:

$ cat result.json

e tecle “Enter”.

O resultado traz a propriedade “transcript” com o resultado da transcrição!

5. Áudios logons com mais de 1 minuto

Para áudios que durem mais de 1 minuto, existe uma peculiaridade. O comando do request muda para:

$ curl -s -X POST -H "Content-Type: application/json" --data-binary @request.json "https://speech.googleapis.com/v1/speech:longrunningrecognize?key=CHAVE_DA_API" > result.json

Repare no parâmetro que mudou destacado. A diferença prática é que, segundo a documentação do Google, é que o tempo de transcrição entra em uma fila de longas transcrições e demora, em média, metade do total de tempo do áudio.

Neste caso, quando você checar o “result.json” ele trará apenas o ID desta operação:

Após aguardar o tempo necessário, você pode resgatar o resultado da transcrição colando o seguinte comando no console:

$ curl -H "Content-Type: application/json; charset=utf-8" "https://speech.googleapis.com/v1/operations/ID_DA_OPERACAO?key=CHAVE_DA_API"

Não esqueça de substituir o “ID_DA_OPERACAO” acima pelo número que estará no “result.json” e a chave da API.

Veja o resultado de um áudio de pouco mais de dois minutos. Neste caso, a transcrição vem na propriedade “results” e separada em vários blocos chamados “alternatives”.

DICA:

Quando você abrir o terminal da sua máquina virtual, antes iniciar os comandos citados acima, você pode armazenar sua chave em uma variável com o comando:

$ export API_KEY=SUA_CHAVE_AQUI

Dessa forma, utilize `${API_KEY}` ao invés da chave inteira nos comandos de requisição.

Exemplo:

$ curl -s -X POST -H "Content-Type: application/json" --data-binary @request.json "https://speech.googleapis.com/v1/speech:longrunningrecognize?key=${API_KEY}" > result.json

--

--

Fábio Aleixo

A web addicted eager to make a better internet for everyone.