Gradio 基础使用示例

文章目录

  • Gradio 基础使用示例
    • 简介
    • 安装
    • 示例-简单的输入、输出
    • 示例-启动配置
    • 示例-聊天对话
    • 示例-多页面Tab切换
    • 示例-使用Block自定义布局
    • 示例-Plot绘图
    • 示例-状态管理
    • 示例-提示、进度条
    • 参考

Gradio 基础使用示例

简介

  • Gradio 是一个用于构建快速原型和部署机器学习应用程序的开源库。它的目标是使机器学习模型的创建和部署变得简单易用,无需深入了解 Web 开发或前端知识。
  • 以下是 Gradio 的一些关键特点和优势:
    1. 简单易用: Gradio 提供了简单直观的 API,使得用户能够快速创建交互式的机器学习界面,无需繁琐的代码编写。
    2. 多样化输入输出: Gradio 支持多种类型的输入和输出,包括图像、文本、音频等,同时还能够处理多个输入和输出。
    3. 即时预览: 在开发过程中,Gradio 提供了即时预览功能,让用户可以实时查看和测试他们的应用程序,以便进行调试和优化。
    4. 部署简单: Gradio 允许用户一键部署他们的应用程序,无需复杂的配置或部署流程,可以将应用程序轻松地分享给其他人使用。
    5. 可定制性: 尽管 Gradio 提供了许多预定义的组件和样式,但用户仍然可以通过自定义 CSS 和 JavaScript 来定制界面的外观和行为。
    6. 跨平台兼容性: Gradio 可以在多个平台上运行,包括本地环境、云端服务器以及基于 Docker 的容器中。
  • 总的来说,Gradio 提供了一个简单而强大的工具,使得任何人都能够轻松地构建和部署交互式的机器学习应用程序,从而促进了机器学习技术的普及和应用。
  • 当然,你也可以用Gradio来做一些简单功能的可视化,以便于日常使用,不是非要应用到AI方面。

安装

  • $ pip install gradio==4.29 -i "https://pypi.doubanio.com/simple/"
  • 当前安装的版本信息,输出如下
Successfully installed aiofiles-23.2.1 altair-5.3.0 attrs-23.2.0 contourpy-1.2.1 cycler-0.12.1 ffmpy-0.3.2 filelock-3.14.0 fonttools-4.51.0 fsspec-2024.3.1 gradio-4.29.0 gradio-client-0.16.1 httpcore-1.0.5 httpx-0.27.0 huggingface-hub-0.23.0 importlib-resources-6.4.0 jsonschema-4.22.0 jsonschema-specifications-2023.12.1 kiwisolver-1.4.5 markdown-it-py-3.0.0 matplotlib-3.8.4 mdurl-0.1.2 orjson-3.10.3 pillow-10.3.0 pydub-0.25.1 pygments-2.18.0 pyparsing-3.1.2 python-multipart-0.0.9 referencing-0.35.1 requests-2.31.0 rich-13.7.1 rpds-py-0.18.1 ruff-0.4.3 semantic-version-2.10.0 shellingham-1.5.4 tomlkit-0.12.0 typer-0.12.3 urllib3-2.2.1 websockets-11.0.3

示例-简单的输入、输出

import gradio as grprint(gr.__version__)def process_data(text, image, filter_type):print(type(image))# 数据处理逻辑processed_text = text.upper()if filter_type:image = image.convert(filter_type)return processed_text, imageiface = gr.Interface(fn=process_data,inputs=[gr.Textbox(label="输入文本"),gr.Image(label="上传图片", type="pil"),gr.Radio(label="图像转换模式", info="参考 https://blog.csdn.net/u012977885/article/details/105733554", choices=["1", "L", "P", "RGB", "RGBA", "CMYK", "YCbCr", "I", "F"], value="L"), ],outputs=[gr.Text(label="处理后的文本"), gr.Image(label="处理后的图片")],title="文本、图像处理",description="输入文本、图像,以获得处理。",
)iface.launch()

image.png

示例-启动配置

  • 一些常用的启动配置说明
# 设置启动端口
iface.launch(server_name='127.0.0.1', server_port=8080, show_error=True)# 设置用户、密码
iface.launch(auth=("admin", "admin12345"))
# 更复杂的用户、密码校验
def my_auth(username, password):# 例如可以连接到外部系统校验登录return username == "admin" and password == "admin12345"
iface.launch(auth=my_auth, auth_message="login error")# 在互联网分享(Gradio的服务器会提供XXX.gradio.app地址)
iface.launch(share=True)

示例-聊天对话

  • 聊天接口
  • 通过使用yield,可以实现流式响应 Streaming outputs
import gradio as gr
import timeprint(gr.__version__)def slow_echo(message, history):for i in range(len(message)):time.sleep(0.05)yield "机器人回复: " + message[: i+1]iface = gr.ChatInterface(slow_echo).queue()iface.launch()

image.png

示例-多页面Tab切换

  • 最简单的
import gradio as gr
import timedef function1(input1):return f"处理结果: {input1}"def function2(input2):return f"分析结果: {input2}"iface1 = gr.Interface(function1, "text", "text")
iface2 = gr.Interface(function2, "text", "text")tabbed_interface = gr.TabbedInterface([iface1, iface2], ["界面1", "界面2"])
tabbed_interface.launch()

image.png

  • 结合前面2个示例
import gradio as gr
import timedef process_data(text, image, filter_type):print(type(image))# 数据处理逻辑processed_text = text.upper()if filter_type:image = image.convert(filter_type)return processed_text, imagebase_iface = gr.Interface(fn=process_data,inputs=[gr.Textbox(label="输入文本"),gr.Image(label="上传图片", type="pil"),gr.Radio(label="图像转换模式", info="参考 https://blog.csdn.net/u012977885/article/details/105733554", choices=["1", "L", "P", "RGB", "RGBA", "CMYK", "YCbCr", "I", "F"], value="L"), ],outputs=[gr.Text(label="处理后的文本"), gr.Image(label="处理后的图片")],title="文本、图像处理",description="输入文本、图像,以获得处理。",
)def slow_echo(message, history):for i in range(len(message)):time.sleep(0.05)yield "机器人回复: " + message[: i+1]chat_iface = gr.ChatInterface(slow_echo).queue()tabbed_interface = gr.TabbedInterface([base_iface, chat_iface], ["基础界面", "聊天界面"])
tabbed_interface.launch()

image.png

示例-使用Block自定义布局

import gradio as gr
import timedef process_data(text, image, filter_type):print(type(image))# 数据处理逻辑processed_text = text.upper()if filter_type:image = image.convert(filter_type)return processed_text, imagebase_iface = gr.Interface(fn=process_data,inputs=[gr.Textbox(label="输入文本"),gr.Image(label="上传图片", type="pil"),gr.Radio(label="图像转换模式", info="参考 https://blog.csdn.net/u012977885/article/details/105733554", choices=["1", "L", "P", "RGB", "RGBA", "CMYK", "YCbCr", "I", "F"], value="L"), ],outputs=[gr.Text(label="处理后的文本"), gr.Image(label="处理后的图片")],title="文本、图像处理",description="输入文本、图像,以获得处理。",
)def slow_echo(message, history):for i in range(len(message)):time.sleep(0.05)yield "机器人回复: " + message[: i+1]chat_iface = gr.ChatInterface(slow_echo).queue()with gr.Blocks() as block1_iface:# 多个Row,均分纵轴with gr.Row():# 多个Column,则均分横纵with gr.Column():input_text = gr.Textbox(label="输入")submit_button = gr.Button("提交")with gr.Column():output_text = gr.Label(label="输出")submit_button.click(fn=lambda x: f"你输入了: {x}", inputs=input_text, outputs=output_text)with gr.Blocks() as block2_iface:# Group 连接2个组件with gr.Group():input1 = gr.Textbox()input2 = gr.Slider()# Accordion 连接2个组件,并包含,并有标题提示with gr.Accordion("详细设置"):checkbox = gr.Checkbox(label="选项")dropdown = gr.Dropdown(choices=["选项1", "选项2"])submit_button = gr.Button("提交")output_label = gr.Label()submit_button.click(fn=lambda x, y, z: f"{x}, {y}, {z}", inputs=[input1, input2, checkbox], outputs=output_label)with gr.Blocks() as block3_iface:with gr.Row():with gr.Column():input_text = gr.Textbox(label="输入文本")with gr.Group():input_image = gr.Image(label="上传图片", type="pil")input_mode = gr.Radio(label="图像转换模式", info="参考 https://blog.csdn.net/u012977885/article/details/105733554", choices=["1", "L", "P", "RGB", "RGBA", "CMYK", "YCbCr", "I", "F"], value="L")submit_button = gr.Button("提交")with gr.Column():output_text = gr.Text(label="处理后的文本")output_image = gr.Image(label="处理后的图片")submit_button.click(fn=process_data, inputs=[input_text, input_image, input_mode], outputs=[output_text, output_image])tabbed_interface = gr.TabbedInterface([base_iface, chat_iface, block1_iface, block2_iface, block3_iface], ["基础界面", "聊天界面", "Block1界面", "Block2界面", "Block3界面"]
)
tabbed_interface.launch()

image.png

示例-Plot绘图

  • 数据文件 age.csv
  • 基础
import gradio as gr
import pandas as pd# pip install plotly
import plotly.express as px
import matplotlib.pyplot as pltdef explore_data(dataset, columns):df = pd.read_csv(dataset)# plotly库,自带功能更多# fig = px.scatter(df, x=columns[0], y=columns[1])# matplotlib库fig = plt.figure()plt.scatter(df[columns[0]], df[columns[1]])plt.xlabel(columns[0])plt.ylabel(columns[1])return figdemo = gr.Interface(fn=explore_data,inputs=[gr.File(label="上传CSV文件"),gr.CheckboxGroup(choices=["num", "age", "tall"], label="选择列"),],outputs=gr.Plot(),
)
demo.launch()

image.png

  • 数据可视化探索工具
import gradio as gr
import pandas as pd# pip install seaborn
import seaborn as sns
import matplotlib.pyplot as pltdef plot_data(file, chart_type):df = pd.read_csv(file)if chart_type == "柱状图":plt.figure(figsize=(10, 6))sns.barplot(data=df)elif chart_type == "折线图":plt.figure(figsize=(10, 6))sns.lineplot(data=df)plt.tight_layout()return pltiface = gr.Interface(plot_data, inputs=[gr.File(), gr.Dropdown(["柱状图", "折线图"])], outputs="plot"
)
iface.launch()

image.png

示例-状态管理

  • 每次点击Submit,状态值都会变
  • 官方文档 https://www.gradio.app/guides/interface-state
import gradio as grdef update_output(input_text, state_obj):state_obj = state_obj or 0state_obj += 1return f"您输入了:{input_text}", f"状态值:{state_obj}", state_obj# gr.State() 是会话级状态
# 全局状态,直接在代码里面定义一个state_obj变量即可
iface = gr.Interface(fn=update_output,inputs=[gr.Textbox(), gr.State()],outputs=[gr.Textbox(), gr.Label(), gr.State()]
)
iface.launch()

image.png

示例-提示、进度条

  • 来自官方
    • https://www.gradio.app/guides/key-features#alert-modals
    • https://www.gradio.app/guides/key-features#progress-bars
  • 提示(info、warning、error)
def start_process(name):gr.Info("Starting process")if name is None:gr.Warning("Name is empty")...if success == False:raise gr.Error("Process failed")
  • 进度条
import gradio as gr
import timedef slowly_reverse(word, progress=gr.Progress()):progress(0, desc="Starting")time.sleep(1)progress(0.05)new_string = ""for letter in progress.tqdm(word, desc="Reversing"):time.sleep(0.25)new_string = letter + new_stringreturn new_stringdemo = gr.Interface(slowly_reverse, gr.Text(), gr.Text())demo.launch()

image.png

  • 进度条(通过设置gr.Progress(track_tqdm=True),自动追踪tqdm,显示进度)
import gradio as gr
import time
import tqdm# gr.Progress(track_tqdm=True) 必须写在方法入参这里
def slowly_reverse2(word, progress=gr.Progress(track_tqdm=True)):time.sleep(1)new_string = ""tqdm_progress = tqdm.tqdm(word, desc="Reversing")for letter in tqdm_progress:time.sleep(0.25)new_string = letter + new_stringreturn new_stringdemo = gr.Interface(slowly_reverse2, gr.Text(), gr.Text())demo.launch()

参考

  • 官方文档 https://www.gradio.app/guides/key-features
  • 一文搞懂模型展示工具Gradio的所有功能
  • Gradio入门到进阶全网最详细教程[一]:快速搭建AI算法可视化部署演示(侧重项目搭建和案例分享)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/685558.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

更新、简略高效的用git(Gitee篇)

