Gradio es una biblioteca de código abierto que permite crear interfaces web interactivas para demostrar y probar modelos de aprendizaje automático o profundas redes neuronales con muy pocas líneas de código. Ofrece funcionalidades como compartir aplicaciones mediante enlaces públicos o en redes privadas sin necesidad de configuración compleja.
Características principales de Gradio
- Creación de interfaces interactivas: Basta con definir una función que represente su modelo o aplicación. Gradio genera automáticamente una interfaz de usuario donde los usuarios pueden introducir datos y visualizar los resultados.
- Compatibilidad con múltiples tipos de E/S: Soporta texto, imágenes, audio, video y otros formatos. Usted puede definir fácilmente los componentes de entrada y salida deseados.
- Personalización del diseño: Ofrece temas, fuentes y paletas de colores para adaptar la apariencia de la aplicación.
- Integración con modelos preentrenados: Permite utilizar modelos existentes de machine learning o deep learning y conectarlos con su conjunto de datos o aplicación.
- Construcción de aplicaciones complejas: Posibilidad de combinar múltiples modelos o funcionalidades en una sola aplicación interactiva.
- Despliegue flexible: Las aplicaciones pueden ejecutarse localmente, compartirse públicamente mediante un enlace o implementarse en servidores web.
Casos de uso comunes
- Demostración y prueba de modelos: Ideal para mostrar el funcionamiento de un modelo a colegas o clientes a través de una interfaz web interactiva.
- Recopilación y etiquetado de datos: Permite crear herramientas para que usuarios no técnicos puedan etiquetar datos de forma visual y sencilla.
- Validación y ajuste de modelos: Facilita la iteración rápida al permitir probar el modelo con diferentes parámetros y ver los resultados en tiempo real.
- Educación y formación: Se puede usar para crear herramientas didácticas que expliquen conceptos de machine learning de forma interactiva.
- Prototipado de productos: Permite convertir rápidamente un modelo en un prototipo de producto funcional para validar ideas.
- Investigación: Útil para crear plataformas de experimentación donde se puedan probar nuevos algoritmos de forma colaborativa.
Instalación y configuración básica
Gradio requiere Python 3.7 o superior. Se puede instalar mediante pip:
pip install gradio
# Para una instalación más rápida usando un espejo:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gradio
Ejemplo rápido
A continuación, se muestra un ejemplo básico de una aplicación que saluda al usuario:
import gradio as gr
def generar_saludo(nombre):
return f"Hola {nombre}, bienvenido."
interfaz = gr.Interface(
fn=generar_saludo,
inputs=gr.Textbox(label="Nombre del usuario"),
outputs=gr.Textbox(label="Saludo")
)
interfaz.launch()
Al ejecutar el código, se inicia un servidor local en http://localhost:7860 donde se visualiza la interfaz.
Componentes y tipos de entrada/salida
Gradio ofrece una variedad de componentes para construir interfaces:
- Entrada/Salida:
gr.Textbox,gr.Image,gr.Number,gr.Dropdown,gr.Checkbox,gr.Slider,gr.Audio,gr.Dataframe,gr.File. - Controles:
gr.Button. - Layout:
gr.Tab,gr.Row,gr.Columnpara organizar los componentes.
Entradas y salidas múltiples
Se pueden definir múltiples componentes de entrada y salida, los cuales corresponden parámetro a parámetro con la función definida:
import gradio as gr
def calcular_imc(peso, altura_metros):
imc = peso / (altura_metros ** 2)
clasificacion = "Bajo peso" if imc < 18.5 else "Normal" if imc < 25 else "Sobrepeso"
return round(imc, 2), clasificacion
interfaz = gr.Interface(
fn=calcular_imc,
inputs=[
gr.Number(label="Peso (kg)"),
gr.Number(label="Altura (m)")
],
outputs=[
gr.Number(label="IMC"),
gr.Textbox(label="Clasificación")
]
)
interfaz.launch()
Modo de funcionamiento dinámico
Al establecer live=True, la interfaz se actualiza automáticamente a medida que el usuario modifica las entradas, sin necesidad de presionar un botón de envío.
import gradio as gr
def convertir_temperatura(valor, origen):
if origen == "Celsius":
resultado = (valor * 9/5) + 32
unidad = "Fahrenheit"
else:
resultado = (valor - 32) * 5/9
unidad = "Celsius"
return round(resultado, 2), unidad
interfaz = gr.Interface(
fn=convertir_temperatura,
inputs=[
gr.Number(label="Valor"),
gr.Radio(["Celsius", "Fahrenheit"], label="Convertir de")
],
outputs=[
gr.Number(label="Resultado"),
gr.Textbox(label="Unidad")
],
live=True
)
interfaz.launch()
Diferencia entre Interface y Blocks
Gradio ofrece dos métodos principales para construir interfaces:
- gr.Interface: Ideal para aplicaciones simples con un flujo de entrada-proceso-salida lineal. Es más rápido de implementar.
- gr.Blocks: Ofrece mayor flexibilidad para diseñar interfaces complejas con disposiciones personalizadas, múltiples flujos de datos y control detallado sobre los eventos. Permite una construcción más modular de la aplicación.
Ejemplo con Blocks
import gradio as gr
def procesar_texto(texto, operacion):
if operacion == "Mayúsculas":
return texto.upper()
elif operacion == "Minúsculas":
return texto.lower()
else:
return texto.replace(" ", "_")
with gr.Blocks() as demo:
gr.Markdown("# Procesador de Texto Simple")
with gr.Row():
entrada_texto = gr.Textbox(label="Texto de entrada")
operacion = gr.Dropdown(
["Mayúsculas", "Minúsculas", "Reemplazar espacios"],
label="Operación"
)
boton_procesar = gr.Button("Procesar")
salida_texto = gr.Textbox(label="Resultado")
boton_procesar.click(
fn=procesar_texto,
inputs=[entrada_texto, operacion],
outputs=salida_texto
)
demo.launch()
Despliegue y compartición
Gradio ofrece varias opciones para compartir las aplicaciones creadas:
- Enlace público temporal: Al ejecutar
demo.launch(share=True), se genera un enlace público con una duración limitada (generalmente 72 horas). Este enlace permite el acceso desde cualquier lugar sin configurar un servidor. - Despliegue en Hugging Face Spaces: Se puede alojar la aplicaicón de forma permanente y gratuita en los Spaces de Hugging Face. Solo requiere subir el archivo de la aplicación y un archivo
requirements.txtcon las dependencias. - Red local: Para compartir dentro de una red local, se puede configurar
server_name='0.0.0.0'y un puerto específico al iniciar la aplicación.
Ejemplo práctico: Clasificación de imágenes con YOLOv8
El siguiente ejemplo muestra cómo crear una interfaz para un modelo de clasificación de imágenes:
import gradio as gr
from ultralytics import YOLO
import pandas as pd
# Cargar modelo preentrenado
modelo = YOLO('yolov8n-cls.pt')
def clasificar_imagen(imagen_entrada):
resultados = modelo.predict(source=imagen_entrada)
# Procesar probabilidades
nombres_clases = resultados[0].names
probabilidades = resultados[0].probs.tolist()
# Crear diccionario ordenado por probabilidad
dict_probabilidades = dict(zip(nombres_clases, probabilidades))
return dict_probabilidades
interfaz = gr.Interface(
fn=clasificar_imagen,
inputs=gr.Image(type="pil", label="Subir imagen"),
outputs=gr.Label(num_top_classes=5, label="Predicciones"),
title="Clasificador de Imágenes con YOLOv8",
description="Suba una imagen para clasificarla usando un modelo YOLOv8."
)
interfaz.launch()
Ventajas y limitaciones
Ventajas:
- Curva de aprendizaje baja: No se requiere experiencia en desarrollo frontend.
- Rapidez en el prototipado: Permite pasar de un modelo en Python a una aplicación web interactiva en minutos.
- Compartición sencilla: Opciones integradas para compartir la aplicación con otros usuarios.
- Flexibilidad: Soporte para múltiples tipos de datos y diseños personalizados.
Limitaciones:
- No es ideal para aplicaciones web de producción a gran escala con miles de usuarios concurrentes.
- Las aplicaciones complejas pueden requerir un tiempo de carga inicial significativo.
- Para necesidades de frontend avanzadas, puede ser necesario recurrir a frameworks más especializados.
Herramientas similares
Existen otras bibliotecas y frameworks con funcionalidades parecidas:
- Streamlit: Enfocado en aplicaciones de datos y ciencia, con un enfoque más orientado a la creación de paneles de control y análisis exploratorio.
- Dash (Plotly): Potente para construir aplicaciones analíticas con visualizaciones interactivas complejas.
- Voilà: Convierte notebooks de Jupyter en aplicaciones web independientes.
- Panel: Biblioteca de alto nivel para crear aplicaciones analíticas y paneles de control.
Gradio se distingue por su enfoque particular en la demostración y prueba de modelos de machine learning/deep learning, priorizando la simplicidad y la rapidez en la creación de prototipos interactivos.