Gradio使用介绍

  与他人分享你的机器学习模型、API或数据科学工作流的最佳方式之一,就是创建一个交互式应用程序,让用户或同事可以在他们的浏览器中尝试演示,Gradio是创建提供了用非常方便的方式快速创建一个前端交互应用,那如何使用Gradio呢?因为用Gradio创建的所有前端交互应用,所以,需要按照Python环境,安装后可以下载VSCode作为IDE工具,环境安装后,pip install gradio后即可开始用gradio框架快速搭建一个前端应用。  

  下图是一个用gradio搭建的包含name,password等输入信息的前端应用,这里使用了gradio提供的Interface方法,Interface 是 Gradio 的主要高级类,它允许你在几行代码中围绕机器学习模型(或任何 Python 函数)创建一个基于 Web 的图形用户界面(GUI)/ 演示。你需要指定三个参数:(1)要为之创建 GUI 的函数,(2)所需的输入组件,以及(3)所需的输出组件。还可以使用其他参数来控制演示的外观和行为。使用gradio.Interface class的使用格式如下所示:

gradio.Interface(fn, inputs, outputs, ···)
import gradio as gr

def generate_human_message(username, password, sex, age):
    human = {}
    human["name"] = username
    human["password "] = password
    human["sex"] = "man" if sex == "Male" else "woman"
    human["age"] = age
    return list(human.values())

demo1 = gr.Interface(fn=generate_human_message, inputs=[
    "text", "text", gr.Radio(["Male", "Female"], label="sex", info="choose sex"), gr.Slider(1, 100, value=20, label="age", info="show age")], outputs="text")
demo1.launch()

  最后一行代码是demo1.launch(),这样运行代码后,默认在7860端口启动应用,应用启动的截图如下所示,输入相关信息,提交Submit button,执行就是generate_human_message这个function。

  inputs里面放入需要在前端显示的coponent,这些component可以是text类型的input,也可以是Radio,Slider等,这些component负责接收用户的输入,输入的内容传入function,作为function的参数,这里,outputs也是一个text类型的input,function返回的内容,默认显示在outputs的component上。Clear,Submit,Flag button是Interface这个class默认自带的。

  实际,Gradio除了支持上面的component外,还支持CheckBox,DropDownList等component。如下图所示,这里定义了TextBox,CheckBox,Radio,Dropdown,Slider五种类型的component,在定义每个component时,可以给该component制定label名称,对于TextBox还可以制定type类型,type类型包括text,password,email。

  运行这个代码,应用启动后入下图所示:可以看到可以选择下拉列表信息等,也可以选择多选框和单选框等。

  除了通过Interface在快速编写一个用于前端交互的应用,还可以使用Blocks,Blocks 是 Gradio 的低级 API,它允许你创建比 Interface 更自定义的 Web 应用程序和演示,而这些都是完全使用 Python 实现的。与 Interface 类相比,Blocks 在以下方面提供了更多的灵活性和控制:(1)组件布局,(2)触发函数执行的事件,(3)数据流(例如,输入可以触发输出,而输出可以触发下一层输出)。Blocks 还提供了将相关演示组合在一起的方式,例如使用选项卡。

import gradio as gr

def return_result(name, password):
    return f""" my name is {name}, my password is {password}"""

with gr.Blocks(css=".gradio-container {background-color: white}") as demo:
    gr.Markdown("Here is a block demo")
    with gr.Row():
        usernameText = gr.Textbox(label="email", type="email")
        passwordText = gr.Textbox(label="password", type="password")
        number = gr.Number(label="number")
        out = gr.TextArea(label="out", line=5)
    button = gr.Button(label="Submit")
    button.click(fn=return_result, inputs=[
                 usernameText, passwordText], outputs=out)
    demo.launch()

  gr.Blocks()以with开头,通过with gr.Row()和with gr.column()可以自定义布局。上面的应用启动后显示如下图所示,可以看到除了布局外,还可以对component的样式进行处理,比如设置颜色等。

  除了在component中添加css样式外,还可以把css相关内容放到统一的地方,component引用已有的样式即可,具体代码如下所示,在css中,#表示element Id,.表示element class.

import gradio as gr
css = """
#warning {background-color: #FFCCCB}
.feedback textarea {font-size: 24px !important}
"""

