Gradio 是一个开源 Python 库,用于构建机器学习和数据科学演示以及 Web 应用程序。
使用 Gradio,您可以围绕您的机器学习模型或数据科学工作流程快速创建一个漂亮的用户界面,并让人们通过拖放自己的图像、粘贴文本、录制自己的声音以及与您的演示,全部通过浏览器。
Gradio 适用于:
为客户/合作者/用户/学生演示您的机器学习模型。
使用自动共享链接快速部署您的模型并获得有关模型性能的反馈。
使用内置的操作和解释工具在开发过程中以交互方式调试您的模型。
必要条件:Gradio 需要 Python 3.7 及以上版本
与他人分享您的机器学习模型、API 或数据科学工作流程的最佳方式之一是创建一个交互式应用程序,让您的用户或同事可以在他们的浏览器中试用该演示。
Gradio 允许您构建演示并共享它们,所有这些都在 Python 中。通常只需几行代码!让我们开始吧。
要使用简单的“Hello, World”示例运行 Gradio,请执行以下三个步骤:
1.使用pip安装Gradio:
[hidecontent type="logged" desc="隐藏内容:登录后可查看"]
pip install gradio
2. 将以下代码作为 Python 脚本或在 Jupyter Notebook(或Google Colab)中运行:
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()
3. 下面的演示将自动出现在 Jupyter Notebook 中,或者如果从脚本运行则在浏览器中弹出http://localhost:7860 :
Interface
_您会注意到,为了制作演示,我们创建了一个gradio.Interface
. 此类Interface
可以使用用户界面包装任何 Python 函数。在上面的示例中,我们看到了一个简单的基于文本的函数,但该函数可以是任何东西,从音乐生成器到税收计算器再到预训练机器学习模型的预测函数。
核心Interface
类使用三个必需参数进行初始化:
fn
: 环绕 UI 的函数inputs
: 哪个组件用于输入(例如"text"
,"image"
或"audio"
)outputs
: 用于输出的组件(例如"text"
,"image"
或"label"
)让我们仔细看看这些用于提供输入和输出的组件。
我们Textbox
在前面的示例中看到了一些简单的组件,但是如果您想更改 UI 组件的外观或行为方式怎么办?
假设您想要自定义输入文本字段——例如,您希望它更大并且有一个文本占位符。如果我们使用实际的类Textbox
而不是使用字符串快捷方式,您可以通过组件属性访问更多的可定制性。
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(
fn=greet,
inputs=gr.Textbox(lines=2, placeholder="Name Here..."),
outputs="text",
)
demo.launch()
假设您有一个更复杂的函数,具有多个输入和输出。在下面的示例中,我们定义了一个函数,它接受一个字符串、布尔值和数字,并返回一个字符串和数字。看一下如何传递输入和输出组件列表。
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"],
)
demo.launch()
您只需将组件包装在一个列表中。列表中的每个组件inputs
按顺序对应于函数的一个参数。列表中的每个组件outputs
对应于函数返回的值之一,也是按顺序排列的。
Gradio 支持多种类型的组件,例如Image
, DataFrame
, Video
, 或Label
. 让我们尝试一个图像到图像的功能来感受一下这些!
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
组件作为输入时,您的函数将接收一个形状为 的 NumPy 数组(width, height, 3)
,其中最后一个维度表示 RGB 值。我们还将以 NumPy 数组的形式返回图像。
您还可以使用关键字参数设置组件使用的数据类型type=
。例如,如果您希望您的函数采用图像的文件路径而不是 NumPy 数组,则输入Image
组件可以写为:
gr.Image(type="filepath", shape=...)
另请注意,我们的输入Image
组件带有一个编辑按钮🖉,它允许裁剪和放大图像。以这种方式处理图像有助于揭示机器学习模型中的偏差或隐藏缺陷!
您可以在Gradio 文档中阅读更多关于许多组件以及如何使用它们的信息。
Gradio 提供了两个类来构建应用程序:
1. Interface,它为创建我们迄今为止一直在讨论的演示提供了高级抽象。
2. Blocks,一种用于设计具有更灵活布局和数据流的网络应用程序的低级 API。Blocks 允许你做一些事情,比如以多个数据流和演示为特色,控制组件在页面上出现的位置,处理复杂的数据流(例如,输出可以作为其他功能的输入),以及根据用户交互更新组件的属性/可见性——仍然全部在 Python 中。如果您需要这种可定制性,请试试Blocks
吧!
[/hidecontent]