Gradio的web界面演示与交互机器学习模型,主要特征《2》

news2024/11/20 7:05:34

上一篇文章是介绍了安装与使用,Gradio的web界面演示与交互机器学习模型,安装和使用《1》
了解到这个gradio,真是个贴心的产品,接下来更多的关注一些重要的细节特征,让我们去更完善和熟练的使用它。

1、简单计算器的示例 

 我们可以先直接运行代码,看下效果

import gradio as gr

def calculator(num1, operation, num2):
    if operation == "add":
        return num1 + num2
    elif operation == "subtract":
        return num1 - num2
    elif operation == "multiply":
        return num1 * num2
    elif operation == "divide":
        if num2 == 0:
            raise gr.Error("不能除以0")
        return num1 / num2

demo = gr.Interface(
    calculator,
    [
        "number", 
        gr.Radio(["add", "subtract", "multiply", "divide"]),
        "number"
    ],
    "number",
    examples=[
        [5, "add", 3],
        [4, "divide", 2],
        [-4, "multiply", 2.5],
        [0, "subtract", 1.2],
    ],
    title="简单计算器",
    description="简单的计算器例子,下面还有示例可以点击试用",
)
demo.launch()

比前面介绍的参数多了一些:

examples:表示里面可以写一些示例,这样用户点击这些示例就可以直接进行测试,不需要手动输入了。
title:程序的标题
description:程序的一些说明
其中在calculator函数中出现有,raise gr.Error("不能除以0")这样的自定义错误,对用户还是比较友好的,不然就是一个Error,可能用户不知道问题错在哪儿。
可以看出新增的这三个参数都更好地帮助用户去理解和使用你的应用。
当然为了更好的提示用户,我们还可以将第二个文本框"number"修改成gr.Number(label="数字",info="如果为除数,不要输入0")
这样更直观的告知用户,也就直接避免了除以0的错误等浪费时间的情况出现了。

2、标志

默认情况下,一个接口将有flag“标志”按钮,就是那个输出按钮。当用户测试您的界面时,看到输入带有有趣的输出,例如错误或意外的模型行为,他们可以标记输入以供您检查。由flaging_dir = 参数提供给Interface构造函数的目录中,一个CSV文件将记录标记的输入。如果接口涉及文件数据,例如Image和Audio组件,则将创建文件夹来存储这些标记的数据。
比如,我们点击上面演示的计算器的输出按钮flag
那么就会将这些输入输出的信息给保存在csv文件里面,这个文件在flagged文件夹中。如果输入输出是图片的话,将有输入输出的文件夹来分别保存它们各自的图片。

 

图中就是当前位置的flagged文件夹,打开log.csv文件的内容,这个对于一些调试的反馈可以起到一定的作用,帮助我们改进这个应用。

3、样式

界面的美观和一些重点样式显示还是很有必要的,想要在gradio中修改样式,最简单的方法就是主题,里面定义了一些自带主题,我们可以先来查看下:

print(dir(gr.themes))
#['Base', 'Color', 'Default', 'Font', 'Glass', 'GoogleFont', 'Monochrome', 'Size', 'Soft', 'ThemeClass', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'base', 'builder', 'colors', 'default', 'glass', 'monochrome', 'sizes', 'soft', 'utils']

我们使用其中一个看下效果会是怎么样的(也是属于Interface中的参数):
theme=gr.themes.Soft()

鼠标经过示例也会进行高亮显示
这些是做好的主题,也可以做额外的样式,比如设置整个容器框的背景色css=".gradio-container {background-color: #445566}"

4、队列

如果你的应用预计流量很大,使用queue()方法来控制处理速率。这将调用队列,以便一次只处理一定数量的请求。队列使用websockets,这也可以防止网络超时,所以如果你的函数的推理时间很长(> 1分钟),你应该使用队列。
用法很简单,分别在Interface和Blocks中的应用,其实是一样的,启动前加一个queue()

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

当然也可以控制一次处理的请求数量:demo.queue(concurrency_count=3)

也可以只指定某些函数在block中排队:

import gradio as gr
with gr.Blocks() as demo2:
    num1 = gr.Number()
    num2 = gr.Number()
    output = gr.Number()
    gr.Button("Add").click(
        lambda a, b: a + b, [num1, num2], output)
    gr.Button("Multiply").click(
        lambda a, b: a * b, [num1, num2], output, queue=True)
demo2.queue()
demo2.launch()

这里就是对乘法做队列的意思,使用了匿名函数,同样的输入是两个,对应着参数是两个。

5、迭代输出 

