Gradio: 用 Python 构建机器学习 Web 应用
Gradio 是一个开源的 Python 包,可以让你快速为机器学习模型、API 或任意 Python 函数构建演示或 Web 应用。然后,您可以使用 Gradio 内置的共享功能在几秒钟内分享演示或 Web 应用的链接。不需要 JavaScript、CSS 或网络托管经验!
只需几行 Python 代码即可创建如上图所示的漂亮演示,所以让我们开始吧 💫
安装
先决条件:Gradio 需要 Python 3.8 或更高版本
我们建议使用默认包含在 Python 中的 pip
安装 Gradio。在您的终端或命令提示符中运行以下命令:
pip install gradio
[!提示] 最好在虚拟环境中安装 Gradio。提供了所有常见操作系统的详细安装说明 点击这里查看。
构建您的第一个演示
您可以在您喜欢的代码编辑器、Jupyter notebook、Google Colab 或任何其他编写 Python 的地方运行 Gradio。让我们编写您的第一个 Gradio 应用:
import gradio as gr
def greet(name, intensity):
return "Hello " * intensity + name + "!"
demo = gr.Interface(
fn=greet,
inputs=["text", "slider"],
outputs=["text"],
)
demo.launch()
[!提示] 为了更好的代码可读性,我们将导入的名称从
gradio
缩短为gr
。这是一个被广泛采用的约定,您应该遵循它,以便与您的代码一起工作的任何人都能轻松理解。
现在,运行您的代码。如果您将 Python 代码写在一个名为 app.py
的文件中,那么您可以在终端中运行 python app.py
。
如果从文件中运行,下面的演示将在 http://localhost:7860 的浏览器中打开。如果您在 notebook 中运行,演示将在 notebook 中嵌入显示。
在左边的文本框中输入您的名字,拖动滑块,然后按下提交按钮。您应该会在右边看到一条友好的问候语。
[!提示] 在本地开发时,您可以在热重载模式下运行您的 Gradio 应用,该模式会在您对文件进行更改时自动重新加载 Gradio 应用。要实现这一点,只需在文件名前输入
gradio
而不是python
。在上面的示例中,您应该在终端中输入:gradio app.py
。了解更多关于热重载的信息,请参阅 热重载指南。
理解 Interface
类
您会注意到,为了制作第一个演示,您创建了一个 gr.Interface
类的实例。Interface
类旨在为接受一个或多个输入并返回一个或多个输出的机器学习模型创建演示。
Interface
类有三个核心参数:
fn
:要为用户界面(UI)包装的函数inputs
:用于输入的 Gradio 组件。组件的数量应与函数中的参数数量匹配。outputs
:用于输出的 Gradio 组件。组件的数量应与函数的返回值数量匹配。
fn
参数非常灵活 -- 您可以传递任何您想要用 UI 包装的 Python 函数。在上面的示例中,我们看到了一个相对简单的函数,但该函数可以是从音乐生成器到税收计算器到预训练机器学习模型的预测函数的任何内容。
input
和 output
参数接受一个或多个 Gradio 组件。正如我们将看到的,Gradio 包含超过 30 种内置组件(如 gr.Textbox()
、gr.Image()
和 gr.HTML()
组件),这些组件专为机器学习应用设计。
[!提示] 对于
inputs
和outputs
参数,您可以传递这些组件的名称字符串("textbox"
)或类的实例(gr.Textbox()
)。
如果您的函数接受多个参数,如上所述,请将输入组件列表传递给 inputs
,每个输入组件对应函数的一个参数,按顺序排列。如果您的函数返回多个值,也可以传入一个组件列表给 outputs
。这种灵活性使 Interface
类成为创建演示的非常强大的方式。
我们将在构建接口系列中更深入地探讨 gr.Interface
。
分享您的演示
一个漂亮的演示如果不能分享,有什么意义呢?Gradio 让您可以轻松分享机器学习演示,而无需担心在 Web 服务器上托管的麻烦。只需在 launch()
中设置 share=True
,就会为您的演示创建一个可公开访问的 URL。让我们回顾一下我们的示例演示,但更改最后一行为:
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="textbox", outputs="textbox")
demo.launch(share=True) # 只需一个额外参数即可分享您的演示 🚀
运行此代码后,将为您的演示生成一个公共 URL,几秒钟内即可访问,例如:
👉 https://a23dsf231adb.gradio.live
现在,世界各地的任何人都可以从他们的浏览器中尝试您的 Gradio 演示,而机器学习模型和所有计算将继续在您的计算机本地运行。
要了解更多关于分享演示的信息,请阅读我们的分享 Gradio 应用指南。
Gradio 概览
到目前
使用 gr.ChatInterface
的聊天机器人
Gradio 包含了另一个高级类,gr.ChatInterface
,专门用于创建聊天机器人用户界面。类似于 Interface
,您只需提供一个函数,Gradio 就会创建一个完全可用的聊天机器人 UI。如果您有兴趣创建聊天机器人,可以直接查看我们关于 gr.ChatInterface
的专用指南。
使用 gr.Blocks
创建自定义演示
Gradio 还提供了一种底层方法,通过 gr.Blocks
类设计具有更灵活布局和数据流的 web 应用。Blocks 允许您控制页面上组件的显示位置,处理复杂的数据流(例如,输出可以作为其他函数的输入),并根据用户交互更新组件的属性/可见性——这一切都在 Python 中完成。
您可以使用 gr.Blocks()
构建非常自定义和复杂的应用。例如,流行的图像生成 Automatic1111 Web UI 就是使用 Gradio Blocks 构建的。我们在关于使用 Blocks 构建的系列文章中深入探讨了 gr.Blocks
。
Gradio 的 Python 和 JavaScript 生态系统
这就是核心 gradio
Python 库的大概,但 Gradio 其实不仅仅如此!它是一个完整的 Python 和 JavaScript 库生态系统,让您可以构建机器学习应用,或在 Python 或 JavaScript 中以编程方式查询它们。以下是 Gradio 生态系统中的其他相关部分:
- Gradio Python 客户端 (
gradio_client
):以编程方式在 Python 中查询任何 Gradio 应用。 - Gradio JavaScript 客户端 (
@gradio/client
):以编程方式在 JavaScript 中查询任何 Gradio 应用。 - Gradio-Lite (
@gradio/lite
):使用 Python 编写的 Gradio 应用在浏览器中完全运行(无需服务器!),感谢 Pyodide。 - Hugging Face Spaces:托管 Gradio 应用的最受欢迎场所——免费!
接下来是什么?
继续通过 Gradio 指南循序渐进地学习 Gradio,其中包括解释以及示例代码和嵌入式互动演示。接下来:关于 Gradio 演示的关键功能。
或者,如果您已经了解了基础知识并正在寻找特定内容,可以搜索更技术的 API 文档。
有问题吗?
如果您想报告错误或有功能请求,请在 GitHub 上创建一个问题。对于关于使用的常见问题,我们在我们的 Discord 服务器上提供帮助。
如果您喜欢 Gradio,请在 GitHub 上给我们一个 ⭐!
开源栈
Gradio 构建在许多优秀的开源库之上!
许可证
Gradio 根据存储库根目录中的 LICENSE 文件中找到的 Apache 许可证 2.0 授权。
引用
还请查看论文_Gradio: Hassle-Free Sharing and Testing of ML Models in the Wild, ICML HILL 2019_,如果您在工作中使用 Gradio,请引用它。
@article{abid2019gradio,
title = {Gradio: Hassle-Free Sharing and Testing of ML Models in the Wild},
author = {Abid, Abubakar and Abdalla, Ali and Abid, Ali and Khan, Dawood and Alfozan, Abdulrahman and Zou, James},
journal = {arXiv preprint arXiv:1906.02569},
year = {2019},
}