Andrey0206's picture
Update app.py
bb25bde verified
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()