|
import PyPDF2 |
|
from gtts import gTTS |
|
import gradio as gr |
|
import tempfile |
|
import os |
|
|
|
|
|
dir_path = '/tmp/gradio/' |
|
|
|
|
|
if not os.path.exists(dir_path): |
|
try: |
|
|
|
os.makedirs(dir_path) |
|
except Exception as e: |
|
print(f"No se pudo crear el directorio {dir_path}: {e}") |
|
|
|
def convert_pdf_page_to_audio(pdf_file, page_number): |
|
try: |
|
|
|
with tempfile.NamedTemporaryFile(delete=False, suffix='.pdf') as temp_pdf_file: |
|
temp_pdf_file.write(pdf_file.read()) |
|
pdf_file_path = temp_pdf_file.name |
|
|
|
reader = PyPDF2.PdfReader(pdf_file_path) |
|
page_number = int(page_number) |
|
if page_number < 0 or page_number >= len(reader.pages): |
|
os.remove(pdf_file_path) |
|
return None, "Número de página inválido." |
|
|
|
text = reader.pages[page_number].extract_text() |
|
if not text: |
|
os.remove(pdf_file_path) |
|
return None, "No se pudo extraer texto de la página." |
|
|
|
|
|
with tempfile.NamedTemporaryFile(delete=False, suffix='.mp3') as temp_audio_file: |
|
tts = gTTS(text=text, lang='es') |
|
tts.save(temp_audio_file.name) |
|
audio_file_path = temp_audio_file.name |
|
|
|
|
|
with open(audio_file_path, 'rb') as audio_file: |
|
audio_data = audio_file.read() |
|
|
|
|
|
os.remove(pdf_file_path) |
|
os.remove(audio_file_path) |
|
|
|
return audio_data |
|
|
|
except Exception as e: |
|
print(f"Error: {str(e)}") |
|
return None, "Se produjo un error al procesar el archivo." |
|
|
|
|
|
iface = gr.Interface( |
|
fn=convert_pdf_page_to_audio, |
|
inputs=[gr.File(type="filepath"), gr.Number(label="Número de Página")], |
|
outputs=gr.Audio(type="numpy"), |
|
title="Conversor de PDF a Audiobook", |
|
description="Sube un archivo PDF y selecciona la página que deseas escuchar como audio." |
|
) |
|
|
|
iface.launch() |
|
|