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.mzph.cn/pingmian/9745.shtml

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

相关文章

wandb: - 0.000 MB of 0.011 MB uploaded持续出现的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【异常检测】新版异常检测库anomalib的使用

every blog every motto: There’s only one corner of the universe you can be sure of improving, and that’s your own self. https://blog.csdn.net/weixin_39190382?spm1010.2135.3001.5343 0. 前言 异常检测库anomalib的使用 1. 前提 1.1 数据组织形式 说明&#…

15 华三华为链路聚合综述

1 链路聚合简介 以太网链路聚合通过将多条以太网物理链路捆绑在一起形成一条以太网逻辑链路,实现增加链路带宽的目的,同时这些捆绑在一起的链路通过相互动态备份,可以有效地提高链路的可靠性。 2 成员端口的状态 聚合组内的成员端口具有以下…

Ps 滤镜:视频

Ps菜单:滤镜/视频 Filter/Video “视频”滤镜子菜单中包含了“NTSC 颜色”和“逐行”两个滤镜。 这两个滤镜都是针对视频和电视播放的特定需求设计的。 “逐行”滤镜主要解决交错视频的视觉问题,而“NTSC 颜色”滤镜则确保色彩在电视播放时的兼容性和准确…

Java设计模式 _结构型模式_享元模式

一、享元模式 1、享元模式 享元模式(Flyweight Pattern)是一种结构型模式。主要用于减少创建对象的数量,以减少内存占用和提高性能。主要解决有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来&#x…

django中的日志处理

1、事件追踪 在什么样的时间发生了什么样的事情 2、bug调试 3、程序告警 4、大数据统计 ELK 日志分析系统 elasticsearh logstasn kibana 名词概念 loggers:日志器 —— 定大方向:1 handlers:处理器 —— 执行:3 formatters&#xff…

【C++】详细版 RAII技术的应用之智能指针(智能指针发展历程和简单模拟实现介绍)

目录 前言 一、智能指针有什么用? 二、什么是RAII(智能指针的底层思想)? 三、智能指针的发展历程以及模拟实现 1.auto_ptr(C98) 2.unique_ptr(C11) 3.shared_ptr(C11) 前言 C中…

【vulhub靶场】Apache 中间件漏洞复现

【vulhub靶场】Apache 中间件漏洞复现 一、Apache HTTPD 换行解析漏洞(CVE-2017-15715)1. 漏洞详情2. 影响版本3. 漏洞复现 二、Apache多后缀解析漏洞(apache_parsing_vulnerability)1. 漏洞详情2. 漏洞复现 三、Apache HTTP Serv…

【Python爬虫实战入门】:教你一个程序实现PPT模版自由

文章目录 💥一、PPT模版爬取🔥1.1 第一个爬虫🚲1. 获取下载页面链接 ❤️1.2 第二个爬虫🚲1.3 第三个爬虫🎈2. 文件保存 ❤️1.4 翻页处理 🔥二、完整代码 🔥🔥🔥 Pytho…

【Linux】简易进度条的实现

🎉博主首页: 有趣的中国人 🎉专栏首页: Linux 🎉其它专栏: C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好,本片文章将会讲解Linux中进度条的实现的相关内容。 如果看到最后您觉得这篇文章写得…

深度学习论文: LightGlue: Local Feature Matching at Light Speed

深度学习论文: LightGlue: Local Feature Matching at Light Speed LightGlue: Local Feature Matching at Light Speed PDF: https://arxiv.org/pdf/2306.13643 PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: https://github.com/shanglianlm0525/…

AI算法-高数2-导数定义和公式

P14 2.1 导数的定义(一):2.1 导数的定义_哔哩哔哩_bilibili 导数定义: 导数公式: P15 2.1 导数的定义(二):2.1 导数的定义(二)_哔哩哔哩_bilibili [a,b]可导,a的端点:右可导,b端点&…

Leetcode—138. 随机链表的复制【中等】(cend函数)

2024每日刷题(129) Leetcode—138. 随机链表的复制 实现代码 /* // Definition for a Node. class Node { public:int val;Node* next;Node* random;Node(int _val) {val _val;next NULL;random NULL;} }; */class Solution { public:Node* copyRan…

Spring JdbcTemplate使用临时表+事务会话管理实现数据新增、查询及自动清除功能

需求描述: 由于某些情况下当查询过滤参数过大时,执行sql由于参数过大而报错,此时 需要使用临时表的方式,即 当参数超过某个阀值(如 1000,可调整)新增一张临时表,将原表 与 该临时表进…

代码随想录算法训练营第六十二天|503.下一个更大元素II、42.接雨水

代码随想录算法训练营第六十二天|503.下一个更大元素II、42.接雨水 503.下一个更大元素II 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元…

第十一篇:操作系统新纪元:智能融合、量子跃迁与虚拟现实的交响曲

操作系统新纪元:智能融合、量子跃迁与虚拟现实的交响曲 1 引言 在数字化的浪潮中,操作系统如同一位智慧的舵手,引领着信息技术的航船穿越波涛汹涌的海洋。随着人工智能、物联网、量子计算等前沿技术的蓬勃发展,操作系统正站在一个…

富士Apeos 2350 NDA复印机报062 360代码故障

故障描述: 富士Apeos 2350 NDA复印机新机器刚拆箱安装,开机正常,自检扫描头一卡一卡的往前动几下就不动了、扫描灯也不亮扫描头也不能正常复位;按机器的复印键直接报062 360代码; 解答: 此代码为扫描故障&a…

PDF高效编辑:一键批量,PDF转图片的快速解决方案

在数字化时代,PDF文件已成为工作和学习中不可或缺的一部分。然而,有时我们可能需要将PDF转换为图片,以便更轻松地编辑、共享或处理。为了满足这一需求,许多高效的PDF编辑工具应运而生,其中“办公提效工具”一键批量PDF…

【每日八股】淘天一面

🔥 个人主页: 黑洞晓威 😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害 rocketmq的消息重复发送问题?如何保证幂等? 如何保证幂等性: 消息 Key 设置:不建议…

如何自定义Markdown中插入图片的位置

工作中常常需要在VsCode下写Markdown笔记,在写笔记的过程中不免需要插入图片。  Markdown中插入笔记的操作往往是比较繁琐的,比如:在文档中引用本地某个文件夹下的图片,首先需要你先保存图片到本地路径,然后需要你在文…