with gr.Blocks(css=css) as demo:
    with gr.Row():
        with gr.Column(scale=1):
            gr.Textbox(label="name", elem_id="warning")
            gr.Textbox(label="age", elem_classes="feedback")
        with gr.Column(scale=2):
            gr.Dropdown(["one", "two", "tree"], label="class")
            gr.CheckboxGroup(["male", "female"], label="sex")
        with gr.Column(scale=1):
            gr.Radio(["is_girl"], label="is_girl")
            gr.Slider(1, 100, 20)
    with gr.Row():
        gr.Button(value="Submit")
        gr.Button(value="Clear")
demo.launch()

  应用启动后的界面入下图所示,可以看到,通过Blocks()可以更加自由的进行页面布局。

   除了上面使用到的component,Gradio还提供很多其他Component,包括一些用于显示数据的图表等,详细信息可参见官网。

   除了基本功能外,Gradio还提供很多其他功能,例如gr.TabbedInterface()可以将多个页面进行组合,前面的例子中,删除掉demo.launch()方法,引入demo1,demo2,使用gr.TabbedInterface()方法就可以对多个UI tab进行整合。

from interface_demo import demo1
from component_demo import demo2
import gradio as gr

app = gr.TabbedInterface([demo1, demo2], ["First", "Second"])
app.launch()

   如果应用的并发流量很大,gradio还提供排队处理机制,在demo.queue()中可以指定并发处理数量,例如

demo.queue(concurrency_count=3)
with gr.Blocks() as demo:
    #...
demo.queue()
demo.launch()

以上就是Gradio提供的常用功能,更多信息可以查看官网进行熟悉使用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OLED透明屏显示技术:未来显示科技的领航者

OLED透明屏显示技术是一种创新性的显示技术,它的特殊性质使其成为未来显示科技的领航者。 OLED透明屏具有高对比度、快速响应时间、广视角和低功耗等优势,同时,其透明度、柔性和薄型设计使其成为创新设计的理想选择。 本文将深入探讨OLED透…

YII项目在Docker中运行缓慢

缓慢问题分析 请求YII的api时间请求原生查询时间win10 上运行docker上的php api异常慢ubuntu 中拉代码git报错 请求YII的api时间 请求原生查询时间 win10 上运行docker上的php api异常慢 链接阿里数据的 入口直接返回的 网上有说是docker的dns解析慢; 也有说是…

【报错记录】疯狂踩坑之RockyLinux创建Raid1镜像分区,Raid分区在重启后消失了!外加华硕主板使用Raid模式后,硬盘在系统中无法找到问题

前言 为了摆脱对于专业NAS的依赖,我决定专门使用一台Linux服务器安装NAS程序的方式实现NAS功能,这里就需要用到Raid功能,由于目前我只有3块SSD(256G500G500G),在ChatGPT的推荐下还是使用一个256G系统盘2块…

等保测评各个级别的详细内容

等保测评是指信息系统安全等级保护测评,是我国信息安全领域中的一项重要工作。根据国家标准《信息系统安全等级保护基本要求》(GB/T 22239-2008)和《信息系统安全等级保护测评技术要求》(GB/T 25070-2010)。 等保测评分为五个级别,分别是:一级…

LLM推理部署(一):LLM七种推理服务框架总结

自从ChatGPT发布以来,国内外的开源大模型如雨后春笋般成长,但是对于很多企业和个人从头训练预训练模型不太现实,即使微调开源大模型也捉襟见肘,那么直接部署这些开源大模型服务于企业业务将会有很大的前景,本文将介绍七…

WebGPT VS WebGPU

推荐:使用 NSDT编辑器 快速搭建3D应用场景 随着WebGPU的引入,Web开发发生了有趣的转变,WebGPU是一种新的API,允许Web应用程序直接访问设备的图形处理单元(GPU)。这种发展意义重大,因为 GPU 擅长…

浅析token

上一章节我们学习了cookie和session机制,但是他们都有一些缺点,所有这次我们来了解一个机制---token。 一、cookie和session的缺点 cookie信息存储在客户端浏览器上,安全性较低,所以浏览器加入了一些限制确保cookie不会被恶意使用…