所谓迭代输出就是说,不是一次性显示出来,而是将过程也显示出来,比如,ChatGPT提问之后的答案就是每次几个词这样的输出,或者是Midjourney生成图片的时候,也不是一次性输出,而是从模糊到清晰再到最终图片的一个过程都显示出来。
那么我们这里就不使用常规函数,还是用Gradio提供的生成器函数,就是说让函数产生一系列的值,而不是单个返回值。
通常做法是将yield语句放入某种循环中。这里我们就模拟类似Midjourney生成图像的一个过程:

import gradio as gr
import numpy as np
import time

def fake_diffusion(steps):
    for _ in range(steps):
        time.sleep(1)
        image = np.random.random((200, 200, 3))
        yield image
    image = "https://gradio-builds.s3.amazonaws.com/diffusion_image/cute_dog.jpg"
    yield image

#官方例子这里的滑动块是浮点数,需要整数,不然迭代次数出错,加一个step,每次是1即可
demo = gr.Interface(fake_diffusion, inputs=gr.Slider(1, 10, 3,step=1), outputs="image")

demo.queue()
demo.launch()

滑动块每次滑动就是1为整数的步进,输入的数量就是上面函数迭代几次随机图像(彩色噪点,模拟生成图像的过程),通过yield来做生成器,将生成过程反馈到界面。动态图如下:

 

6、进度条

对于比较耗时的操作,我们使用进度条来让用户知道进展情况,这里也是使用Progresstqdm方法,在以前的文章:Python中tqdm进度条的详细介绍(安装程序与耗时的迭代)有更详细的介绍,有兴趣的可以点击进去看看。

import gradio as gr
import time

def slowly_reverse(word,progress=gr.Progress()):
    progress(0, desc="开始...")
    time.sleep(1)
    progress(0.05)
    new_string = ""
    for letter in progress.tqdm(word, desc="反转中..."):
        time.sleep(0.25)
        new_string = letter + new_string
    return new_string

demo = gr.Interface(slowly_reverse, gr.Text(), gr.Text())

if __name__ == "__main__":
    demo.queue(concurrency_count=10).launch()

 做了一个动态图演示如下:

7、批处理

Gradio支持传递批处理函数的能力。批处理函数就是接受一组输入并返回一组预测的函数。

7.1、Interfacce示例

import gradio as gr
import time

def trim_words(words, lens):
    trimmed_words = []
    time.sleep(5)
    for w, l in zip(words, lens):
        trimmed_words.append(w[:int(l)])        
    return [trimmed_words]

demo = gr.Interface(trim_words, ["textbox", "number"], "textbox", batch=True, max_batch_size=16)
demo.queue()
demo.launch()

7.2、Blocks示例

import gradio as gr

with gr.Blocks() as demo:
    with gr.Row():
        word = gr.Textbox(label="word")
        leng = gr.Number(label="leng")
        output = gr.Textbox(label="Output")
    with gr.Row():
        run = gr.Button()

    event = run.click(trim_words, [word, leng], output, batch=True, max_batch_size=16)

demo.queue()
demo.launch()

从例子中看到,可以并行处理16个请求(总推理时间为5秒),而不是单独处理每个请求(总推理时间为80秒)。

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

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

相关文章

Netty基础(三)

1.Netty模型 1.1.工作原理示意图1-简单版 Netty主要基于主从Reactors多线程模型(如图)做了一定的改进,其中主从Reactor多线程模型有多个Reactor; 说明: ①.BossGroup线程池中的线程维护了Selector,只关注Accecpt事件; ②.当接收到Accept事件,获取到连接对应的SocketChannel…

数据结构入门--栈和队列

栈 栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除的一段为栈顶,另一端为栈底。栈中元素遵循后进先出LIFO(Last In First Out)原则。 压栈:栈的插…

玄子Share - 2023.1 IDEA 部署Web项目

玄子Share - 2023.1 IDEA 部署Web项目 创建项目 IDEA 2023 创建Jakarta EE项目 模板:选择使用 Web 应用程序 应用程序服务器:选择安装的 Tomcat 第一次创建项目可能识别不到 Tomcat 需要手动添加 Tomcat 服务器 设置 Tomcat 主目录为 Tomcat 的安装路径…

给httprunnermanager接口自动化测试平台加点功能(二)

文章目录 一、背景1.1、新增字段1.2、简化流程1.3、举一反三 二、总结 一、背景 继续前面的功能改造,这回又是什么需求呢?在编写测试用例的时候,咱们有看到列表有作者名称,也就是说,可以在用例列表就可以知道这条用例是…

网络数据包丢失监控

什么是网络数据包 数据包或网络数据包是通过网络传输的小数据单元。顾名思义,这些是小的、离散的数据单元。单独来看,这些单位不一定有多大意义。它们只是正在传输的整体消息的一部分,这些消息已被组装成多个层。但是,当组合在一…

人工智能前景

