gradio 可以将自己的模型可视化为 demo 的一个库,只需简单定义输入和输出接口即可快速构建简单的交互页面,轻松部署模型。适合场景相对简单,想要快速部署应用的开发者。便于分享:gradio 可以在启动应用时设置 share=True 参数创建外部分享链接,可以直接在微信中分享给用户使用。
对于简单场景,使用 gradio 的 Interface 类;如果要自定义场景,则使用 Block 类,本文主要介绍 Interface 类
1. gradio 安装
gradio 安装很简单
pip install gradio
2. 基本使用
gradio 的官方应用文档
2.1 首先我们运行一个简单的文本到文本的 demo
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
if __name__ == "__main__":
demo.launch()
此时会输出如下内容,点击链接即可进入到网页的交互界面
Running on local URL: http://127.0.0.1:7860
To create a public link, set `share=True` in `launch()`.

2.2 下面我们尝试加入多个输入和输出
import gradio as gr
def greet(name, is_morning, temperature):
salutation = "Good morning" if is_morning else "Good evening"
greeting = f"{salutation} {name}. It is {temperature} degrees today"
celsius = (temperature - 32) * 5 / 9
return greeting, round(celsius, 2)
demo = gr.Interface(
fn=greet,
inputs=["text", "checkbox", gr.Slider(0, 100)],
outputs=["text", "number"],
)
if __name__ == "__main__":
demo.launch()
这里的输入 text 表示我们要输入的文字区域,checkbox 是 bool 变量,gr.Slider 是一个长条,可以选择他的数值范围。输出部分:text 表示输出的文本区域,number 表示输出的数字区域

2.3 其他形式的输入和输出
这里将输入输出更改为图片
import numpy as np
import gradio as gr
def sepia(input_img):
#处理图像
sepia_filter = np.array([
[0.393, 0.769, 0.189],
[0.349, 0.686, 0.168],
[0.272, 0.534, 0.131]
])
sepia_img = input_img.dot(sepia_filter.T)
sepia_img /= sepia_img.max()
return sepia_img
#shape设置输入图像大小
demo = gr.Interface(sepia, gr.Image(shape=(200, 200)), "image")
demo.launch()
这里对于图片信息,参数为"image",如果我们要对输入的框等进行调整,则使用 gr.Image 函数,其他模态也有类似的操作

这里将输入输出更改为视频
import gradio as gr
import os
def video_identity(video):
return video
demo = gr.Interface(video_identity,
gr.Video(),
"playable_video",
examples=[os.path.join("/Users/harry/video_sample.mp4")],
cache_examples=True)
if __name__ == "__main__":
demo.launch()

2.4 interface 的其他参数
live 参数,live 参数为 True 表示当输入发生变化时,输出也立刻更新
import gradio as gr
def add(input, var):
output = input+var
return output
demo = gr.Interface(
fn=add,
inputs=["number", gr.Slider(0, 100)],
outputs="number",
live=True
)
if __name__ == "__main__":
demo.launch()
更改输入时,输出立刻更新

本文由 Yonghui Wang 创作,采用
知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
Dec 19, 2024 12:13 pm