目 录CONTENT

文章目录

KDnuggets Gradio速成课程

Administrator
2026-01-07 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

📢 转载信息

原文链接:https://www.kdnuggets.com/the-kdnuggets-gradio-crash-course

原文作者:Shittu Olumide



Image by Editor

 

Gradio 简介

 
Gradio 是一个Python框架,它改变了机器学习从业者为其模型创建交互式Web界面的方式。只需几行代码,您就可以构建完善的应用程序,该应用程序可以接受各种输入(文本、图像、音频)并以直观的方式显示输出。无论您是研究人员、数据科学家还是开发人员,Gradio都能让模型部署对每个人都触手可及。

Gradio的一些好处包括:

  • 它允许您在几分钟内从模型转到演示 (demo)
  • 您不需要前端技能,只需要纯粹的Python实现
  • 它支持文本、图像、音频及更多内容
  • 您可以轻松地在本地共享和部署,也可以免费公开托管

 

Gradio 安装和基本设置

 
要开始使用Gradio,您需要使用pip命令安装该包。

pip install gradio

 

安装好Gradio后,让我们创建您的第一个Gradio应用程序。首先,创建一个名为 gradio_app.py 的文件,然后添加以下代码:

import gradio as gr def greet(name): return f"Hello {name}!" demo = gr.Interface( fn=greet, inputs="text", outputs="text", title="Greeting App" ) demo.launch()

 

使用 python gradio_app.py 运行此代码,您将在 http://127.0.0.1:7860/ 处获得一个正在运行的Web应用程序。该界面提供了一个文本输入、一个提交按钮和一个文本输出——所有这些都是根据您的简单规范自动生成的。

 


Image by Author

 

 

// 理解 Gradio 接口 (Interface)

gr.Interface 类是Gradio的高级应用程序编程接口 (API),它抽象化了复杂性。它需要三个基本组件:

  • 函数 (fn): 处理输入的您的Python函数
  • 输入 (Inputs): 输入类型(s)的规范
  • 输出 (Outputs): 输出类型(s)的规范

 

// 探索输入和输出组件

虽然您可以使用简单的字符串(如 "text""image""audio")来指定组件,但Gradio通过明确的组件类提供了更多的控制。

import gradio as gr demo = gr.Interface( fn=lambda x: x, inputs=gr.Textbox(lines=2, placeholder="Enter text here..."), outputs=gr.Textbox(label="Output") )

 

常见组件包括:

  • gr.Textbox(): 多行文本输入
  • gr.Image(): 图像上传/预览
  • gr.Audio(): 音频文件处理
  • gr.Checkbox(): 布尔值输入
  • gr.Slider(): 数值范围输入
  • gr.Radio(): 多项选择
  • gr.Dropdown(): 从选项中选择

 

// 处理多个输入和输出

实际应用通常需要多个输入或产生多个输出。Gradio可以优雅地使用列表来处理这种情况。

import gradio as gr def process_form(name, is_morning, temperature): greeting = "Good morning" if is_morning else "Hello" message = f"{greeting}, {name}! Temperature: {temperature}°C" return message, temperature * 1.8 + 32 # Convert to Fahrenheit demo = gr.Interface( fn=process_form, inputs=[ gr.Textbox(label="Name"), gr.Checkbox(label="Is it morning?"), gr.Slider(0, 100, label="Temperature (°C)") ], outputs=[ gr.Textbox(label="Greeting"), gr.Number(label="Temperature (°F)") ] ) demo.launch()

 

输出:

 


Image by Author

 

当使用多个输入时,您的函数必须接受相同数量的参数。同样,多个输出要求您的函数返回多个值。

 

// 处理图像

Gradio使得图像处理模型的演示变得异常简单:

import gradio as gr import numpy as np def apply_sepia(image): # Image comes as numpy array with shape (height, width, channels) sepia_filter = np.array([[0.393, 0.769, 0.189], [0.349, 0.686, 0.168], [0.272, 0.534, 0.131]]) sepia_image = image.dot(sepia_filter.T) sepia_image = np.clip(sepia_image, 0, 255).astype(np.uint8) return sepia_image demo = gr.Interface( fn=apply_sepia, inputs=gr.Image(label="Input Image"), outputs=gr.Image(label="Sepia Filtered"), title="Sepia Filter App" ) demo.launch()

 

输出:

 


Image by Author

 

gr.Image 组件会自动处理文件上传、预览,并将图像转换为NumPy 数组以供处理。

 

// 处理音频

音频应用同样简单:

import gradio as gr def transcribe_audio(audio): return "Transcribed text would appear here" demo = gr.Interface( fn=transcribe_audio, inputs=gr.Audio(label="Upload Audio", type="filepath"), outputs=gr.Textbox(label="Transcription"), title="Speech-to-Text Demo" ) demo.launch()

 

在实际应用中,您会在 transcribe_audio(audio) 函数内部调用语音识别模型。此处我们返回一个占位符。

输出:

 


Image by Author

 

 

使用 Gradio Blocks 创建高级布局

 
虽然 gr.Interface 非常适合简单的应用程序,但 gr.Blocks 提供了对布局和数据流的完全控制。可以将 Blocks 视为允许您构建复杂、多步骤应用程序的低级 API。

 

// 实现一个基础 Blocks 示例

import gradio as gr def greet(name): return f"Hello {name}!" with gr.Blocks() as demo: name_input = gr.Textbox(label="Your Name") greet_button = gr.Button("Greet") output = gr.Textbox(label="Greeting") greet_button.click( fn=greet, inputs=name_input, outputs=output ) demo.launch()

 

