gradio可以将自己的模型可视化为demo的一个库,只需简单定义输入和输出接口即可快速构建简单的交互页面,轻松部署模型。适合场景相对简单,想要快速部署应用的开发者。便于分享:gradio可以在启动应用时设置share=True参数创建外部分享链接,可以直接在微信中分享给用户使用。
对于简单场景,使用gradio的Interface类;如果要自定义场景,则使用Block类,本文主要介绍Interface类
gradio安装
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
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()
|
更改输入时,输出立刻更新