引言:当你的代码需要一个“脸面”

你刚刚用Python写好了一个很酷的函数:它可能是一个能识别图片的机器学习模型,一个能生成文本的AI,或者只是一个能处理Excel表格的简单脚本。

现在,你想把它分享给同事、朋友,或者非技术人员使用。怎么办?让他们去安装Python、配置环境、运行你的脚本吗?这显然太不现实了。你需要为你的代码创建一个图形用户界面(UI),最好还是一个网页界面(WebUI),这样任何人只要有浏览器就能使用。

但对于许多后端或算法开发者来说,写前端代码(HTML, CSS, JavaScript)是一件头疼的事。

Gradio 的出现,就是为了解决这个痛点。它是一个开源的Python库,可以让你用最少的代码,自动为你的Python函数生成一个简洁、美观、可交互的WebUI。

安装

安装Gradio和安装其他Python库一样简单:

pip install gradio

核心概念:gr.Interface

Gradio的核心就是gr.Interface类。创建一个界面,你只需要告诉它三件事:

  1. fn:你要包装的那个Python函数。
  2. inputs:你的函数需要什么样的输入(文本框、图片上传、滑块等)。
  3. outputs:你的函数会返回什么样的输出(文本、图片、图表等)。

Gradio会根据这些信息,自动生成对应的网页组件,并将它们连接到你的函数上。

案例1:最简单的“Hello World”

让我们从一个不能再简单的例子开始。我们有一个函数,它接收一个名字,然后返回一句问候。

# app.py
import gradio as gr

def greet(name):
    return "你好, " + name + "!"

# 创建Interface
# 输入是文本框,输出也是文本框
iface = gr.Interface(fn=greet, inputs="text", outputs="text")

# 启动Web服务
iface.launch()

在终端运行 python app.py。你会看到如下输出:

Running on local URL:  http://127.0.0.1:7860

打开你的浏览器,访问http://127.0.0.1:7860。看,一个UI界面已经为你准备好了!你在输入框里输入名字,点击“Submit”,输出框里就会显示结果。

案例2:图片滤镜应用

现在来个更酷的,展示Gradio处理图片的能力。我们将创建一个简单的应用,用户上传一张图片,我们的函数会给它加上一个“乌贼墨色(Sepia)”的复古滤镜。

这需要PillowNumpy库来处理图片。如果没安装,先安装一下:

pip install numpy Pillow

然后编写代码:

# image_filter_app.py
import gradio as gr
import numpy as np
from PIL import Image

def sepia_filter(input_img):
    # 将PIL图片转为Numpy数组
    img_arr = np.array(input_img)
    
    # 乌贼墨色滤镜的转换矩阵
    sepia_matrix = np.array([
        [0.393, 0.769, 0.189],
        [0.349, 0.686, 0.168],
        [0.272, 0.534, 0.131]
    ])
    
    # 应用滤镜
    sepia_img_arr = img_arr.dot(sepia_matrix.T)
    
    # 确保像素值在0-255范围内
    sepia_img_arr[sepia_img_arr > 255] = 255
    
    # 将Numpy数组转回PIL图片
    return Image.fromarray(sepia_img_arr.astype('uint8'))

# 指定输入和输出组件为"image"
iface = gr.Interface(
    fn=sepia_filter,
    inputs=gr.Image(type="pil"), # 指定输入是PIL格式的Image
    outputs=gr.Image(type="pil")  # 指定输出也是PIL格式的Image
)

iface.launch()

再次运行并访问,你会看到一个图片上传框。上传一张照片,它会立刻返回处理后的复古风格照片。我们没有写一行前端代码,就实现了一个完整的图片处理应用!

一键分享你的应用

Gradio最令人兴奋的功能之一是分享。如果你想让不在同一个局域网的朋友也能玩你的应用,只需在launch()函数中添加一个参数:

iface.launch(share=True)

当你再次运行脚本时,除了本地URL,你还会看到一个公网URL,类似这样:

Running on local URL:  http://127.0.0.1:7860
Running on public URL: https://1a2b3c4d.gradio.live

这个.gradio.live的链接有效期是72小时,你可以把它发给任何人,他们可以直接在自己的浏览器里访问和使用你的应用,无需任何安装。

总结

Gradio极大地降低了AI/ML应用和数据科学项目的产品化和展示门槛。它让开发者可以专注于核心的Python逻辑,而将UI创建的繁琐工作自动化。

下次当你需要快速展示你的Python脚本能力时,别忘了用Gradio给它穿上一件漂亮又实用的“外衣”。