用Python快速构建机器学习Web应用,这个开源工具已获42.5k Star
Gradio是一款开源Python库,目前在GitHub上收获42,532个Star:
Gradio主要用于构建机器学习和数据科学演示项目以及Web应用。
使用Gradio,开发者可以快速为机器学习模型或数据科学工作流创建美观的用户界面。用户可以通过浏览器直接上传图片、粘贴文本、录制语音,与演示项目进行交互。
Gradio适用于多种场景:
- 向客户、合作者、用户或学生演示机器学习模型
- 快速部署模型,生成可分享的链接,收集模型性能反馈
- 开发过程中使用内置的操作和解释工具,交互式调试模型
Gradio要求Python 3.7及以上版本,无需其他额外依赖。
创建最简单的"Hello, World"示例只需三步:
- 使用pip安装Gradio:
pip install gradio
- 运行以下Python代码:
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()
- 代码运行后,演示界面会自动在Jupyter Notebook中显示,或者在浏览器中通过http://localhost:7860访问。
上述示例中使用的gradio.Interface类可以将任意Python函数包装成用户界面。这个类初始化需要三个核心参数:
fn:需要包装UI的函数inputs:输入使用的组件类型,如文本、图片、音频等outputs:输出使用的组件类型,如文本、图片、标签等
如果需要自定义UI组件的外观或行为,可以直接使用对应的组件类,而非字符串快捷方式。比如要创建一个更大的输入文本框,带有占位提示,可以这样写:
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()
对于有多个输入输出的函数,Gradio同样支持。只需要将输入输出组件放在列表中即可,列表中的顺序对应函数参数和返回值的顺序。
Gradio支持多种组件类型,包括图片、数据框、视频、标签等。比如创建一个图像滤镜演示:
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()
如果需要更灵活的布局和数据流控制,可以使用Gradio的Blocks API。Blocks允许开发者设计更复杂的Web应用,控制组件在页面上的位置,处理复杂的数据流,根据用户交互更新组件属性或可见性。
使用Blocks创建简单应用的示例:
import gradio as gr
def greet(name):
return "Hello " + name + "!"
with gr.Blocks() as demo:
name = gr.Textbox(label="Name")
output = gr.Textbox(label="Output Box")
greet_btn = gr.Button("Greet")
greet_btn.click(fn=greet, inputs=name, outputs=output)
demo.launch()
Gradio基于多个开源库构建,包括Hugging Face、Python、FastAPI、Svelte、Vite、Tailwind等。项目采用Apache License 2.0开源协议。