Quem nunca se sentiu cansado de intermináveis reuniões e palestras que resultam em montanhas de notas e nos desconcentram do essencial? Felizmente, existe uma solução simples para isso que pode ser alcançada em poucas linhas de código com Python. Essa solução é a criação de um aplicativo de transcrição de áudio alimentado por IA, que pode ser calibrado sob medida para o seu fluxo de trabalho. Nosso app para transcrição de áudio será construído com Streamlit, o que possibilitará seu compartilhamento fácil como um aplicativo web.
Um app de transcrição de áudio possibilita a captura sem esforço de entrevistas, palestras ou reuniões, sem perder nada. Ele também permite redirecionar conteúdos de áudios para postagens de blog e artigos. Com o auxílio do Python, a transcrição de áudio facilita a criação de arquivos pesquisáveis, acessíveis a qualquer hora e em qualquer lugar.
Bibliotecas Python Necessárias
Usaremos as seguintes bibliotecas: pydub, SpeechRecognition e Streamlit. A biblioteca Streamlit já foi discutida em inúmeras postagens anteriores (aqui, aqui, aqui e aqui).
Pydub é uma biblioteca Python que permite trabalhar com arquivos de áudio de forma fácil e eficiente.
A biblioteca SpeechRecognition é uma ferramenta poderosa e fácil de usar que utiliza tecnologias de IA para converter áudio falado em texto escrito (leia mais aqui). Sua tecnologia se baseia em dois componentes principais de IA: mecanismos de reconhecimento de fala e modelos acústicos. Mecanismos de reconhecimento de fala empregam algoritmos sofisticados treinados em conjuntos de dados massivos de linguagem falada e textos correspondentes. Modelos acústicos capturam as características acústicas de diferentes fonemas e palavras, auxiliando a IA a distinguir entre sons semelhantes e variações na pronúncia.
As bibliotecas pydub e SpeechRecognition são comumente usadas na criação de assistentes pessoais com Python.
Para instalá-las, é fortemente recomendável utilizar um ambiente virtual. Para instalar com pip:
pip install pydub
pip install SpeechRecognition
pip install streamlit
Para quem prefere fazer as instalações com conda:
conda install conda-forge::pydub
conda install conda-forge::speechrecognition
conda install conda-forge::streamlit
Aplicativo Python para Transcrição de Áudio
Iniciaremos nosso código com a transcrição de áudio e depois criaremos a interface de usuários com Streamlit. O primeiro passo é fazer as importações necessárias num arquivo Python que pode se chamar app.py. Em seguida, iniciamos a classe Recognizer da biblioteca SpeechRecognition (linha 9). Copie o trecho abaixo.
from pydub import AudioSegment
import speech_recognition as sr
import streamlit as st
import time
r = sr.Recognizer()
Nosso app receberá dois tipos de arquivos de áudio: arquivos wav e mp3. Mas, para fazer a transcrição, é necessário que o arquivo esteja no formato wav. Nossa primeira função, mostrada abaixo, converte arquivos mp3 para esse formato.
def convert_audio(file, nome_arquivo):
'''converte arquivo .mp3 em .wav'''
sound = AudioSegment.from_mp3(file)
new_file = sound.export(nome_arquivo[:-4]+".wav", format="wav")
return new_file
No trecho acima, a função apenas carrega o arquivo de áudio e depois faz a conversão do arquivo mp3 para wav com a biblioteca pydub (linha 4).
Transcrição de áudio
Em seguida, definimos uma função para realizar a transcrição. Ela é bem simples e consiste basicamente no uso do método Recognizer da biblioteca SpeechRecognition e na criação de um arquivo de texto. Note que estamos usando a função recognize_google() que faz transcrições em diversas línguas.
def transcreve_audio(audio):
'''transcreve áudio'''
with sr.AudioFile(audio) as source:
# carrega áudio
audio_data = r.record(source)
# converte para texto
texto = r.recognize_google(audio_data)
with open('texto.txt', 'w') as f:
f.write(texto)
return texto
Interface de usuário com Streamlit
O próximo passo é criar uma interface de usuário com Streamlit. Primeiro adicionamos um título.
st.title("Aplicativo Python para Transcrições de Áudios")
Em seguida, criamos uma função para receber os arquivos de áudio. Como mencionado antes, ela aceitará uploads de arquivos wav ou mp3. Se o arquivo for mp3, é preciso chamar a função convert_audio() para realizar a conversão para wav.
def create_upload_file():
'''Recebe uploads de arquivos mp3 ou wav'''
uploaded_file = st.file_uploader("Selecione um áudio", type=["wav", "mp3"])
if uploaded_file:
nome_arquivo = uploaded_file.name
if nome_arquivo[-3:] == 'mp3':
uploaded_file = convert_audio(uploaded_file, nome_arquivo)
return uploaded_file
Nossa próxima função se chama main() e é responsável por chamar a função anterior e a função de transcrição. Como a transcrição pode ser lenta, adicionamos um spinner para deixar o usuário saber que a transcrição está sendo realizada.
def main():
'''Chama funções de upload e de transcrição'''
uploaded_file = create_upload_file()
if uploaded_file is not None:
with st.spinner('Transcrevendo, isso pode demorar...'):
texto = transcreve_audio(uploaded_file)
time.sleep(1)
st.subheader('Sua transcrição está pronta')
time.sleep(2)
st.write(texto)
main()
Após a transcrição terminar, nossa função mostra o texto gerado diretamente numa área de texto do app (linha 10). Não esqueça de chamar a função main() logo abaixo de sua definição como mostrado no trecho acima (linha 11). Salve tudo e rode o app com o comando streamlit run app.py.
Customização
Nosso código já está pronto, mas ele pode ser melhorado. Nessa sessão, adicionaremos um pequeno trecho de css para customizar nosso app. Crie um arquivo e o nomeie como style.css. Ele precisa estar na mesma pasta do arquivo app.py.
A customização que faremos é simples. Ela seleciona todos os elementos de texto do corpo do HTML do nosso app e define uma fonte, seu tamanho, cor e intensidade. No arquivo style.css, copie o código abaixo e faça seu salvamento.
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@100&display=swap');
html, body [class*="css"] {
font-family: 'Roboto', sans-serif;
font-size: 18px;
font-weight: 500;
color: #091747;
}
No topo do arquivo do app (app.py), logo após importar as bibliotecas, insira o seguinte trecho:
with open( "style.css" ) as css:
st.markdown( f'' , unsafe_allow_html= True)
Conclusões
Neste post, fizemos mais um app com Streamlit, dessa vez para transcrição de áudio. Streamlit é fácil de ser usado e é uma opção bem interessante para criar protótipos e apps pequenos. Para fazer a implantação completa desse app, veja algumas instruções aqui. Para conhecer melhor como usar css para customizar seus códigos, clique aqui.
Veja uma imagem do nosso app abaixo. Note que, como usamos a biblioteca SpeechRecognition com google_recognizer(), nosso app pode transcrever textos em português, inglês e diversas outras línguas.