Fala galera do mundo dos dados! Já pensou em extrair texto de vídeo com Python? Sabia que o Python já tem algumas bibliotecas prontinhas para fazer essa mágica? Isso mesmo transcrever o vídeo em texto, pensa em pegar um arquivo mp4 e transformar ele num txt, quanta coisa dá para resolver. Desde criar a legenda de um filme, até em pesquisar a parte de um vídeo que contém alguma palavra. Então, hora de aprender a extrair texto de vídeo com Python. É muita coisa que dá para fazer ao transformar vídeo em texto.
Para essa atividade, faremos a extração de audio do vídeo e depois é só Reconhecimento de Voz com a Biblioteca SpeechRecognition Python, solução que já apresentamos aqui no Dados ao Cubo. Então partiu Python, começando a configurar o ambiente para extrair texto de um vídeo.
Para começar, faremos a configuração do ambiente com instalação de três bibliotecas. Confere o código de instalação abaixo através do gerenciador de pacotes do Python o pip.
pip install SpeechRecognition pip install moviepy pip install pydub
A biblioteca SpeechRecognition é para realização de reconhecimento de fala, com suporte para diversos engines e APIs, online e offline. Já a lib moviepy é para edição de vídeo: corte, concatenações, inserções de títulos, composição de vídeo, processamento de vídeo e criação de efeitos personalizados. E o pacote pydub é para manipulação de áudio com uma interface de alto nível simples e fácil. Finalizando a configuração inicial, podemos partir para o código Python.
Agora faremos a extração do texto de um vídeo. Para fazer essa transformação de um vídeo em um texto, precisamos de três etapas. A primeira é fazer uma conversão do arquivo MP4 em arquivo MP3, ou seja, converter um arquivo de vídeo em áudio apenas. A segunda etapa, é transformar o tipo do arquivo de áudio, dessa forma, vamos transformar o arquivo MP3 em um arquivo WAV. Esta segunda etapa, é necessária, pois é preciso que o arquivo de áudio esteja no formato WAV para que seja possível realizar a extração do texto. Enfim, a nossa terceira etapa, quer fazer a extração do texto do arquivo de áudio do tipo WAV. E para começar, importaremos as bibliotecas que instalamos na configuração do ambiente.
Abaixo o código Python, importando as bibliotecas e as funções que vamos utilizar, além das três bibliotecas configuradas no ambiente importaremos mais duas bibliotecas auxiliares. A tqdm para acompanhar a execução do loop for, e a os para as operações de deleção de arquivos.
import moviepy.editor as mp import speech_recognition as sr from pydub import AudioSegment from pydub.utils import make_chunks from tqdm import tqdm import os
Bibliotecas importadas, começaremos a construção do código.
Nesse ponto, criaremos algumas variáveis importantes, que utilizaremos ao longo da solução. A variável arquivo deve conter o nome do arquivo de vídeo, e a partir dela criaremos as demais variáveis que utilizaremos: mp4, mp3, wav e txt.
arquivo = 'RecommendLeads' mp4 = f'{arquivo}.mp4' mp3 = f'{arquivo}.mp3' wav = f'{arquivo}.wav' txt = f'{arquivo}.txt'
Seguimos após a criação das variáveis para converter o arquivo MP4 em MP3.
Para transformar o vídeo MP4 em um áudio MP3 as funções VideoFileClip e write_audiofile da biblioteca moviepy, conforme código Python abaixo.
clip = mp.VideoFileClip(mp4).subclip() clip.audio.write_audiofile(mp3)
Com o áudio no formato MP3, precisamos transformar em WAV.
A biblioteca pydub vai realizar a conversão do arquivo MPE em WAV através da função AudioSegment lendo o arquivo, utilizando o método export para gravar no novo formato. E para finalizar salvaremos o arquivo WAV na variável audio.
sound = AudioSegment.from_mp3(mp3) sound.export(wav, format='wav') audio = AudioSegment.from_file(wav, 'wav')
Agora que não utilizaremos mais a variável MP3, podemos excluir a mesma com a função remove da lib os.
try: os.remove(mp3) except: print('Arquivo não existe')
Com o formato correto, agora é preparar para extrair o texto.
Uma necessidade do algoritmo que extrai o texto do arquivo de áudio é ter pequenos arquivos de áudio. Então, a missão é dividir o arquivo em pequenas partes. Então, utilizaremos a biblioteca pydub com sua função make_chunks. Esta função realiza a divisão do arquivo de áudio em tamanhos iguais, que vai ser definido na variável tamanho e vai estar em milisegundos.
tamanho = 30000 partes = make_chunks (audio, tamanho) partes_audio =[] for i, parte in tqdm(enumerate(partes)): parte_name = 'audio{0}.wav'.format(i) partes_audio.append(parte_name) parte.export(parte_name, format='wav')
Já temos o arquivo WAV em partes, podemos excluir com a função remove da lib os.
try: os.remove(wav) except: print('Arquivo não existe')
Enfim, chegou a hora de extrair o texto do vídeo após todas as transformações que realizamos anteriormente.
Para extrair o texto, foi criada a função transcreve_audio. Ela recebe como parâmetro o nome do arquivo de áudio e retorna a variável texto, com a transcrição ou com erro apresentado. Ao final, podemos excluir o pedaço do áudio que foi transcrito com a função remove da lib os. Em detalhes técnicos, utilizaremos as funções Recognizer e record para ler o arquivo de áudio. Em seguida, a função recognize_google para fazer a transcrição do arquivo de áudio para texto. Veja o código Python abaixo.
def transcreve_audio(nome_audio): r = sr.Recognizer() with sr.AudioFile(nome_audio) as source: audio = r.record(source) try: texto = r.recognize_google(audio,language='pt-BR') print('Google Speech Recognition: ' + texto) except sr.UnknownValueError: texto = '' print('Google Speech Recognition NÃO ENTENDEU o audio') except sr.RequestError as e: texto = '' print('Erro ao solicitar resultados do Google Speech Recognition; {0}'.format(e)) finally: try: os.remove(nome_audio) except: print('Arquivo não existe') return texto
Para executar a função, criaremos uma string vazia com a variável texto, e um loop for para aplicar a função transcreve_audio em todas as partes que criamos do arquivo. A função tqdm mostra a execução do loop for com um log em tempo de execução.
texto = '' for parte in tqdm(partes_audio): texto = texto + ' ' + transcreve_audio(parte)
Chegou a hora de ver o resultado da nossa solução no arquivo de texto final.
Nesta etapa, criamos um arquivo de texto através da variável arq, com o nome declarado na variável criada no início do código. A função write é utilizada para escrever o conteúdo da variável texto. E então a função close fecha o arquivo salvo.
arq = open(txt,'w') arq.write(texto) arq.close()
Com o texto gravado no arquivo, chegamos ao fim de mais um conteúdo do Dados ao Cubo para você!
Portanto, vimos como transcrever o vídeo em texto. Neste passo a passo utilizamos o Python e fizemos a transformação do arquivo de vídeo algumas vezes até extrair o seu texto.
Então, espero que você tenha curtido o conteúdo. Além disso, não esqueça de mandar aquele feedback e compartilhar nosso conteúdo com a comunidade.
Se você curtiu o conteúdo, lá no Dados ao Cubo tem muito mais. Então, deixo algumas sugestões de conteúdos que você pode encontrar por lá, sempre falando sobre o mundo dos dados.
Então, finalizo com um convite para você ser Parceiro de Publicação Dados ao Cubo, escrever o próximo artigo e ter divulgação para toda a comunidade de dados no LinkedIn.
Apaixonado por dados e tecnologia ❤️ , criando soluções com dados 📊 📈 , desde 2015, sempre buscando tornar os processos orientados! Com formação em Engenharia da Computação 💾 , MBA Gestão da Informação e Business Intelligence e Especialização em Data Science.
Também atuo como professor na área de dados. Nas horas vagas crio modelos de Machine Learning 🤖 com Python em desafios do Kaggle e escrevo no Dados ao Cubo sobre o mundo dos dados 🎲 !
Compartilhando conhecimentos sempre 🚀
Fala Galera do mundo dos dados, hora de manipular dados no MongoDB com Python. Dessa…
Fala Galera do mundo dos dados, hora de manipular dados no Cassandra com Python. Dessa…
Fala galera do mundo dos dados, hoje é dia de aprender a função Select do Spark.…
Fala galera do mundo dos dados, hoje é dia de transformar consultas SQL em visualizações…
Fala galera do mundo dos dados, dando continuidade às consultas de banco de dados com…
Fala galera do mundo dos dados, hora de conhecer os bancos de dados NoSQL com…
View Comments
Copiei o codio certinho e esta dando erro. Nessa parte:
for i, parte in tqdm(enumerate(partes)):
parte_name = 'audio{0}.wav'.format(i)
partes_audio.append(parte_name)
parte.export(parte_name, format='wav')
try:
os.remove(wav)
except:
print('Arquivo não existe')
Verifique se você tem instalado a ferramenta de conversão e processamento de vídeo ffmpeg, estava com erro exatamente nesse trecho, mas foi só instalar essa ferramenta e funcionou!