Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from PIL import Image, ImageDraw | |
| import easyocr | |
| import io | |
| # =============================== | |
| # 🔹 CONFIGURACIÓN INICIAL | |
| # =============================== | |
| reader = easyocr.Reader(['en', 'es'], gpu=False) | |
| # =============================== | |
| # 🔹 FUNCIONES PRINCIPALES | |
| # =============================== | |
| def ocr_process(image, task): | |
| if image is None: | |
| return "Por favor carga una imagen primero.", None | |
| results = reader.readtext(image) | |
| extracted_text = "\n".join([r[1] for r in results]) | |
| # --- Tipos de tareas --- | |
| if task == "Extrae el texto de una imagen": | |
| return extracted_text, None | |
| elif task == "Devuelve el texto en formato Markdown": | |
| markdown_text = "## Texto Detectado\n" + "\n".join([f"- {r[1]}" for r in results]) | |
| return markdown_text, None | |
| elif task == "Dibuja cajas delimitadoras (visión por computador)": | |
| img_draw = image.copy() | |
| draw = ImageDraw.Draw(img_draw) | |
| for (bbox, text, conf) in results: | |
| draw.rectangle(bbox, outline="red", width=2) | |
| return "Se han dibujado las cajas delimitadoras.", img_draw | |
| elif task == "Resume o explica el contenido (tablas, gráficos, texto)": | |
| summary = ( | |
| f"🧠 He detectado {len(results)} fragmentos de texto. " | |
| "Parece ser un documento o imagen informativa. " | |
| "Podrías usar un modelo LLM en el futuro para resumirlo con más contexto." | |
| ) | |
| return summary, None | |
| else: | |
| return "Tipo de tarea no reconocido.", None | |
| # =============================== | |
| # 🔹 INTERFAZ GRADIO | |
| # =============================== | |
| with gr.Blocks(title="🧠 Demo DeepSeek OCR", theme=gr.themes.Soft()) as demo: | |
| # --- Header / Bienvenida --- | |
| gr.Markdown( | |
| """ | |
| <div style="text-align: center;"> | |
| <h1>🧠 Demo DeepSeek OCR</h1> | |
| <h3>Versión ligera desarrollada por <b>Andrey Beltrán</b></h3> | |
| <p>✨ Esta versión DEMO utiliza <b>EasyOCR</b> para el reconocimiento de texto en imágenes.<br> | |
| Ideal para exploración y pruebas sin GPU.</p> | |
| </div> | |
| """ | |
| ) | |
| with gr.Accordion("📘 ¿Para qué sirve esta demo?", open=True): | |
| gr.Markdown( | |
| """ | |
| Esta demostración te permite realizar tareas de procesamiento visual y textual: | |
| - 📝 Extraer texto con alta precisión. | |
| - 🧾 Convertir el texto a formato Markdown. | |
| - 🧠 Analizar o resumir el contenido de una imagen. | |
| - 🟥 Dibujar cajas delimitadoras para visión por computador. | |
| """ | |
| ) | |
| gr.Markdown("<hr>") | |
| # --- Controles principales --- | |
| with gr.Row(): | |
| with gr.Column(scale=1): | |
| gr.Markdown("### ⚙️ Configuración de la tarea") | |
| task_type = gr.Dropdown( | |
| label="Selecciona el tipo de tarea", | |
| choices=[ | |
| "Extrae el texto de una imagen", | |
| "Devuelve el texto en formato Markdown", | |
| "Dibuja cajas delimitadoras (visión por computador)", | |
| "Resume o explica el contenido (tablas, gráficos, texto)" | |
| ], | |
| value="Extrae el texto de una imagen" | |
| ) | |
| image_input = gr.Image( | |
| type="pil", | |
| label="📸 Carga una imagen", | |
| height=250, | |
| elem_id="input-image" | |
| ) | |
| submit_btn = gr.Button("🚀 Procesar imagen", variant="primary") | |
| with gr.Column(scale=2): | |
| gr.Markdown("### 📄 Resultado del procesamiento") | |
| output_text = gr.Textbox(label="Texto procesado", lines=10, show_copy_button=True) | |
| output_image = gr.Image(label="🖼️ Imagen procesada (si aplica)", type="pil", height=250) | |
| submit_btn.click(fn=ocr_process, inputs=[image_input, task_type], outputs=[output_text, output_image]) | |
| gr.Markdown("<hr>") | |
| gr.Markdown( | |
| """ | |
| <div style="text-align: center;"> | |
| <h4>🙏 Gracias por utilizar esta demostración</h4> | |
| <p>Desarrollado con ❤️ por <b>Andrey Beltrán</b> — Explorando el poder de la IA abierta.</p> | |
| </div> | |
| """ | |
| ) | |
| # Ejecutar demo | |
| if __name__ == "__main__": | |
| demo.launch() | |