Machine Learning Python 2

Extrair Texto de Vídeo com Python

extrair_texto_de_video

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.

Configurar Ambiente para Extrair Texto de Vídeo com Python

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.

Extrair Texto de Vídeo ao Cubo

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. 

Importar Bibliotecas Python

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. 

Criar Variáveis

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.

Transformar 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.

Converter MP3 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.

Dividir Áudio em Partes

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.

Extrair Texto

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.

Gerar Arquivo de Texto

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ê!

Extrair Texto de Vídeo com Python ao Cubo

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.

Conteúdos ao Cubo

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.

Gostou? Compartilhe!

2 Comments

  • Reply
    Igor Costa
    25 de julho de 2023

    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’)

  • Reply
    Leo Bezerra
    19 de outubro de 2023

    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!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *