Gradio学习笔记--Gradio基本用法和简单案例

news2024/11/16 18:08:14

​​​​​​​

目录

1--配置Gradio

2--Hello World案例

2-1--基本使用

2-2--进阶使用

3--图像案例

3--常用类 Interface 和 Blocks


1--配置Gradio

        使用 pip 安装 Gradio:

pip install gradio

2--Hello World案例

2-1--基本使用

import gradio as gr

def greet(name):
    return "Hello " + name + "!"

demo = gr.Interface(fn=greet, inputs="text", outputs="text")

demo.launch(share = True)   

        类 gr.Interface()可以包含任何 Python 函数,其通过以下三个必需的参数进行初始化:

① fn:封装好的 Python 函数,即上例中的 greet() 函数;

② inputs:用于输入的组件,可以为 “text”、“image” 或 “audio”,上例中为 “text”;

③ outputs:用于输出的组件,可以为 “text”、“image” 或 “audio”,上例中为 “text”;

        通过 launch() 运行定义的类对象,运行结果包括两个 url,第一个 local url 可以在本地打开和运行;第二个 public url 需要通过设置 share = True 才可生成,可用于分享在其它机器上打开和运行;

2-2--进阶使用

        可通过 gr.Textbox() 来细化输入的组件 inputs,这里设置了输入框的行数为2,提示词为 Name Here...;

import gradio as gr

def greet(name):
    return "Hello " + name + "!"

demo = gr.Interface(
    fn=greet,
    inputs=gr.Textbox(lines=2, placeholder="Name Here..."),
    outputs="text",
)
demo.launch(share = True)
 

         可设置多个输入输出,以实现更复杂的功能,以下函数设置了三个输入和两个输出;三个输入分别为 string(字符串)、boolean(布尔)和 number(数值);两个输出分别为string 和 number 类型;

        函数的功能:输入 name,根据布尔输入 is_morning 判断问候是 moring 还是 evening,并将输入的 number 型华氏温度转换为摄氏温度(Celsius);

import gradio as gr

def greet(name, is_morning, temperature):
    salutation = "Good morning" if is_morning else "Good evening"
    greeting = f"{salutation} {name}. It is {temperature} degrees today"
    celsius = (temperature - 32) * 5 / 9
    return greeting, round(celsius, 2)

demo = gr.Interface(
    fn=greet,
    inputs=["text", "checkbox", gr.Slider(0, 100)],
    outputs=["text", "number"],
)
demo.launch(share = True)

3--图像案例

        Gradio 支持 Image, DataFrame, Video, 或 Label 等类型,以下为简单的图像案例:

import numpy as np
import gradio as gr

def sepia(input_img):
    sepia_filter = np.array([
        [0.393, 0.769, 0.189], 
        [0.349, 0.686, 0.168], 
        [0.272, 0.534, 0.131]
    ])
    sepia_img = input_img.dot(sepia_filter.T)
    sepia_img /= sepia_img.max()
    return sepia_img

demo = gr.Interface(sepia, gr.Image(shape=(200, 200)), "image")
demo.launch()

        上述代码的功能是将输入的图片进行 sepia 滤波;其中输入和输出的组件都为 Image, 输入组件通过 gr.Image() 来设置其shape,即会对输入图片进行crop或resize的操作;实际输入是一个(w, h, 3)的 numpy 数组,3 表示 RGB,也可以通过 gr.Image(type="filepath", shape=(200, 200)) 来指定不直接转化为 numpy 数组;

import cv2
import numpy as np
import gradio as gr

def sepia(input_img):
    input_img = cv2.imread(input_img)
    sepia_filter = np.array([
        [0.393, 0.769, 0.189], 
        [0.349, 0.686, 0.168], 
        [0.272, 0.534, 0.131]
    ])
    sepia_img = input_img.dot(sepia_filter.T)
    sepia_img /= sepia_img.max()
    return sepia_img

demo = gr.Interface(sepia, gr.Image(type="filepath", shape=(200, 200)), "image")
demo.launch()

        上述代码设置了 gr.Image(type="filepath"),不会自动将输入的图片转换为 numpy 数组,需要使用 opencv 等第三方库将图片转换为 numpy 数组;

3--常用类 Interface 和 Blocks

        上述案例均使用封装程度很高的 Interface 类,在一定程度上限制了自由发挥;Gradio提供了支持灵活布局和数据流的 Blocks 类,其抽象程度不及 Interface 类,但其自由开发程度较高;

import gradio as gr

def greet(name):
    return "Hello " + name + "!"