人工智能AI的未来非常广阔和光明。随着科技的不断发展和普及,人工智能已经开始逐渐融入我们生活的方方面面,比如智能家居、智能医疗、无人驾驶等等。未来,随着更多的应用场景被开拓和挖掘,人工智能的应用范围将会越来越广泛&#…

Word控件Spire.Doc 【打印】教程(3):如何在自定义纸张尺寸上打印 Word—C#/VB.NET

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

B、B+、红黑树、AVL树的对比

主要来自 小林coding https://mp.weixin.qq.com/s/AoPq8poENF9T4mVS1fDFPw# 怎样的索引的数据结构是好的? MySQL 的数据是持久化的,意味着数据(索引记录)是保存到磁盘上的,因为这样即使设备断电了,数据也…

SpringBoot自动配置原理解析

​ SpringBoot的主旨是约定大于配置,开发项目初期阶段,我们不需要做过多的配置,SpringBoot已经帮我们自动配置好了大部分的内容,比如仲裁依赖机制,自动引入需要的依赖,自动配置等内容。让我们能够将更多的精…

2023年6款程序员常用IDE工具推荐

IDE是“集成开发环境”的缩写,是一种软件应用程序,旨在为程序员提供一个集成的工作环境,使他们可以编写、测试和调试代码,同时提供各种辅助工具,以提高开发效率和质量。 通常包含了一个代码编辑器,能够在代…

AI ChatGpt使用工具

1、OpenAi 这个使用注册和使用成本比较高,新手不建议;有钱滤过,想使用最新的模型的滤过; 1.1、准备工作 能访问外网;(本链接不提供)准备一个国外手机号,用于接受注册验证码&#xf…

数据结构——结构体 内存对齐

在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员&#xff…

试用「ChatGPT」几周之后

冷静下来,不吹不黑。 01 最近半年,互联网一款现象级的应用诞生:「ChatGPT」; 其火爆的程度,不输前面的羊了个羊; 最初了解到ChatGPT还是春节的时候,但那时网上的测评还没引起足够的好奇心&…

美女诱惑来袭,你抖的过嘛~python下载

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 我又又又来采集美女小姐姐了 兜兜转转还是小姐姐得我心吖~ 哈哈哈哈哈哈哈哈哈哈 目录&#xff08;想看哪里点哪里 &#x1f61d;&#xff09; 前言开发环境:思路流程: <固定公式>代码展示尾语 开发环境: 首先我…

kudu可视化工具:kudu-plus

目录 kudu kudu-plus是什么 kudu基础 分支说明 kudu-plus版本功能实现 kudu Kudu是为Apache Hadoop平台开发的列式数据库。Kudu拥有Hadoop生态系统应用程序的常见技术属性&#xff1a;它可以商用硬件上运行&#xff0c;可横向扩展&#xff0c;并支持高可用性操作。 kudu-p…

并发编程之循环屏障CyclicBarrier

文章目录 前言什么是CyclicBarrierCyclicBarrier原理CyclicBarrier VS CountDownLatchCountDownLatch图示&#xff1a;CyclicBarrier图示&#xff1a;两者的异同&#xff1a; CyclicBarrier核心源码实战演示1、创建测试demo2、创建测试用例3、查看测试结果 写在最后 前言 前面…

Ubuntu 20.04安装mysql8并配置远程访问

文章目录 一、使用apt-get安装mysql服务二、初始化mysql数据库管理员用户密码三、配置远程访问 一、使用apt-get安装mysql服务 # 更新软件源 apt-get install update# 安装mysql服务 apt-get install mysql-server# 使用mysqladmin工具查看mysql版本 mysqladmin --version# 启…

powershell定义文本,用户交互,正则表达式

定义文本 PS C:\Users\Administrator> $site"yuan" PS C:\Users\Administrator> $text"$site $(get-date) $env:windir" PS C:\Users\Administrator> $text yuan 09/16/2022 14:12:26 C:\Windows#使用单引号闭合字符串输出双引号 The site of my…

【Jeston Orin】Orin nano 8G模块使用官方系统包生成标准烧写系统测试

大家好&#xff0c;我是虎哥&#xff0c;GTC 2023上&#xff0c;NVIDIA正式推出了面向边缘AI的新一代入门款开发套件&#xff0c;Jetson Orin Nano Developer Kit。虽说只是入门套件&#xff0c;但据说相比上一代Jetson Nano有最高达80倍的性能提升&#xff01;于是我在收到包裹…

苹果ipad触控笔哪个好?平价电容笔排行榜

因为ipad本身的性能足够强大&#xff0c;所以现在已经有不少人开始使用它了。大屏幕上的教学效果很好&#xff0c;但如果只是为了用来看电视剧&#xff0c;那就没什么用了。如果你不想买一支价格昂贵的苹果电容笔&#xff0c;或只想用来做个学习笔记&#xff0c;这时&#xff0…