Tutorial Lengkap Gradio: Buat Demo ML dalam Hitungan Menit
Gradio adalah library Python yang memungkinkan Anda membuat web interface untuk model machine learning dengan cepat. Dengan beberapa baris kode saja, Anda bisa membangun demo interaktif, berbagi dengan orang lain, dan bahkan deploy ke Hugging Face Spaces.
Mengapa Gradio?
Keunggulan Gradio:- Simple API: Build UI dengan minimal code
- Tanpa frontend knowledge: Development hanya Python
- Shareable links: URL publik instan
- Hugging Face integration: Easy deployment ke Spaces
- Multiple input/output types: Text, images, audio, video
- Demo model ML
- Prototype data science
- Internal tools
- Aplikasi edukasi
- Interface testing API
Instalasi
pip install gradio
Dengan fitur tambahan
pip install gradio[oauth] # Untuk authentication
Verify installation
python -c "import gradio; print(gradio.version)"
Quick Start
1. Hello World
import gradio as gr
def greet(name):
return f"Hello, {name}!"
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()
2. Multiple Inputs/Outputs
import gradio as gr
def process(name, age, isstudent):
status = "mahasiswa" if isstudent else "profesional"
return f"{name} adalah {status} berusia {age} tahun.", age 12
demo = gr.Interface(
fn=process,
inputs=[
gr.Textbox(label="Nama"),
gr.Number(label="Umur"),
gr.Checkbox(label="Mahasiswa?")
],
outputs=[
gr.Textbox(label="Deskripsi"),
gr.Number(label="Umur dalam Bulan")
],
title="Processor Info User",
description="Masukkan informasi Anda"
)
demo.launch()
Input Components
1. Text Inputs
import gradio as gr
def textdemo(text, textarea, password):
return f"Text: {text}, Area: {textarea[:20]}..., Pass length: {len(password)}"
demo = gr.Interface(
fn=textdemo,
inputs=[
gr.Textbox(label="Short Text", placeholder="Masukkan text..."),
gr.Textbox(label="Long Text", lines=5, maxlines=10),
gr.Textbox(label="Password", type="password")
],
outputs="text"
)
demo.launch()
2. Numeric Inputs
import gradio as gr
def numericdemo(number, slider, rangeval):
return f"Number: {number}, Slider: {slider}, Range: {rangeval}"
demo = gr.Interface(
fn=numericdemo,
inputs=[
gr.Number(label="Number", value=10),
gr.Slider(minimum=0, maximum=100, value=50, step=1, label="Slider"),
gr.Slider(minimum=0, maximum=100, value=[20, 80], label="Range")
],
outputs="text"
)
demo.launch()
3. Selection Inputs
import gradio as gr
def selectiondemo(dropdown, radio, checkboxes):
return f"Dropdown: {dropdown}, Radio: {radio}, Checks: {checkboxes}"
demo = gr.Interface(
fn=selectiondemo,
inputs=[
gr.Dropdown(choices=["Opsi A", "Opsi B", "Opsi C"], label="Dropdown"),
gr.Radio(choices=["Pilihan 1", "Pilihan 2", "Pilihan 3"], label="Radio"),
gr.CheckboxGroup(choices=["Item 1", "Item 2", "Item 3"], label="Checkboxes")
],
outputs="text"
)
demo.launch()
4. Media Inputs
import gradio as gr
from PIL import Image
import numpy as np
def mediademo(image, audio, video):
result = []
if image is not None:
result.append(f"Image shape: {np.array(image).shape}")
if audio is not None:
sr, data = audio
result.append(f"Audio: {sr}Hz, {len(data)} samples")
if video is not None:
result.append(f"Video diterima")
return "\n".join(result) if result else "Tidak ada media"
demo = gr.Interface(
fn=mediademo,
inputs=[
gr.Image(label="Upload Image", type="pil"),