Como usar a Speech-to-Text API da GCP para transcrever áudios

Um tutorial passo-a-passo para utilizar a API de speech-to-text da Google Cloud Platform.

Letícia Mendonça Carraro
Kompa Data & AI
8 min readSep 21, 2021

--

Créditos da imagem

Aplicações baseadas em comandos por voz tem crescido a um ritmo impressionante. Falando alguns comandos em voz alta você é capaz de saber a previsão do tempo, ouvir sua música favorita enquanto se prepara para mais um dia, ligar para as pessoas de quem gosta…tudo isso usando apenas a sua voz!

Tem um vídeo longo que precisa de uma legenda bem feita? Fazer manualmente pode levar horas, com speech-to-text e alguns ajustes, você pode terminar em uma fração do tempo!

Tem um produto super bacana e quer fazer com que o seu usuário tenha uma experiência fantástica? Que tal usar comandos por voz?!

Quem sabe você queira detectar sentimentos dos seus clientes através de sua fala... Uma tarefa que parece tão complicada, pode ser executada com Speech-to-text e modelos de ML (Machine Learning). Ainda não é tão fácil assim, mas aprender um pouco mais sobre a tecnologia te coloca um passo mais perto desse objetivo!

Mas afinal, o que é speech-to-text?

Speech-to-text é a tecnologia que permite que o discurso, a língua falada, seja transcrita, isto é, seja transformada em texto. Existem diversas ferramentas que se disponibilizam a fazer essa tarefa, temos o Watson da IBM , Azure da Microsoft e é claro, Speech-to-text do Google, que vamos abordar hoje.

A API de Speech-to-Text do Google

Para utilizarmos a API, é necessária a instalação de algumas dependências, portanto, peço que sigam as instruções deste link.

A API do Google é uma ferramenta muito versátil, que possibilita a transcrição de diversos tipos de áudios, mais curtos ou mais longos, advindos de vídeos ou de chamadas telefônicas até mesmo com um ou mais locutores! Aqui, nosso foco será a transcrição de áudios mais longos (maiores que um minuto) com apenas um locutor, mas apresentarei algumas outras funcionalidades da ferramenta, que podem ser útil para seu propósito!

Métodos de reconhecimento de fala

A API do google possui três principais métodos para fazer o reconhecimento de fala:

Reconhecimento Síncrono (Synchronous Recognition) (REST and gRPC)

Esse método é ideal para áudios curtos, já que possui limite de até um minuto de duração. Funciona mandando áudios para a API de Speech-to-Text, que faz o reconhecimento dos dados e retorna o áudio processado em forma de texto. Nesse tipo de requisição existe uma maior flexibilidade para o usuário que não precisa upar os dados para o Google cloud e pode fazer tudo localmente.

Reconhecimento Assíncrono (Asynchronous Recognition) (REST and gRPC)

Esse tipo de método consegue lidar com áudios de duração maior, de até 480 minutos (8 horas). O áudio é mandado para a API que inicia uma Long Running Operation. Com essa operação, é possível periodicamente pesquisar resultados de reconhecimento. Nesse tipo de requisição, se faz necessário o upload de dados para o google cloud.

Streaming Recognition (gRPC )

Faz o reconhecimento de dados de áudio fornecidos em um gRPC bi-directional stream. As solicitações de streaming são projetadas para reconhecimento em tempo real. Esse tipo de método oferece resultados provisórios enquanto o áudio está sendo capturado, permitindo que o resultado apareça enquanto o usuário ainda está falando.

Aqui nosso foco será utilizar Reconhecimento Assíncrono para a transcrição dos nossos áudios!

Diferentes modelos

É interessante notar que a API nos fornece diferentes modelos e temos que ponderar para saber qual melhor se encaixa à nossa necessidade. Esses modelos podem nos auxiliar em situações específicas, já que são treinados justamente com conteúdo proveniente dessas situações específicas.

Para especificar um modelo de reconhecimento de fala, basta incluir o campo model no objeto RecognitionConfig da solicitação (veremos do que se trata esse campo mais pra frente nesse texto, entretanto não iremos alterar o modelo utilizado) . Os modelos disponíveis são: Video, Chamada telefônica, Relatórios avançados de pesquisa: comando e pesquisa e o padrão. Note que esses modelos possuem disponibilidade limitada a depender do idioma.

Configurações de áudio

Agora já sabemos os diferentes métodos de reconhecimento disponíveis, já sabemos que modelo melhor se adequa aos nosso propósitos, o próximo passo é entender que tipo de áudio eu posso mandar para a API! Vamos falar um pouquinho sobre a codificação aceita e recomendada pelo Google e sobre a taxa de amostragem que vamos utilizar. Todos esses serão parâmetros importantes quando formos realmente utilizar a API.

Codificação e formato dos áudios

É importante notar que a API não aceita qualquer formato de áudio, por isso é importante entender um pouco sobre as diferentes codificações de áudio e saber quais são as aceitas por ela.

A codificação de áudio tem a responsabilidade de determinar qual será a maneira como os dados serão armazenados e transmitidos. Note que, apesar de ser necessário saber qual a codificação de áudio aceita pela API, esse é um tema complexo e geralmente não é necessário para processar o áudio através da API!

Neste link é possível encontrar as codificações que a API fornece. Para o nosso propósito, iremos utilizar o formato WAV com codificação Linear16, pois esse tipo de codificação não possui perdas e nela, a taxa de amostragem do áudio é contido no cabeçalho. Além disso, como veremos mais para frente quando falarmos sobre melhores práticas, é recomendada a utilização de áudios no formato wav, apesar de existir uma versão beta para codificação MP3.

