Spaces:
Build error
Build error
app.py
CHANGED
|
@@ -27,7 +27,7 @@ def crear_pdf_con_texto_incrustado(pdf_original, archivo_salida, idioma="spa"):
|
|
| 27 |
comando = f"ocrmypdf -l {idioma} --force-ocr --deskew --output-type pdf {shlex.quote(pdf_original)} {shlex.quote(archivo_salida)}"
|
| 28 |
ejecutar_comando(comando)
|
| 29 |
except RuntimeError as e:
|
| 30 |
-
raise gr.Error(
|
| 31 |
|
| 32 |
def leer_pdf(pdf_path):
|
| 33 |
"""Extrae texto de un archivo PDF."""
|
|
@@ -38,6 +38,7 @@ def leer_pdf(pdf_path):
|
|
| 38 |
texto += pagina.extract_text() + "\n"
|
| 39 |
return texto.strip() or "No se pudo extraer texto del PDF."
|
| 40 |
except Exception as e:
|
|
|
|
| 41 |
return f"Error al leer el PDF: {e}"
|
| 42 |
|
| 43 |
def flujo_principal(pdf_file, idioma="spa"):
|
|
@@ -56,16 +57,15 @@ def flujo_principal(pdf_file, idioma="spa"):
|
|
| 56 |
texto_original = leer_pdf(input_pdf)
|
| 57 |
|
| 58 |
try:
|
|
|
|
| 59 |
crear_pdf_con_texto_incrustado(input_pdf, output_pdf, idioma)
|
| 60 |
texto_ocr = leer_pdf(output_pdf)
|
| 61 |
return gr.File(input_pdf, label="PDF Original"), texto_original, gr.File(output_pdf, label="PDF con OCR"), texto_ocr
|
| 62 |
except gr.Error as e:
|
| 63 |
-
|
| 64 |
-
os.remove(input_pdf)
|
| 65 |
-
if os.path.exists(output_pdf):
|
| 66 |
-
os.remove(output_pdf)
|
| 67 |
raise e
|
| 68 |
finally:
|
|
|
|
| 69 |
if os.path.exists(input_pdf):
|
| 70 |
os.remove(input_pdf)
|
| 71 |
if os.path.exists(output_pdf):
|
|
@@ -74,20 +74,28 @@ def flujo_principal(pdf_file, idioma="spa"):
|
|
| 74 |
# Interfaz Gradio
|
| 75 |
with gr.Blocks() as interfaz:
|
| 76 |
gr.Markdown("## Procesador OCR para PDFs")
|
|
|
|
|
|
|
| 77 |
with gr.Row():
|
| 78 |
archivo_pdf = gr.File(label="Sube tu archivo PDF", file_types=[".pdf"])
|
| 79 |
idioma_ocr = gr.Dropdown(["spa", "eng", "fra", "deu"], label="Idioma OCR", value="spa")
|
| 80 |
boton_procesar = gr.Button("Procesar OCR")
|
|
|
|
|
|
|
| 81 |
with gr.Row():
|
| 82 |
texto_original = gr.Textbox(label="Texto Original", lines=10, interactive=False)
|
| 83 |
texto_ocr = gr.Textbox(label="Texto con OCR", lines=10, interactive=False)
|
|
|
|
| 84 |
with gr.Row():
|
| 85 |
pdf_original_vista = gr.File(label="Descargar PDF Original", interactive=False)
|
| 86 |
pdf_ocr_vista = gr.File(label="Descargar PDF con OCR", interactive=False)
|
|
|
|
|
|
|
| 87 |
boton_procesar.click(
|
| 88 |
fn=flujo_principal,
|
| 89 |
inputs=[archivo_pdf, idioma_ocr],
|
| 90 |
outputs=[pdf_original_vista, texto_original, pdf_ocr_vista, texto_ocr]
|
| 91 |
)
|
| 92 |
|
| 93 |
-
|
|
|
|
|
|
| 27 |
comando = f"ocrmypdf -l {idioma} --force-ocr --deskew --output-type pdf {shlex.quote(pdf_original)} {shlex.quote(archivo_salida)}"
|
| 28 |
ejecutar_comando(comando)
|
| 29 |
except RuntimeError as e:
|
| 30 |
+
raise gr.Error(f"Error al procesar el archivo con OCR: {e}")
|
| 31 |
|
| 32 |
def leer_pdf(pdf_path):
|
| 33 |
"""Extrae texto de un archivo PDF."""
|
|
|
|
| 38 |
texto += pagina.extract_text() + "\n"
|
| 39 |
return texto.strip() or "No se pudo extraer texto del PDF."
|
| 40 |
except Exception as e:
|
| 41 |
+
logger.error(f"Error al leer el PDF: {e}")
|
| 42 |
return f"Error al leer el PDF: {e}"
|
| 43 |
|
| 44 |
def flujo_principal(pdf_file, idioma="spa"):
|
|
|
|
| 57 |
texto_original = leer_pdf(input_pdf)
|
| 58 |
|
| 59 |
try:
|
| 60 |
+
# Procesar con OCR
|
| 61 |
crear_pdf_con_texto_incrustado(input_pdf, output_pdf, idioma)
|
| 62 |
texto_ocr = leer_pdf(output_pdf)
|
| 63 |
return gr.File(input_pdf, label="PDF Original"), texto_original, gr.File(output_pdf, label="PDF con OCR"), texto_ocr
|
| 64 |
except gr.Error as e:
|
| 65 |
+
logger.error("Error durante el procesamiento del PDF.")
|
|
|
|
|
|
|
|
|
|
| 66 |
raise e
|
| 67 |
finally:
|
| 68 |
+
# Limpiar archivos temporales
|
| 69 |
if os.path.exists(input_pdf):
|
| 70 |
os.remove(input_pdf)
|
| 71 |
if os.path.exists(output_pdf):
|
|
|
|
| 74 |
# Interfaz Gradio
|
| 75 |
with gr.Blocks() as interfaz:
|
| 76 |
gr.Markdown("## Procesador OCR para PDFs")
|
| 77 |
+
|
| 78 |
+
# Carga de archivo y selecci贸n de idioma
|
| 79 |
with gr.Row():
|
| 80 |
archivo_pdf = gr.File(label="Sube tu archivo PDF", file_types=[".pdf"])
|
| 81 |
idioma_ocr = gr.Dropdown(["spa", "eng", "fra", "deu"], label="Idioma OCR", value="spa")
|
| 82 |
boton_procesar = gr.Button("Procesar OCR")
|
| 83 |
+
|
| 84 |
+
# Resultados del procesamiento
|
| 85 |
with gr.Row():
|
| 86 |
texto_original = gr.Textbox(label="Texto Original", lines=10, interactive=False)
|
| 87 |
texto_ocr = gr.Textbox(label="Texto con OCR", lines=10, interactive=False)
|
| 88 |
+
|
| 89 |
with gr.Row():
|
| 90 |
pdf_original_vista = gr.File(label="Descargar PDF Original", interactive=False)
|
| 91 |
pdf_ocr_vista = gr.File(label="Descargar PDF con OCR", interactive=False)
|
| 92 |
+
|
| 93 |
+
# Conectar la l贸gica con la interfaz
|
| 94 |
boton_procesar.click(
|
| 95 |
fn=flujo_principal,
|
| 96 |
inputs=[archivo_pdf, idioma_ocr],
|
| 97 |
outputs=[pdf_original_vista, texto_original, pdf_ocr_vista, texto_ocr]
|
| 98 |
)
|
| 99 |
|
| 100 |
+
if __name__ == "__main__":
|
| 101 |
+
interfaz.launch()
|