# Biblioteca
import os
import PyPDF2
# ---------------------------------------------
# Leitura do PDF
# ---------------------------------------------
# Caminho para o arquivo PDF
= os.getcwd() # define o diretório atual
diretorio = "texto_teste" # arquivo para leitura
arquivo_pdf = f'{diretorio}/{arquivo_pdf}.pdf'
arquivo
# Abrir o arquivo em PDF
file = open(arquivo, 'rb') # abrir arquivo binário
= PyPDF2.PdfReader(file) # fazer a leitura do documento
readpdf # readpdf.metadata # metadados
# Percorre cada página do PDF
for pagenumber in range(len(readpdf.pages)):
# Extrai o texto da página especificada
= readpdf.pages[pagenumber]
page = page.extract_text() text
Convertendo PDF para áudio
Experimentei dois métodos de conversão de arquivos PDF para áudio e comparei a qualidade do resultado.
Convertendo PDF para áudio!
Transformei um documento PDF sobre o lonomismo na América do Sul (aqui) para áudio.
Primeiramente, o texto foi extraído do PDF utilizando a biblioteca PyPDF2
.
Em seguida, realizei a conversão do texto para áudio utilizando duas bibliotecas: pyttsx3
e gTTS (Google Text-to-Speech)
.
Por fim, avaliei qual dessas bibliotecas produziu o áudio mais natural e de melhor qualidade. Para isso, criei uma função chamada play_first_5_seconds
para ouvir os primeiros 5 segundos de cada áudio gerado e realizar a comparação.
Pré-requisitos
Antes de executar o script, certifique-se de que seu sistema possui os seguintes pacotes e bibliotecas instalados:
# Atualização do sistema
sudo apt-get update
# ferramenta de síntese de fala // utilizada pelo pyttsx3 para converter texto em fala
sudo apt-get install espeak
# ferramenta para manipulação de arquivos multimídia, necessária para o processamento de áudio
sudo apt-get install ffmpeg
# conjunto de ferramentas necessárias para o gerenciamento de áudio no Linux
sudo apt-get install alsa-utils
# necessários para garantir que o áudio funcione corretamente no Jupyter Notebook
sudo apt-get install alsa-base pulseaudio
Necessário instalar as bibliotecas Python:
# PyPDF2 é uma biblioteca Python puro usada para extração e manipulação de conteúdo PDF.
pip install PyPDF2
# pyttsx3 é uma biblioteca de conversão de texto em fala (TTS) que funciona offline. É capaz de converter o texto em fala em diferentes vozes disponíveis no sistema.
pip install pyttsx3
# pydub é uma biblioteca simples e fácil de usar que permite manipular áudio com uma interface simples e direta ao Python. Pode ser usado para cortar, dividir ou concatenar arquivos de áudio.
pip install pydub
# gTTS (Google Text-to-Speech) é um módulo Python que interfaceia com o serviço Google Translate para a tradução textual e pode ser usado para converter texto em fala.
pip install gTTs
Extrair as informações do PDF
Exemplo de conteúdo em page
e text
:
page
{'/Type': '/Page',
'/Parent': {'/Type': '/Pages',
'/Kids': [IndirectObject(3, 0, 140012445783408),
IndirectObject(5, 0, 140012445783408)],
'/Count': 2,
'/MediaBox': [0, 0, 595.28, 841.89]},
'/Resources': {'/ProcSet': ['/PDF', '/Text', '/ImageB', '/ImageC', '/ImageI'],
'/Font': {'/F1': {'/Type': '/Font',
'/BaseFont': '/Helvetica-Bold',
'/Subtype': '/Type1',
'/Encoding': '/WinAnsiEncoding'},
'/F2': {'/Type': '/Font',
'/BaseFont': '/Helvetica',
'/Subtype': '/Type1',
'/Encoding': '/WinAnsiEncoding'}},
'/XObject': {}},
'/Contents': {'/Filter': '/FlateDecode'},
'/MediaBox': [0, 0, 595.28, 841.89]}
text
'Lonomismo na América do Sul\nterapia intensiva para os casos mais graves.\nPesquisas científicas sobre o veneno de Lonomia têm revelado uma complexa mistura de toxinas\ncom atividades procoagulantes e anticoagulantes. Esses estudos são essenciais para o\ndesenvolvimento de novos tratamentos e para o entendimento dos mecanismos de ação do\nveneno. Além disso, a biologia e ecologia das larvas de Lonomia são áreas de grande interesse\npara os cientistas, visando estratégias de controle e prevenção de acidentes.\nEm resumo, o lonomismo é uma síndrome hemorrágica séria e potencialmente fatal, causada pelo\ncontato com as larvas de Lonomia. A conscientização, prevenção e tratamento adequado são\nfundamentais para a redução dos impactos dessa condição na América do Sul.'
Criar o áudio para leitura
Método 1: pyttsx3
A biblioteca pyttsx3 é uma biblioteca Text-to-Speech (Texto para Fala) multiplataforma para Python, que funciona tanto offline quanto online. Ela suporta vários motores de fala, incluindo SAPI5, nsss e espeak, cada um com suas próprias vantagens, como controle sobre a voz, volume, velocidade da fala e tom. Uma de suas características mais notáveis é o suporte para alteração da voz e propriedades da fala no meio do discurso. Além disso, a pyttsx3 também permite que os usuários salvem o resultado da conversão de texto em voz como um arquivo .wav ou .mp3, fornecendo flexibilidade para várias aplicações. A biblioteca é fácil de usar e fornece um alto grau de personalização, tornando-a uma escolha popular entre os desenvolvedores que precisam de funcionalidades de texto para fala em seus projetos.
# ---------------------------------------------
# Configurar o áudio
# ---------------------------------------------
import pyttsx3 # Biblioteca para áudiobook
# Iniciar o motor de fala pyttsx3 e armazenar na variável 'speaker'
= pyttsx3.init()
speaker
# Obter a propriedade 'rate' (velocidade da fala) do 'speaker'
= speaker.getProperty('rate')
rate
# Ajustar a velocidade da fala do 'speaker' para 200
'rate', 150)
speaker.setProperty(
# Obter a propriedade 'volume' do 'speaker'
= speaker.getProperty('volume')
volume
# Ajustar o volume da fala do 'speaker' para 1 (o máximo)
'volume', 1) speaker.setProperty(
# Criação de um objeto speaker/falante com pyttsx3.init(), que inicializa o motor de fala.
= pyttsx3.init()
speaker
# Obtenção de todas as vozes disponíveis. O método speaker.getProperty('voices') retorna uma lista de vozes disponíveis.
= speaker.getProperty('voices')
voices
# Percorre a lista de vozes obtidas anteriormente.
for voice in voices:
# Verifica se contém "brazil" ou "portuguese" no nome da voz.
# Se for verdadeiro, seleciona a voz correspondente.
if "brazil" in voice.name.lower() or "portuguese" in voice.name.lower():
# Define essa voz como a voz padrão do falante.
'voice', voice.id)
speaker.setProperty(break # Sai do loop uma vez que a voz correta é encontrada.
# Salvar o texto em um arquivo de áudio
'teste_pyttsx3.mp3')
speaker.save_to_file(text,
speaker.runAndWait()
# Stop the speaker
speaker.stop()
Método 2: gTTS
A biblioteca gTTS (Google Text-to-Speech), é uma interface para o serviço de Texto para Fala do Google Translate. Ela permite que os desenvolvedores convertam texto em fala em mais de 100 idiomas e variantes. Com a capacidade de ajustar a velocidade de leitura, a preempção e a ênfase do discurso, a biblioteca gTTS é uma poderosa ferramenta para tornar aplicativos e sites mais acessíveis. Além disso, a biblioteca gTTS suporta a criação de arquivos de áudio mp3 ou wav a partir da saída de texto para voz, tornando-a versátil para vários tipos de projetos que requerem conversão de texto em voz.
from gtts import gTTS
# Crie um objeto gTTS
= gTTS(text=text, lang='pt-br')
tts
# Salve o arquivo de saída
"teste_gtts.mp3") tts.save(
Comparar os áudios
from pydub import AudioSegment
from IPython.display import Audio
def play_first_5_seconds(file):
"""
Carrega um arquivo de áudio, corta os primeiros 5 segundos e reproduz o segmento de áudio resultante.
Args:
file (str): O caminho para o arquivo de áudio que será carregado. O arquivo deve estar em um formato compatível
com a biblioteca pyDub (wav, mp3, ogg, flv, aac, m4a, webm, etc.).
Returns:
IPython.lib.display.Audio: Um objeto de áudio que pode ser reproduzido em um Jupyter Notebook. O objeto de áudio contém
os primeiros 5 segundos do arquivo de entrada.
"""
# Carregar o audio
= AudioSegment.from_file(file)
audio
# Cortar os primeiros 5 segundos
= audio[:5000] # PyDub trabalha em milissegundos
cut_audio
# Exportar o audio cortado
= "cut_" + file
cut_file format="mp3")
cut_audio.export(cut_file,
# Tocar o audio cortado
return Audio(cut_file)
"teste_pyttsx3.mp3") play_first_5_seconds(
"teste_gtts.mp3") play_first_5_seconds(
Citação
@online{melo_favalesso2024,
author = {Melo Favalesso, Marília},
title = {Convertendo PDF para áudio},
version = {1},
date = {2024-07-25},
url = {http://www.mariliafavalesso.com},
langid = {pt-br}
}