跳转至

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: 数据仪表盘更强,多页面,更多组件