with gr.Blocks() as demo:
    name = gr.Textbox(label="Name")
    output = gr.Textbox(label="Output Box")
    greet_btn = gr.Button("Greet")
    greet_btn.click(fn=greet, inputs=name, outputs=output, api_name="greet")

demo.launch()

        上述案例定义了一个按钮 greet_btn,当点击按钮时会执行 greet 函数,函数的输入和输出均为 gr.Textbox() 类型,即字符串类型,其 label 分别注明 box 的名称;

        上述案例可类比于 QT 中槽函数的使用,按钮绑定了一个 greet 的槽函数,当点击时会执行对应槽函数的内容;​​​​​​​

import numpy as np
import gradio as gr

def flip_text(x):
    return x[::-1]

def flip_image(x):
    return np.fliplr(x)

with gr.Blocks() as demo:
    gr.Markdown("Flip text or image files using this demo.") # 使用 Markdown 输出一句话
    with gr.Tab("Flip Text"): # 新建一个 Tab
        text_input = gr.Textbox()
        text_output = gr.Textbox()
        text_button = gr.Button("Flip")
    with gr.Tab("Flip Image"): # 新建一个 Tab
        with gr.Row(): # 同一行排列
            image_input = gr.Image()
            image_output = gr.Image()
        image_button = gr.Button("Flip")

    with gr.Accordion("Open for More!"): # 可折叠的组件
        gr.Markdown("Look at me...")

    text_button.click(flip_text, inputs=text_input, outputs=text_output) # 按钮绑定相应的槽函数
    image_button.click(flip_image, inputs=image_input, outputs=image_output) # 按钮绑定相应的槽函数

demo.launch()

         上述案例使用 gr.Tab() 创建了两个 Tab,在第一个 Tab 中组件默认一个组件占一行,在第二个 Tab 中使用 gr.Row() 设置两个 Image 组件在同一行排列;

        案例使用 gr.Markdown() 输出一句话,并使用 gr.Accordion() 来设置一个可折叠的组件;

        上述案例的功能是实现输入 Text 的反转,以及实现输入 Image 的左右反转;​​​​​​​

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

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

相关文章

代码随想录算法训练营第二十八天 | 三个逗点四个子串的类型题、子集题要取所有节点、子集与树层去重

93.复原IP地址 文档讲解:代码随想录 (programmercarl.com) 视频讲解:回溯算法如何分割字符串并判断是合法IP?| LeetCode:93.复原IP地址_哔哩哔哩_bilibili 状态:不会做。这是三个逗点四个子串的类型题。 思路 这是切割…

重新定义分析 - EventBridge 实时事件分析平台发布

对于日志分析大家可能并不陌生,在分布式计算、大数据处理和 Spark 等开源分析框架的支持下,每天可以对潜在的数百万日志进行分析。 事件分析则和日志分析是两个完全不同的领域,事件分析对实时性的要求更高,需要磨平事件领域中从半…

【STM32】基础知识 第十一课 时钟

【STM32】基础知识 第十一课 时钟 概述时钟系统的基本概念什么是时钟时钟树锁相环APB 时钟树F1 系列时钟树F4 系列时钟树F7 系列时钟树H7 系列时钟树 系统时钟配置系统时钟配置步骤外设时钟的使能和使能HAL_RCC_OscConfig() 函数HAL_RCC_ClockConfig() 函数 概述 STM32 微控制…

超级香,分享8个相见恨晚的Python库

看到新奇又实用的第三方库,当然要分享出来咯~ Plottable Plottable是一个Python库,用于在matplotlib基础上绘制精美表格。例如下图所示表格。 代码如下: import matplotlib.pyplot as plt import numpy as np import pandas as pd from ma…

Leangoo领歌轻量级协作-OKR目标管理

