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