Gradio安装与启动
Gradio是一个用于构建和部署机器学习和数据科学应用的开源库。以下是一个简单的Gradio入门示例,它创建了一个包含单个输入框和按钮的界面,点击按钮时会显示输入值。
安装命令:
pip install gradio
# 可下载指定版本
pip install gradio==4.29.0
#为了更快安装,可以使用清华镜像源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gradio
快速入门:
import gradio as gr
# 输入文本处理程序
def greet(name):
return "Hello " + name + "!"
# 接口创建函数
# fn设置处理函数,inputs设置输入接口组件,outputs设置输出接口组件
# fn,inputs,outputs都是必填函数
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()
运行程序后,打开 http://localhost:7860 即可看到网页效果。左边是文本输入框,右边是结果展示框。Clear按钮用于重置网页状态,Submit按钮用于执行处理程序,Flag按钮用于保存结果到本地。
在本地开发时,如果你想将代码作为Python脚本运行,你可以使用Gradio CLI在重载模式下启动应用程序,这将提供无缝和快速的开发。
gradio app.py
Interface介绍
Interface 的定义及参数应用
Interface 有三个核心参数:
- fn :包装用户界面(UI)的函数
- inputs :用于输入的Gradio组件。组件的数量应该与函数中参数的数量相匹配。
- outputs :用于输出的Gradio组件。组件的数量应该与函数返回值的数量相匹配。
通过这三个参数,我们可以快速创建一个接口并发布他们。
input 和 output 参数采用一个或多个Gradio组件。Gradio包括30多个专为机器学习应用程序设计的内置组件(例如 gr.Textbox() 、 gr.Image() 和 gr.HTML() 组件)。
最常用的基础模块构成。
- 应用界面:gr.Interface(简易场景), gr.Blocks(定制化场景)
- 输入输出:gr.Image(图像), gr.Textbox(文本框), gr.DataFrame(数据框), gr.Dropdown(下拉选项), gr.Number(数字), gr.Markdown, gr.Files,gr.Slider(滑动条),gr.Video(视频选择器),gr.Checkbox(勾选框),gr.Radio(单选框),gr.CheckboxGroup(多选框)
- 控制组件:gr.Button(按钮)
- 布局组件:gr.Tab(标签页), gr.Row(行布局), gr.Column(列布局),gr.Accordion(折叠排版)
Interface描述性内容
在 Interface 构造函数中有三个参数来指定该内容应该放在哪里:
- title :它接受文本,并可以将其显示在界面的最顶部,同时也成为页面标题。
- description :它接受文本,markdown或HTML,并将其放置在标题下。
- article :它也接受文本,markdown或HTML,并将其放置在界面下方。
如果您使用的是 Blocks API,则可以使用 gr.Markdown(…) 或 gr.HTML(…) 组件在任何地方插入文本、markdown或HTML,并在组件构造函数中包含描述性内容。
另一个有用的关键字参数是 label= ,它存在于每个组件中。这将修改每个组件顶部的标签文本。您还可以将info= 关键字参数添加到表单元素(如 Textbox 或 Radio ),以提供有关其用法的更多信息。
Accordion中的其他输入
如果你的函数需要很多输入,你可能需要将其中一些隐藏折叠,Interface 类接受一个类似于 inputs 的 additional_inputs 参数,这里包含的任何输入组件默认情况下都不可见。用户必须点击Accordion才能显示这些组件。附加输入在标准输入之后,按参数顺序排列。
可以使用可选的 additional_inputs_accordion 参数来自定义Accordion的外观,该参数接受一个字符串(在这种情况下,它将成为Accordion的标签),或者使用 gr.Accordion() 类的实例(例如,这允许您控制手风琴在默认情况下是打开还是关闭)。
# additional_inputs_accordion="输入参数折叠隐藏"
# additional_inputs_accordion=gr.Accordion(label="附加参数输入", open=False)
# 示例
import gradio as gr
demo = gr.Interface(fn=None,
inputs=["textbox"],
additional_inputs=[
gr.Checkbox(label="勾选框"),
gr.Radio(["选项A", "选项B", "选项C"], label="单选框"),
gr.CheckboxGroup(["选项A", "选项B", "选项C"], label="多选框")
],
additional_inputs_accordion=gr.Accordion(label="附加参数输入", open=True),
outputs="text",
title="折叠隐藏",
description="Interface 类接受一个类似于 inputs 的 additional_inputs 参数,"
"但这里包含的任何输入组件默认情况下都不可见。用户必须点击手风琴才能显示这些组件。",
article="https://gradio.app/interface_class/",
)
demo.launch(share=True)
Flagging 标记
默认情况下, Interface 具有“Flag”按钮。当用户看到输入中有意义的输出时,例如错误或意外的行为,可以标记输入以供您查看。在由 flagging_dir= 参数提供给 Interface 构造函数的目录中,CSV文件将记录标记的输入。如果接口涉及文件数据,例如图像和音频组件,则也将创建文件夹来存储这些标记的数据。
默认情况在项目目录下,flagged文件夹下。
标记的数据存储在下面显示的标记目录中:
+-- calculator.py
+-- flagged/
| +-- logs.csv
注:如果你希望用户提供一个标记的原因,则可以将一个字符串列表传递给Interface的 flagging_options 参数。用户在标记时必须选择其中一个字符串,该字符串将保存为CSV的附加列。
简单示例展示
import gradio as gr
with gr.Blocks() as demo:
with gr.Row():
gr.Dropdown(["模型1", "模型2", "模型3"], label="Stable Diffusion模型")
gr.Dropdown(["模型1", "模型2", "模型3"], label="外挂VAE模型")
gr.Slider(label="CLIP终止层数")
with gr.Tab("文生图"):
with gr.Row():
with gr.Column(scale=5):
gr.Textbox(label="提示词", placeholder="请输入提示词", lines=5)
gr.Textbox(label="反向提示词", placeholder="请输入反向提示词", lines=2)
with gr.Column(scale=3):
gr.Button("生成", variant="primary")
with gr.Row():
gr.Button("", icon=".\\resources\\arrow.png")
gr.Button("", icon=".\\resources\\file.png")
gr.Button("", icon=".\\resources\\delete.png")
gr.Dropdown(["模型1", "模型2", "模型3"], label="Stable Diffusion模型")
with gr.Tab("生成"):
with gr.Row():
with gr.Column():
gr.Slider(label="采样步数")
gr.Radio(["DPM++2M Karras", "DPM++ SDE Karras", "DPM++2M SDE Exponential",
"DPM++2M SDE Karras", "Euler a", "Eular", "LMS", "Heun", "DPM2",
"DPM2 a", "DPM++ 2M", "DPM++ SDE", "DPM++ 2M SDE", "DPM++ 2M SDE Heun",
"DPM Fast", "DPM Adaptive", "DPM Adaptive Karras", "LMS Karras", "DPM2 Karras",
"DPM2 a Karras", "DPM++ 2M Karras", "DPM++ 2M SDE Karras", "DPM++ 2M SDE Karras Heun"],
label="采样方法")
with gr.Accordion("高分辨率修复"): # 折叠排版
with gr.Row():
gr.Dropdown(["模型1", "模型2"], label="放大算法")
gr.Slider(label="高分迭代步数")
gr.Slider(label="重绘幅度")
with gr.Row():
gr.Slider(label="放大倍数")
gr.Slider(label="将宽度调整为")
gr.Slider(label="将高度调整为")
with gr.Accordion("Refiner"):
with gr.Row():
gr.Dropdown(["模型1", "模型2"], label="模型")
gr.Slider(label="切换时机")
with gr.Row():
with gr.Column(scale=3):
gr.Slider(label="宽度")
gr.Slider(label="高度")
with gr.Column(scale=1, min_width=1):
gr.Slider(label="总批次", min_width=1)
gr.Slider(label="单批数量", min_width=1)
gr.Slider(label="提示词引导系数")
with gr.Column():
gr.Gallery([
".\\resources\\1.jpg",
".\\resources\\2.jpg",
".\\resources\\3.jpg",
".\\resources\\4.jpg",
".\\resources\\5.jpg",
".\\resources\\6.jpg",
".\\resources\\7.jpg",
".\\resources\\8.jpg",
".\\resources\\9.jpg",
".\\resources\\10.jpg",
], columns=4)
with gr.Row():
gr.Button("发送到重绘")
gr.Button("发送到后期处理")
gr.Button("下载")
gr.Textbox(label="图像信息", lines=5)
pass
with gr.Tab("嵌入式"):
pass
with gr.Tab("超网络"):
pass
with gr.Tab("模型"):
pass
with gr.Tab("LORA"):
pass
with gr.Tab("图生图"):
pass
with gr.Tab("后期处理"):
pass
with gr.Tab("PNG图片信息"):
pass
with gr.Tab("模型训练"):
pass
with gr.Tab("模型融合"):
pass
with gr.Tab("训练"):
pass
demo.launch()
效果展示: