Gradio
最近看到一个新的包,感觉挺好玩的,这儿记载一下。
与别人同享机器学习模型,API或数据科学作业流程的最佳办法之一是创建一个交互式应用程序,使用户或搭档能够在浏览器中测验演示。
Gradio允许在Python中构建演示并共享它们,通常只需求几行代码即可完结之前需求写flask后端服务,前端开发用户界面等复杂作业。
安装
pip install gradio
Hello World
开始学起都是从输出”hello world”开始,这儿也不破例。
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()
上面的代码运转后,在http// localhost:7860
上弹出浏览器:
左面输入对应的name,右边有根据程序的输出:
接口类
为了制作演示,上面创建了gradio.interface
, 此接口类能够让用户界面包装任何Python函数。在上面的示例中,演示了一个简略的根据文本的功用,接纳文本输入,并增加hello+该文本输出。此功用不仅仅局限于该功用,能够是任何函数,比方音乐生成器,税收计算器再到机器学习模型的推理功用的任何内容。
核心接口类Interface
以三个必需的参数初始化:
-
fn
:包裹UI的功用函数 -
input
:用于输入的哪个组件(例如"text"
,"image"
或许"audio"
) -
output
:用于输出的哪个组件(例如"text"
,"image"
或许"audio"
)
组件特点:
-
textbox
: 比text
有更大的空间,且能够增加提示字符串 ,用法:inputs=gr.Textbox(lines=2, placeholder="Name Here...")
多输入和输出组件
假定输入和输出比较复杂,有多个的状况下,能够经过列表的方式进行传递参数。下面是一个计算器,完成加减乘除的功用,输入是两个数字,中间能够加四种运算符中的其中一种,在输入中只需求将其按照对应的格局排列好即可。[[5, "add", 3],] 表明5+3
。能够用example表明默许示例。
import gradio as gr
def calculator(num1, operation, num2):
if operation == "add":
return num1 + num2
elif operation == "subtract":
return num1 - num2
elif operation == "multiply":
return num1 * num2
elif operation == "divide":
if num2 == 0:
raise gr.Error("Cannot divide by zero!")
return num1 / num2
demo = gr.Interface(
calculator,
[
"number",
gr.Radio(["add", "subtract", "multiply", "divide"]),
"number"
],
"number",
examples=[
[5, "add", 3],
[4, "divide", 2],
[-4, "multiply", 2.5],
[0, "subtract", 1.2],
],
title="Toy Calculator",
description="Here's a sample toy calculator. Enjoy!",
)
if __name__ == "__main__":
demo.launch()
更多接口特点能够参阅官方文档。
模型推理
模型推理或许是更加适合的场景。假如你是一名AI工程师或数据科学家,或许熟悉以下状况:刚刚花了数周的时间开发新的机器学习模型,总算对其功用感到满意,并且想向其它人展示它。这个时分假如只是独自的跑一下程序得到一个数字或许字符串或许不是那么直观,Gradio就能帮助我们省掉掉写接口服务及前端演示界面的开发等环节。
下面介绍如何将分类模型PyTorch+ResNet152, 这块需求自己装一下PyTorch环境, CPU/GPU都能够
pip install torch==1.10.0 torchvision==0.11.0
import torch
import gradio as gr
from PIL import Image
from torchvision import transforms
import requests
# load model 机器要能联网,需求下载训练好的揭露模型
model = torch.hub.load('pytorch/vision:v0.6.0', 'resnet152', pretrained=True).eval()
# load 1000类标签
labels = []
# labels.txt 能够经过`https://git.io/JJkYN`下载
with open('labels.txt') as f:
for ln in f:
label = ln.rstrip('\n')
labels.append(label)
def predict(inp):
inp = Image.fromarray(inp.astype('uint8'), 'RGB')
inp = transforms.ToTensor()(inp).unsqueeze(0)
with torch.no_grad():
prediction = torch.nn.functional.softmax(model(inp)[0], dim=0)
return {labels[i]: float(prediction[i]) for i in range(1000)}
inputs = gr.inputs.Image()
outputs = gr.outputs.Label(num_top_classes=3)
# share = True 表明能够生成一个url链接,公众经过该url就能体会该功用,有效期72h
gr.Interface(fn=predict, inputs=inputs, outputs=outputs).launch(share=True)
留意
假如想指定端口号且不想用127.0.0.1
这个地址而是用原始的服务器ip地址,能够在demo.launch()
中加一些指定的参数:
demo.launch(server_name='xx.xx.xx.xx', server_port=8080)
参阅
- gradio.app/docs/
- huggingface.co/gradio
- zhuanlan.zhihu.com/p/374238080
- cloud.tencent.com/developer/a…
- blog.scaleway.com/how-to-make…