Taxas de amostragem

Novamente, não é necessário saber a fundo o conceito de taxas de amostragem para se utilizar a API, mas é interessante saber do que se trata! O som como conhecemos, é uma onda analógica. Para aproximarmos digitalmente o comportamento dessa onda, precisamos amostrar a sua amplitude rápido o suficiente para termos uma áudio que consegue representar o áudio analógico suficientemente bem. A Taxa de amostragem especifica justamente o número de amostras a serem retiradas de uma faixa de áudio para representa-lo de maneira fiel.

Para utilizar a API, também vamos precisar especificar a taxa de amostragem do nosso áudio. No speech-to-text são aceitas taxas de amostragem entre 8000hz e 48000Hz.

Além disso, a API só aceita áudios com um canal apenas, ou seja, mono audios e não stereo audios.

Para fazer o cálculo da taxa de quadros, bem como retornar o número de canais de um áudio, é possível utilizar a seguinte função em python:

Além disso, para fazer a transformação de um áudio stereo para um áudio mono, podemos usar a seguinte função:

Solicitações assíncronas

Agora que nosso áudio já se encontra no formato certo e já sabemos todas as suas características, podemos seguir para o processo de fazer uma solicitação.

Para fazer a solicitação de reconhecimento de fala, seja síncrona ou assíncrona, é necessário fornecer uma configuração para os dados de áudio. Essa configuração deve cobrir as seguintes características:

  • encoding (obrigatório) — esse parâmetro especifica o esquema de codificação de áudio. No nosso caso, iremos utilizar a Linear16.
  • sampleRateHertz (obrigatório) — Especifica a taxa de amostragem do nosso áudio. Vamos utilizar a função fornecida acima para calcular esse valor.
  • languageCode (obrigatório) — contém o idioma+região a ser usado para o reconhecimento de fala do áudio. Os idiomas compatíveis podem ser encontrados nessa lista. Utilizaremos ‘pt-BR’ para as nossas solicitações.
  • maxAlternatives (opcional, padrão = 1) — quando utilizamos a API, a resposta final que ela nos fornece é aquela que possui o maior índice de confiança. Entretanto, pode ser interessante verificar algumas outras transcrições possíveis e esse parâmetro lida justamente com isso. Indica o número de transcrições alternativas a serem fornecidas na resposta.
  • profanityFilter (opcional) — indica se deve filtrar palavras ou frases obscenas. As palavras filtradas contêm a primeira letra e asteriscos no lugar dos caracteres restantes (por exemplo, f***). Note que essa função filtra palavras isoladas e não consegue detectar discursos de ódio.
  • speechContext (opcional) — contém mais informações contextuais para processar este áudio. Um contexto contém o subcampo phrases que contém uma lista de palavras e frases que mostram dicas para a tarefa de reconhecimento de fala.

Configuração de áudio

Também precisamos passar as configurações de áudio, através do parâmetro audio do tipo RecognitionAudio. Esse campo pode possuir um de dois subcampos:

  • content — contém o áudio a ser avaliado, incorporado à solicitação. O áudio passado diretamente neste campo é limitado a um minuto de duração.
  • uri — contém um URI que aponta para o conteúdo de áudio. Atualmente, esse campo precisa conter um URI do Google Cloud Storage (de formato gs://bucket-name/path_to_audio_file). Aqui podemos processar áudios mais longos e é justamente nesse que vamos focar nossa atenção.

O passo-a-passo

Como dito anteriormente nesse texto, iremos utilizar a API no modo de reconhecimento assíncrono, para transcrever áudios longos. Para tal, precisaremos utilizar buckets.

Primeiro, para a transcrição de áudios longos, a API pede que tenhamos um bucket. Dessa forma, o primeiro passo para a transcrição de áudios é criar um bucket. Para tal, basta acessar a seu cloud storage e selecionar a opção create bucket. Você pode escolher a região que preferir para criação do bucket, mas sugiro que na opção de tipo de armazenamento, você escolha a standard (padrão). Lembre-se que o nome do bucket é único dentre todos os projetos da GCP!

Basta clickar em Create bucket na página de Cloud Storage e configurar o bucket da melhor forma para seus propósitos

Feito isso, você precisará criar uma conta de serviço com permissões para gerenciar o bucket que você acabou de criar. Para tal, basta seguir as instruções deste link.

Antes de iniciar o código, os imports que necessários serão:

Também é util definir algumas funções para fazer operações de upload e exclusão de blobs dos nossos buckets:

Para upload
Para deletar

Finalmente, vamos para a função que faz o trabalho duro, e chama a API, com todas as configurações:

Por fim, podemos escrever essa transcrição num arquivo local! Para isso, podemos utilizar a seguinte função:

E pronto! Temos tudo que precisamos para fazer uma solicitação assíncrona de áudio e guardar sua transcrição localmente! Basta chamar a função!

Espero que tenham aprendido um pouquinho sobre como utilizar a API de Speech-to-text do Google nesse texto. Ela é uma ferramenta poderosíssima e aqui abordei apenas a pontinha do iceberg! O time de IA e dados da Kompa Saúde está sempre em busca de trazer novos conhecimentos para aqueles interessados, então fique de olho que sempre tem novidade por aqui!

Se você gostou do texto não esqueça de dar claps e compartilhar com seus amigos e se não gostou, compartilhe com seus inimigos! Nos siga para ficar sabendo de primeira mão quando postarmos textos novos e tenha um ótimo dia!!

Referências

--

--