​本场景是OKR目标管理模板,用Leangoo管理和跟踪OKR可以提升OKR的透明度和传递的即时性,驱动团队的积极性、促进共享和协作、提升沟通和协作的效率,帮助企业快速落地OKR。 OKR(Objectives and Key Results目标与关键结果&#xf…

Packet Tracer - 谁会听到广播?

Packet Tracer - 谁会听到广播? 目标 第 1 部分:观察 VLAN 实施中的广播流量 第 2 部分:完成思考题 拓扑图 场景 在本练习中,将完全填充一个配有 24 个端口的 Catalyst 2960 交换机。 所有端口都已使用。 您将观察 VLAN 实施…

PS磨皮插件portraiture最新版磨皮工具

Portraiture是一款智能磨皮插件,为Photoshop和Lightroom添加一键磨皮美化功能,快速对照片中皮肤、头发、眉毛等部位进行美化,无需手动调整,大大提高P图效率。全新4版本,升级AI算法,并独家支持多人及全身模式…

剪纸中秋海报

打开【Ps】,新建【A4画布】,双击背景图层【解锁】,再添加【图案叠加】图层样式,选择最后一个图案,增加【缩放】。 【椭圆选框工具】按住【Shift】键画一个正圆,填充颜色#0e8993,添加【渐变叠加】…

假期做了一项调研:大厂为何都要自研RPC框架?结果合乎情理

大家好,我是冰河~~ 五一假期过的可真快,今天开始,又要搬砖了。在五一假期当中,冰河做了一项调研,感觉结果还是挺合乎情理的。 翻看招聘信息 先来看我在某招聘网站上随便搜索了下Java招聘的岗位,看到的招…

做好防雷检测的重要意义和作用

防雷检测是一项非常重要的工作,它可以保障人们的生命财产安全,并维护国家的安全稳定。地凯科技将从防雷的重要性、防雷检测的行业应用和防雷行业国标三个方面来阐述防雷检测的重要性。 一、防雷的重要性 随着科技的不断发展,人们的生活和工作…

unity中实现经典的2d横版单向跳跃平台

经常玩2d横版游戏的朋友们相信对这样的效果一定对这种单向跳跃平台很熟悉:我希望我的角色可以通过跳跃跳上平台,然后在平台之上按下键盘的下键后从平台上落下。 那么想要实现这样的效果具体要怎么做呢?我们还是先将想要实现的效果进行一个逻…

微服务分布式搜索引擎 ElasticSearch 搜索结果处理 排序、分页与高亮

文章目录 ⛄引言一、排序⛅普通字段排序⚡地理坐标排序 二、分页⌚基本分页⏰深度分页 三、高亮⚡实现高亮 ⛵小结 ⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中…

python 实现模糊聚类

python模糊聚类细节与实现 前言数学逻辑代码框架Python实现数据预处理 preProcess获得相似矩阵 getSimilarityMatrix获取传递闭包 transitiveClosure模糊运算 fuzzMatrixProduct实现聚类 mergeProcess 实例演示 ![在这里插入图片描述](https://img-blog.csdnimg.cn/b062c59c282…

【Redis】持久化机制详解:从RDB到AOF,你需要知道的一切

本文目录 RDB(默认) 自动触发 🆚 手动触发 优点 缺点 何时会触发RDB快照 AOF 启用 AOF 配置路径 AOF 文件📃 AOF 的写回策略 AOF 的重写机制 优点 缺点 RDB & AOF 优先级 终极方案:RDB AOF 混合方…

城市轨道交通自动售检票系统

概述 城市轨道交通自动售检票系统(AFC)是基于计算机、通信、网络、自动控制等技术,实现轨道交通售票、检票、计费、收费、统计、清分、管理等全过程的自动化系统。可以提高轨道交通的运营效率,满足乘客的快速出行需求&#xff0c…

看完张一鸣近十年微博,我总结了这些成长特质

从程序员到 CEO 关注我的朋友,很多都是技术背景,之前在一个知乎回答里提到过,技术人在创业过程中并不占优势。 编程和创业是两个不同的体系,大部分技术工程师在工作中,解决的往往是一个限定的问题,而创业是…

【分享】ChatGPT的key,用key免费使用ChatGPT(每天更新)

1、ChatGPT用法总结: 自动化文本生成:可以用GPT生成文章、新闻、文本摘要,甚至小说、诗歌等文学作品。语音生成:结合语音合成技术,GPT可以生成自然流畅的语音,可以用于语音助手、交互式语音应用等。问答系统…

MobileViT神经网络模型

官方源码(Pytorch实现) : https://github.com/apple/ml-cvnets 原文链接:https://blog.csdn.net/qq_37541097/article/details/126715733 霹雳吧啦Wz从ml-evnets仓库中剥离的代码: deep-learning-for-image-processing/pytorch_classification/MobileViT at master…

AWE 2023:科技与艺术的结晶 三星展台亮点回顾

2023年4月27~30日,AWE 2023中国家电及消费电子博览会在上海新国际博览中心盛大举行。 作为全球三大消费电子展之一,每一年的AWE都汇聚了全球家电及消费电子领域最前沿、最尖端的科技和产品,因而向来都被业界人士视为整个行业的风向标。本届AW…

【读书笔记】《深入浅出数据分析》

我最大的收获 试想你在经历一场英语考试,还有两分钟就要交卷了,而你还没有开始写作文。此时,你会怎么做? 利用2分钟时间写出的第一段,还是只写关键句子,搭出文章的开头、过程、结尾? 后者更加明…