gradio基本使用

gradio可以将自己的模型可视化为demo的一个库,只需简单定义输入和输出接口即可快速构建简单的交互页面,轻松部署模型。适合场景相对简单,想要快速部署应用的开发者。便于分享:gradio可以在启动应用时设置share=True参数创建外部分享链接,可以直接在微信中分享给用户使用。

对于简单场景,使用gradio的Interface类;如果要自定义场景,则使用Block类,本文主要介绍Interface类

gradio安装

gradio安装很简单

1
pip install gradio

1. 基本使用

gradio的官方应用文档

1.1 首先我们运行一个简单的文本到文本的demo

1
2
3
4
5
6
7
8
9
import gradio as gr

def greet(name):
return "Hello " + name + "!"

demo = gr.Interface(fn=greet, inputs="text", outputs="text")

if __name__ == "__main__":
demo.launch()

此时会输出如下内容,点击链接即可进入到网页的交互界面

1
2
3
Running on local URL:  http://127.0.0.1:7860

To create a public link, set `share=True` in `launch()`.

1.2 下面我们尝试加入多个输入和输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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表示输出的数字区域

1.3 其他形式的输入和输出

这里将输入输出更改为图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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函数,其他模态也有类似的操作

这里将输入输出更改为视频

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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()

1.4 interface的其他参数

live参数,live参数为True表示当输入发生变化时,输出也立刻更新

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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()

更改输入时,输出立刻更新