前提:因为很多编译软件虽然可以连接git,但是操作起来还是比较懵,不同软件有不同的上传git的方式,而且有的连着GitHub有的是Gitee,那么使用Git Bash无疑是万无一失的方式 然后这一篇也仅针对上传Gitee,上传G…

(2024,SD,条件 GAN,蒸馏,噪声到图像翻译,E-LatentLPIPS)将扩散模型蒸馏为条件 GAN

Distilling Diffusion Models into Conditional GANs 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 3. 方法 3.1 用于一步生成的配对的噪声到图像翻译 3.2 用于潜在空间蒸馏…

【机器学习300问】83、深度学习模型在进行学习时梯度下降算法会面临哪些局部最优问题?

梯度下降算法是一种常用的优化方法,用于最小化损失函数以训练模型。然而,在使用梯度下降算法时,可能会面临以下局部最优问题。 (一)非凸函数的局部极小值 问题描述:在复杂的损失函数中,如果目…

Pandas数据取值与选择

文章目录 第1关:Series数据选择第2关:DataFrame数据选择方法 第1关:Series数据选择 编程要求 本关的编程任务是补全右侧上部代码编辑区内的相应代码,要求实现如下功能: 添加一行数据,时间戳2019-01-29值为…

深度学习课程论文精读——ESRGAN

目录 1.研究概述 2.论文创新 2.1 改进生成器的网络框架 2.2 改进判别器 2.3 改进感知损失 2.4 网络插值 3.实验 3.1 评价指标 3.2 训练细节 3.3 对比实验 3.4 消融实验 3.5 网络插值 4.总结 5.阅读参考 文章标题:《ESRGAN: Enhanced Super-Resolution…

Ardupilot Rpanion iperf网络性能测试

Ardupilot Rpanion iperf网络性能测试 1. 源由2. 分析3. 安装4. 测试4.1 第一次测试4.1.1 iperf测试参数A4.1.1.1 测试链路14.1.1.2 测试链路24.1.1.3 测试链路3 4.1.2 iperf测试参数B - 测试链路34.1.2.1 测试数据4.1.2.2 数据简单分析4.1.2.3 数据深入分析4.1.2.4 模拟测试网…

图像锐化——非锐化掩膜USM和锐化掩膜SM(附代码)

非锐化掩膜 (USM) 和锐化掩膜 (SM) 都是常用的图像锐化技术。它们都可以通过增强图像的边缘信息来提高图像的清晰度。 目录 一、非锐化掩膜USM1.1 USM原理1.2 USM实现步骤1.3 优点1.4 代码 二、锐化掩膜SM2.1 SM原理2.2 SM实现步骤2.3 优点2.4 代码 三、锐化效果四、总结4.1 效…

Spring框架中常见注解

Spring: SpringMVC: RequestMapping用在类上表示所有该类下方法的父路径 RequestParam 做映射,前端请求的参数映射到控制器Controller的处理方法上的参数上。 【当参数需要设置默认值(前端没有发送这个参数)、参数名…

影刀进行shopee商品排名零代码爬取

需要研究shopee平台的排名更新时间段和周期,几分钟用影刀写了一个爬取应用,每10分钟进行一次排名爬取(以fan‘风扇’为例),0代码爬取。 打开’fan’关键词搜索网页;等待网页加载;滚动进一步加载…

Python | Leetcode Python题解之第71题简化路径

题目: 题解: class Solution:def simplifyPath(self, path: str) -> str:names path.split("/")stack list()for name in names:if name "..":if stack:stack.pop()elif name and name ! ".":stack.append(name)re…

问题:IDEA中打包插件,打出来的jar包一直是最原始的代码

问题详情&#xff1a; 我在配置maven的分离式打包时&#xff0c;打出来的jar包运行不含有我新增的代码&#xff08;一直都是旧的&#xff09; 打包配置&#xff1a; pom.xml: <!-- Maven Jar 插件配置 --><plugin><groupId>org.apache.maven.plugins</gr…

在线教程|二次元的福音!一键部署APISR,动漫画质飞跃升级

从守护城市安全的「火眼金睛」&#xff0c;到探索人体奥秘的医学之窗&#xff0c;再到娱乐产业的视觉盛宴&#xff0c;乃至遥望宇宙的卫星视角&#xff0c;超分辨率技术重塑着我们观察世界的新维度&#xff0c;让每一寸画面绽放前所未有的清晰与真实。 近年来&#xff0c;越来…