Spaces:
Sleeping
Sleeping
File size: 2,411 Bytes
eec7f0a e642214 eec7f0a e642214 eec7f0a e642214 eec7f0a e642214 eec7f0a e642214 eec7f0a e642214 eec7f0a e642214 eec7f0a e642214 eec7f0a e642214 eec7f0a e642214 eec7f0a e642214 eec7f0a e642214 eec7f0a e642214 eec7f0a e642214 45b9d3b e642214 45b9d3b e642214 eec7f0a e642214 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
import gradio as gr
import subprocess
import logging
import tempfile
import os
# Configurar logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def ejecutar_comando(comando, mensaje_exito="", mensaje_error=""):
"""Ejecuta un comando de shell y maneja errores."""
try:
resultado = subprocess.run(comando, shell=True, check=True, capture_output=True, text=True)
if mensaje_exito:
logging.info(f"{mensaje_exito}. Salida:\n{resultado.stdout}")
return resultado.stdout
except subprocess.CalledProcessError as e:
error_message = f"{mensaje_error}. Error: {e}\nSalida de error:\n{e.stderr}"
logging.error(error_message)
raise RuntimeError(error_message)
def procesar_pdf_con_ocr(pdf_subido, idioma="spa"):
"""Procesa un PDF subido con OCR y devuelve la ruta del archivo procesado."""
if not pdf_subido:
raise gr.Error("No se subió ningún archivo.")
try:
input_pdf = pdf_subido.name
output_pdf = tempfile.NamedTemporaryFile(delete=False, suffix=".pdf").name
ejecutar_comando(
f"ocrmypdf -l {idioma} --force-ocr --deskew --output-type pdf {input_pdf} {output_pdf}",
mensaje_exito="OCR completado",
mensaje_error="Error en OCR"
)
return output_pdf # Ruta del archivo procesado
except Exception as e:
logging.error(f"Error al procesar el PDF: {e}")
raise gr.Error(f"Ocurrió un error al procesar el archivo: {e}")
# Interfaz Gradio
def interfaz_ocr():
"""Crea la interfaz Gradio para el flujo de OCR."""
with gr.Blocks() as app:
gr.Markdown("## Procesador de PDFs con OCR")
archivo_pdf = gr.File(label="Sube tu archivo PDF")
idioma_ocr = gr.Dropdown(["spa", "eng", "fra", "deu"], label="Idioma OCR", value="spa")
boton_procesar = gr.Button("Procesar")
salida_descarga = gr.File(label="Descargar PDF Procesado")
def procesar_y_descargar(pdf_file, idioma):
"""Procesa el PDF subido y lo devuelve para descarga."""
return procesar_pdf_con_ocr(pdf_file, idioma)
boton_procesar.click(
fn=procesar_y_descargar,
inputs=[archivo_pdf, idioma_ocr],
outputs=[salida_descarga],
)
return app
if __name__ == "__main__":
interfaz_ocr().launch()
|