输出:

 


Image by Author

 

 

// 使用行和列构建复杂布局

这是一个更复杂的示例,集成了Transformers。请确保您的计算机上已安装Transformers包。

pip install transformers import gradio as gr from transformers import pipeline # Load a translation model translator = pipeline("translation_en_to_de", model="t5-small") def translate_text(text): result = translator(text, max_length=40)[0] return result['translation_text'] with gr.Blocks(title="English to German Translator") as demo: gr.Markdown("# 🌍 English to German Translator") with gr.Row(): with gr.Column(): english_input = gr.Textbox( label="English Text", placeholder="Enter text to translate...", lines=4 ) translate_btn = gr.Button("Translate", variant="primary") with gr.Column(): german_output = gr.Textbox( label="German Translation", lines=4 ) # Add example prompts gr.Examples( examples=[ ["Hello, how are you?"], ["The weather is beautiful today"], ["Machine learning is fascinating"] ], inputs=english_input ) translate_btn.click( fn=translate_text, inputs=english_input, outputs=german_output ) demo.launch()

 

输出:

 


Image by Author

 

管理 Gradio 应用程序中的状态

 
状态管理对于交互式应用程序很重要。Gradio提供了两种方法:全局状态和会话状态。

 

// 管理会话状态(用户特定)

对于用户特定的状态,使用Gradio内置的状态管理。下面的示例演示了一个简单的聊天机器人逻辑,使用状态来维护对话历史记录。

import gradio as gr with gr.Blocks() as demo: chatbot = gr.Chatbot(label="Conversation") msg = gr.Textbox(label="Your Message") clear = gr.Button("Clear") state = gr.State([]) def user_message(message, history): # Update history with user message and placeholder for bot return "", history + [[message, None]] def bot_response(history): # Simple echo bot logic response = f"I received: {history[-1][0]}" history[-1][1] = response return history msg.submit( user_message, [msg, state], [msg, state] ).then( bot_response, state, chatbot ) clear.click(lambda: (None, []), None, [chatbot, state]) demo.launch()

 

 

部署和共享您的应用程序

 
要快速共享,Gradio可以创建公共URL:

demo.launch(share=True)

 

这会生成一个临时的、可公开访问的链接,非常适合演示和与同事快速共享。它通常有效期为72小时。

要实现免费、永久托管:

  • 创建一个Hugging Face账户
  • 使用Gradio作为软件开发工具包 (SDK) 创建一个新的Space
  • 上传您的应用程序文件:app.py(您的主应用程序文件)和requirements.txt(Python依赖项)。requirements.txt文件中应包含的内容示例:
torch transformers

 

  • 将您的代码推送到Git:
git add . git commit -m "Initial commit" git push

 

您的应用程序将可在 https://huggingface.co/spaces/your-username/your-space-name 访问。

Gradio应用程序可以部署在任何支持Python Web应用程序的平台上:

  • 使用 demo.launch(server_name="0.0.0.0", server_port=7860)
  • 将应用程序及其所有依赖项打包到Docker容器中
  • 部署在AWS、Google Cloud、Azure和其他平台上

 

构建图像分类仪表板

 
将我们所学的一切结合起来,让我们构建一个项目。这个项目是一个使用PyTorch和Gradio构建的简单图像分类仪表板。它使用一个预训练的深度学习模型,使用户可以通过Web界面上传图像并接收生成的五大预测类别。

我们将使用ResNet-50,这是一种著名的在ImageNet数据集上训练的卷积神经网络。由于模型是预训练的,该项目不需要任何自定义训练或标记数据。它旨在用于演示、实验和教育目的,而非生产使用。

我们将使用Gradio提供一个轻量级用户界面,以便用户可以直接从浏览器与模型进行交互。

import gradio as gr import torch from torchvision import models, transforms from PIL import Image # Load pre-trained model model = models.resnet50(pretrained=True) model.eval() # Preprocessing preprocess = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize( mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] ) ]) def classify_image(image): image = Image.fromarray(image) input_tensor = preprocess(image) input_batch = input_tensor.unsqueeze(0) with torch.no_grad(): output = model(input_batch) # Get top 5 predictions probabilities = torch.nn.functional.softmax(output[0], dim=0) top5_prob, top5_catid = torch.topk(probabilities, 5) results = [] for i in range(top5_prob.size(0)): results.append(f"Category {top5_catid[i].item()}: {top5_prob[i].item()*100:.2f}%") return "\n".join(results) demo = gr.Interface( fn=classify_image, inputs=gr.Image(label="Upload Image"), outputs=gr.Textbox(label="Top 5 Predictions"), title="Image Classifier" ) demo.launch()

 

总结

 
Gradio通过消除模型开发与用户交互之间的传统障碍,使机器学习部署变得容易。通过本速成课程,您已经了解了创建Gradio接口、用于不同输入/输出类型的组件化设计、使用Gradio Blocks进行高级布局、状态管理以及用于共享工作的部署策略的基础知识。

Gradio的真正力量在于其简单性和灵活性。无论您是构建快速原型进行内部测试,还是构建完善的应用程序供公众使用;Gradio都为您提供了将机器学习模型付诸实践所需的工具。
 
 

Shittu Olumide 是一位软件工程师和技术作家,热衷于利用尖端技术来构建引人入胜的叙事,对细节有敏锐的洞察力,并擅长简化复杂的概念。您也可以在Twitter上找到Shittu。




🚀 想要体验更好更全面的AI调用?

欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。

0

评论区