Gradio ML 演示
Gradio 是 Hugging Face 出品的 ML 演示神器,几行 Python 代码就能把机器学习模型变成可交互的 Web 界面,支持一键分享链接,是展示模型效果、做 demo 汇报的最快方案。
核心知识点
| 知识点 | 说明 |
|---|
| 工具定位 | 机器学习模型 Web 演示框架 |
| 最新版本 | v6.14.0(2026 年 4 月) |
| 开发团队 | Hugging Face |
| 核心优势 | 几行代码出 Web 界面、自动生成 API、一键公开分享 |
| 适用场景 | 模型 demo、论文演示、API 服务、教学工具 |
| 部署平台 | Hugging Face Spaces(免费托管) |
安装配置
# pip 安装
pip install gradio # 安装 Gradio
# 验证
python -c "import gradio; print(gradio.__version__)" # 查看版本
# 需要 Python 3.10+
基本使用
1. 最简单的 Gradio 应用(3 行代码)
import gradio as gr # 导入 Gradio
def greet(name): # 定义函数
return f"Hello {name}! 欢迎使用 Gradio"
# 创建界面(自动推断输入输出类型)
demo = gr.Interface(
fn=greet, # 要展示的函数
inputs="text", # 输入类型:文本框
outputs="text" # 输出类型:文本框
)
demo.launch() # 启动 Web 服务
# 访问 http://localhost:7860
2. 机器学习模型演示
import gradio as gr
import joblib # 模型加载
import numpy as np # 数值计算
# 加载训练好的模型
model = joblib.load("rf_model.pkl") # 随机森林模型
def predict_diabetes(age, bmi, glucose, insulin):
"""预测 2 型糖尿病风险"""
features = np.array([[age, bmi, glucose, insulin]]) # 特征数组
prediction = model.predict(features)[0] # 预测
probability = model.predict_proba(features)[0] # 概率
if prediction == 1:
return f"⚠️ 高风险 (概率: {probability[1]:.2%})"
else:
return f"✅ 低风险 (概率: {probability[0]:.2%})"
# 创建界面
demo = gr.Interface(
fn=predict_diabetes, # 预测函数
inputs=[
gr.Number(label="年龄"), # 数值输入
gr.Number(label="BMI"),
gr.Number(label="血糖 (mg/dL)"),
gr.Number(label="胰岛素 (μU/mL)")
],
outputs=gr.Textbox(label="预测结果"), # 文本输出
title="2型糖尿病风险预测",
description="输入指标,AI 预测糖尿病风险",
examples=[ # 示例输入(用户可一键填入)
[45, 28.5, 120, 85],
[30, 22.0, 90, 50],
[60, 35.0, 180, 120]
]
)
demo.launch()
3. 图片分类演示
import gradio as gr
from PIL import Image # 图片处理
def classify_image(image):
"""图片分类(示例)"""
# 这里可以接入任何图片分类模型
# result = model.predict(image)
return {"细菌": 0.7, "真菌": 0.2, "古菌": 0.1} # 返回分类概率
demo = gr.Interface(
fn=classify_image,
inputs=gr.Image(type="pil"), # 图片输入
outputs=gr.Label(num_top_classes=3), # 标签输出(显示前3类)
title="微生物图像分类"
)
demo.launch()
高级用法
1. Blocks 布局(更灵活的界面)
import gradio as gr
import pandas as pd
# Blocks API 提供更灵活的布局控制
with gr.Blocks(title="菌群分析工具") as demo:
gr.Markdown("# 🧬 菌群分析工具") # Markdown 标题
with gr.Tab("数据上传"): # 标签页 1
file_input = gr.File(label="上传 CSV") # 文件上传
preview = gr.Dataframe(label="数据预览") # 表格预览
def load_csv(file):
if file is None:
return None
return pd.read_csv(file.name) # 读取并显示
file_input.change(load_csv, file_input, preview) # 文件变化时触发
with gr.Tab("可视化"): # 标签页 2
with gr.Row(): # 水平布局
with gr.Column(): # 左列
chart_type = gr.Dropdown(
choices=["柱状图", "饼图", "箱线图"],
label="图表类型"
)
with gr.Column(): # 右列
color_scheme = gr.Radio(
choices=["默认", "红蓝", "绿色"],
label="配色方案"
)
plot_output = gr.Plot(label="图表") # 图表输出
with gr.Tab("关于"): # 标签页 3
gr.Markdown("## 使用说明\n1. 上传 CSV 文件\n2. 选择图表类型\n3. 查看结果")
demo.launch()
2. 聊天界面(ChatInterface)
import gradio as gr
def chat_response(message, history):
"""简单的聊天回复"""
# 这里可以接入 LLM
if "什么是宏基因组" in message:
return "宏基因组是对环境中所有微生物的基因组进行测序和分析的方法。"
return f"你说了: {message}"
# 聊天界面
demo = gr.ChatInterface(
fn=chat_response, # 聊天函数
title="生信助手",
description="问我任何生信问题!",
examples=["什么是宏基因组", "如何做 16S 分析"], # 示例问题
)
demo.launch()
3. 一键分享(公开链接)
# 生成公开可访问的链接(72 小时有效)
demo.launch(share=True) # 自动生成 xxx.gradio.live 链接
# 不需要部署服务器,任何人都能访问!
# 指定端口和地址
demo.launch(
server_name="0.0.0.0", # 允许外部访问
server_port=7860, # 指定端口
share=True # 生成分享链接
)
4. 部署到 Hugging Face Spaces(免费)
# 1. 在 huggingface.co/spaces 创建新 Space
# 2. 选择 SDK: Gradio
# 3. 上传你的代码
# 项目结构
# my-space/
# ├── app.py 主应用
# ├── requirements.txt 依赖
# └── README.md Space 配置
# README.md(Space 配置头部)
---
title: 菌群分析工具
emoji: 🧬
colorFrom: blue
colorTo: green
sdk: gradio
sdk_version: 6.14.0
app_file: app.py
---
5. API 自动生成
# Gradio 自动为你的应用生成 API
demo.launch()
# 访问 http://localhost:7860/api 查看 API 文档
# Python 客户端调用
from gradio_client import Client # 安装: pip install gradio_client
client = Client("http://localhost:7860") # 连接
result = client.predict(45, 28.5, 120, 85) # 调用预测
print(result)
常见报错与解决
| 报错信息 | 原因 | 解决方法 |
|---|
ModuleNotFoundError: gradio | 未安装 | pip install gradio |
| 端口被占用 | 7860 已被使用 | demo.launch(server_port=7861) |
share=True 失败 | 网络问题 | 检查网络或用代理 |
| 大模型加载慢 | 每次请求都加载 | 把模型加载放在函数外面 |
速查表
# ===== Gradio 速查表 =====
import gradio as gr
# 快速创建(Interface API)
gr.Interface(fn, inputs, outputs).launch()
# 输入组件
gr.Textbox() # 文本框
gr.Number() # 数值
gr.Slider(0, 100) # 滑块
gr.Dropdown(choices=[...]) # 下拉
gr.Checkbox() # 复选框
gr.File() # 文件上传
gr.Image(type="pil") # 图片
gr.Audio() # 音频
gr.Dataframe() # 表格
# 输出组件
gr.Textbox() # 文本
gr.Label() # 分类标签
gr.Plot() # 图表
gr.Image() # 图片
gr.Dataframe() # 表格
gr.JSON() # JSON
# 布局(Blocks API)
with gr.Blocks() as demo:
gr.Markdown("# 标题")
with gr.Tab("页1"): # 标签页
with gr.Row(): # 水平布局
with gr.Column(): # 垂直布局
# 聊天
gr.ChatInterface(fn) # 聊天界面
# 启动
demo.launch() # 本地启动
demo.launch(share=True) # 公开分享链接
demo.launch(server_name="0.0.0.0") # 允许外部访问
# 部署
# Hugging Face Spaces(免费)
# Docker 容器
# 自建服务器
# Gradio vs Streamlit
# Gradio: ML 模型 demo 更快,自动 API,一键分享
# Streamlit: 数据仪表盘更强,多页面,更多组件