2023年京东婴童纸尿裤行业数据分析(京东数据运营)

当前,面对出生率下降、消费疲软等各种大环境不确定性,不仅是线下母婴店深陷于“生意难”的境地,线上消费同样受影响颇深,婴童纸尿裤类目便是如此。下面结合鲸参谋平台的数据,从行业大盘、品牌端等方面来看一下婴童纸尿…

Linux中的dpkg指令(dpkg -l | grep XXX等)

dpkg是Debian包管理系统中的一个工具,用于在Linux系统中安装、升级、删除和管理软件包。它是Debian、Ubuntu以及基于它们的发行版中的包管理器。 dpkg 有很多用法,常用之举例:dpkg -l | grep apt 显示系统中安装的与apt相关(命名&#xff09…

什么是跨域(cross-origin)请求,如何解决跨域问题?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 跨域请求和跨域问题⭐ 解决跨域问题的方法1. CORS(跨域资源共享)2. JSONP(JSON with Padding)3. 代理服务器4. WebSocket5. 使用服务器中继 ⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff…

我是如何成为一名全栈工程师的?

经历了将近一年的时间,我终于阶段性地完成了从iOS开发到后端开发的角色转变。 现在我可以自豪地说,我已经接近一名全栈工程师了,已经熟悉了后端开发的各种工具、环境和一些后端工作的方式。 接下来,我将继续熟悉框架、工具、语言…

企业主流全链路监控系统 - 理论

企业主流全链路监控系统 1. 问题背景2. 目标要求1. 探针的性能消耗2. 代码的侵入性3. 可扩展性4.数据的分析 3. 功能模块1. 埋点与生成日志2. 收集和存储日志3. 分析和统计调用链路数据,以及时效性4. 展现以及决策支持 4. Google Dapper1. Span2. Trace3. Annotatio…

QT设置mainwindow的窗口title

QT设置mainwindow的窗口title 在QT程序中,通常会有**aaaa-[bbbbbbb]**这种形式的title,对于刚上手qt的程序员同学,可能会简单的以为修改这种title,就是使用setWindowTitle这个接口,其实只对了一半,这种形式…

Ansible学习笔记9

yum_repository模块: yum_repository模块用于配置yum仓库的。 测试下: [rootlocalhost ~]# ansible group1 -m yum_repository -a "namelocal descriptionlocalyum baseurlfile:///mnt/ enabledyes gpgcheckno" 192.168.17.106 | CHANGED &g…

春秋云镜 CVE-2018-2894

春秋云镜 CVE-2018-2894 Weblogic 任意文件上传漏洞 靶标介绍 Oracle Fusion Middleware 的 Oracle WebLogic Server 组件中的漏洞(子组件:WLS - Web Services)。受影响的受支持版本包括 12.1.3.0、12.2.1.2 和 12.2.1.3。易于利用的漏洞允…

15.设备驱动的IO(阻塞/非阻塞)

目录 IO操作 两个阶段 阻塞操作 非阻塞操作 非阻塞模式实验 dts_led.c文件 app.c文件 Makefile文件 执行过程 阻塞IO:等待队列 wait_queue_head结构体:等待队列头 初始化等待队列头 init_waitqueue_head() DECLARE_WAIT_QUEUE_HEAD(name) …

matlab使用教程(24)—常微分方程(ODE)求解器

1.常微分方程 常微分方程 (ODE) 包含与一个自变量 t(通常称为时间)相关的因变量 y 的一个或多个导数。此处用于表示 y 关于 t 的导数的表示法对于一阶导数为 y ′ ,对于二阶导数为 y ′′,依此类推。ODE 的阶数等于 y 在方程中…

每日一题(反转链表)

每日一题(反转链表) 206. 反转链表 - 力扣(LeetCode) 思路: 可以定义一个新的newhead结构体指针。再定义cur指针和next指针互相配合,将原链表中的节点从头到尾依次头插到newhead链表中,同时更…

android:控件TextView

一、系统学习Android控制键TextView,我的笔记里面有尝试学着使用自定义控件。 二、具体内容 1.如果在代码中给textView赋值,在xml中也给textView赋值了最后运行出来的结果显示代码中赋的值。因此得出结论,代码中的赋值会覆盖xml所附的值。 …