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

2023-11-01

​​​​​​​

目录

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 的左右反转;​​​​​​​

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gradio学习笔记--Gradio基本用法和简单案例 的相关文章

  • 十一、文件的读写

    一 文件的读写模式 1 文件常用的打开模式 r 只能读 r 可读可写 不会创建不存在的文件 如果直接写文件 则从顶部开始写 覆盖之前此位置的内容 如果先读后写 则会在文件最后追加内容 w 可读可写如果文件存在则覆盖整个文件 不存在则创建 w
  • Python格式化输出之format函数

    format函数是Python中一个很强大的格式化输出函数 使用花括号 来占位 下面结合代码来讲述format函数的用法 一 匹配顺序 print 姓名 年龄 format 张三 25 运行结果 姓名 张三 年龄 25 可以看出 forma
  • 【Python笔记】正则表达式基础和应用

    文章目录 0 引言 0 1 正则 定义 功能 0 2 正则 基本知识 0 3 在常见的编辑器中使用正则 方法 0 4 进阶内容 1 基础篇 1 1 元字符 如何巧妙记忆正则表达式的基本元件 1 特殊单字符 2 空白符 3 量词 4 范围 5
  • 【python】如何动态获取某个文件的绝对路径?

    导读 获取文件路径的方法诸如os getcwd os path abspath path 此类方法都是基于当前程序的启动目录来确定路径的 因此 当需要通过相对路径获取非当前目录下的文件时 就会出现类似No such file or dire
  • Python 多线程 start()和run()方法的区别(三)

    在实例调用的函数中加入打印当前线程的名字 分别用start 方法和run 方法启动线程检查有什么区别 start 方法 import threading import time def worker count 1 while True i
  • day20 网络编程(上)

    day20 网络编程 上 课程目标 掌握网络相关的基础知识并可以基于Python开发程序 基于网络进行数据传输 课程概要 网络必备基础 网络编程 Python代码 B S和C S架构 1 必备基础 你必须了解的网络相关设备和基础概念 1 1
  • python的json模块中dumps和loads、dump和load以及报错JSONDecode:Expecting property name enclosed in double quotes:

    python的json模块中dumps和loads dump和load import json data 1 a 2 b 3 c 数据 1 dumps和loads 注意 dumps和loads不仅仅对字典起作用 dumps 将python对
  • python脚本启动参数设置与解析

    格式设置 在命令行下启动某个程序时 总会遇到要求输入参数的情况 参数的格式一般 都是一下三总格式之一 python script py hello world hello world 1 python script py h hello w
  • 基于python手动画出spectrogram(语谱图)

    Spectrogram是基于STFT变换得到的 非常有助于分析信号的时频特性 在语音信号处理中常被称为 语谱图 python中有一些写好的模块可以直接将时域的信号转化成spectrogram 但这并不利于对其原理的理解 而且横纵左边的转换也
  • moviepy基础_1:使用moviepy提取视频的音频及合成

    任务 提取 a mp4 的音频部分 然后把提取到的音频添加到 b mp4 里 程序实现 from moviepy editor import 读取2个视频文件 videoclip 1 VideoFileClip a mp4 videocli
  • Python 在 conda 中安装了包,但是 pycharm 中无法引用的问题解决

    一 进入 PyCharm 的设置 二 找到 Interpreter 选项 三 进入 Show All 四 点击 五 选择 Conda 里面所对应的环境即可
  • python通过外网远程连接腾讯云Mysql数据库-案例

    最近需要做一个东西把接口获取到的数据存到云数据库上 尝试了一下云数据库的使用 将具体操作记录一下 1 购买一个云数据库 因为是测试就买了一个按需付费的 2 初始化 设置用户名 密码 3 登录 phpMyAdmin 创建数据库 4 开启外网I
  • Python Pandas 对列/行 Column/Row 进行选择,增加,删除操作

    Pandas 的列 行操作 一 列操作 1 1 选择列 1 2 增加列 1 3 删除列 del 和 pop 函数 二 行操作 2 1 选择行 2 1 1 通过 label 选择行 loc 函数 2 1 2 通过序号选择行 iloc 函数 2
  • -day28索引和函数及存储过程

    day28 索引和函数及存储过程 课程目标 了解MySQL中索引 函数 存储过程 函数 触发器 视图等知识点 课程概要 索引 函数 存储过程 视图 触发器 1 索引 在数据库中索引最核心的作用是 加速查找 例如 在含有300w条数据的表中查
  • 基于百度PaddleHub实现人像美颜V1.0

    AI美颜核心技术之一就是人脸关键点检测 PaddleHub已经开源了人脸关键点检测模型 face landmark localization 人脸关键点检测是人脸识别和分析领域中的关键一步 它是诸如自动人脸识别 表情分析 三维人脸重建及三维
  • day02-08 python基础语法

    模块一 python基础语法 day2 快速上手 今日概要 课程目标 学习Python最基础的语法知识 可以用代码快速实现一些简单的功能 课程概要 初识编码 密码本 编程初体验 输出 初识数据类型 变量 注释 输入 条件语句 1 编码 密码
  • -day15--内置模块与开发规范

    day15 内置模块和开发规范 目标 掌握常见的内置模块的使用及了解软件开发的规范 今日概要 内置模块 json time datetime re 开发规范 主文件 配置文件 数据 附件 业务代码 1 内置模块 1 1 json json模
  • -day25--mysql入门

    第四模块 MySQL数据库 数据库管理系统 DBMS 专注于帮助开发者解决数据存储的问题 这样开发者就可以把主要精力放在实现业务功能上了 业内有很多的的数据库管理系统产品 例如 MySQL 原来是sun公司 后来被甲骨文收购 现在互联网企业
  • -day14--模块与内置模块

    day14 模块 课程目标 掌握Python中常用模块的使用方法 今日概要 自定义模块 包 第三方模块 内置模块 1 2 1 自定义模块 1 1 模块和包 import hashlib def encrypt data 数据加密 hash
  • -day26 必备SQL和表关系及授权

    day26 必备SQL和表关系及授权 课程目标 掌握开发中最常见的SQL语句和表关系及授权相关知识点 课程概要 必备SQL 8个必备 表关系 授权 1 必备SQL语句 上一节讲解了最基础SQL语句 增删改查 其实在日常的开发中还有很多必备的

随机推荐

  • 算法入门篇:排序算法(一)

    引子 笔者刚刚学习自己的的一门编程语言 C语言 的时候 正在runoob上面刷经典一百道题 第一次见到排序问题 我内心是不屑的 这 不是张口就来 然后我就贡献了一整个下午的时间在一个简单的排序上面 初学者不知到排序的时候可以有交换两个值这样
  • js逆向_知识小结

    目录 一 Chrome之调试小结 chrome查看资源文件 chrome关联本地文件夹 chrome重写js文件并替换 chrome新建js文件并执行 Console打印输出勾选 断点 DOM 事件 xhr debugger 调用栈Call
  • Apex List

    请访问https trailhead salesforce com en users strailhead trailmixes prepare for your salesforce platform developer i creden
  • Probabilistic Knowledge Transfer for Deep Representation Learning(2018)----论文笔记

    Probabilistic Knowledge Transfer for Deep Representation Learning 写在前面 Abstract 1 Introduction 后续存在问题 本文提出的方法 优点 贡献 2 Re
  • BES2300x笔记(15) -- 提示音制作秘籍

    哈喽大家好 这是该系列博文的第十五篇 篇 lt lt 系列博文索引 快速通道 gt gt 一 前言 常见的TWS耳机产品中 我们极少会看到有LED灯指示 即便在板子上预留了LED 也只是用在调试阶段 实际量产时直接空贴 因为一个LED就足以
  • 【满分】【华为OD机试真题2023 JAVA&JS】最多等和不相交连续子序列

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 最多等和不相交连续子序列 知识点贪心 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 给定一个数组 我们称其中连续的元素为连续子序列 称这些元素的和为连续子序列的
  • java泛型代码编写

    java泛型代码编写 泛型的由来 我们先看下面这段代码 List list new ArrayList list add 24 向集合中添加一个 Integer 类型的数据 list add Tom 向集合中添加一个 String 类型的数
  • 美团笔试-小美的元素删除

    小美的元素删除 小美有一个数组 她希望删除k个元素 使得剩余的元素两两之间互为倍数关系 你能告诉小美有多少种删除方案吗 由于答案过大 请对10 9 7模 输入描述 第一行输入两个整数n k 1 lt k lt n lt 10 3 表示数组长
  • Qt - 鼠标事件

    欢迎转载 请注明出处 https blog csdn net qq 39453936 spm 1010 2135 3001 5343 原文链接 https blog csdn net qq 39453936 article details
  • 电脑主板线路连接图解_台式机电源线接法图解(电脑主板接线图解高清

    对于组装一台电脑 主板上的跳线是最让小白装机用户头疼的事情 但其实具体跳线插法 在机箱连接的跳线接口上以及主板跳线插座上都有详细标注 我们只需要在主板上找到对应插座 插上去就好了 那么机箱上的跳线接在主板那些位置 下面精装之家分享一下台式电
  • springBoot框架简介入门教程(快速学习版)

    文章目录 回顾spring 优点 缺点 SpringBoot概述 SpringBoot特点 SpringBoot 的核心功能 SpringBoot自动配置 SpringBoot开发环境构建 SpringBoot配置文件 SpringBoot
  • 【P2P租车】宝驾租车:学大创始人李如彬再创业

    转自 http www cyzone cn a 20140708 260116 html 月底 上线仅一周的私家车共享平台宝驾租车获得500万美元天使投资 这是李如彬第二次创业 李如彬自己有20多辆车 平时大多闲置 这让他看到了机会 宝驾租
  • mysql 添加用户

    mysql 添加用户 1 旧版本的mysql添加新用户 INSERT INTO mysql user host user password select priv insert priv update priv VALUES localho
  • 分布式事务6种解决方案(超详细)

    文章目录 分布式事务六种解决方案 前言 ACID 分布式事务 2PC 二阶段提交 同步阻塞协议 准备阶段 提交阶段 协调者故障分析 协调者是一个单点 存在单点故障问题 3PC 三阶段提交 准备阶段 预提交阶段 提交阶段 参与者超时机制 总结
  • 极海MCU---keil5手动添加Pack

    下载pack文件 进入极海半导体官网 技术支持 点进去下拉 找到软件支持 找到对应的芯片 我使用的是APM32F1XX 软件支持中包括pack和SDK SDK中有库文件和一些例程 开发时会用到 都下载下来 keil5中安装pack 打开ke
  • IDEA无法创建目录

    在WEB INF目录下添加新目录 右键找不到new directory选项 可能是因为设置junit test目录导致 在项目上右键 选择 Make Directory as 之后再选择 unmarke开头的那个选项 下图中是选择过后的 已
  • luckysheet的使用——10.页面缩放报错问题

    在使用luckysheet的项目 切换到其他页面后 对该页面进行缩放的操作时 会触发luckysheet的resize操作 此时因为当前页面并非是luckysheet的调用页面 页面就会报错无法使用 需要对源码进行修改 阻止该方法的调用 1
  • NAT 技术详解

    一 什么是NAT 为什么要使用NAT NAT是将私有地址转换为合法IP地址的技术 通俗的讲就是将内网与内网通信时怎么将内网私有IP地址转换为可在网络中传播的合法IP地址 NAT的出现完美地解决了lP地址不足的问题 而且还能够有效地避免来自网
  • android如果将recyclerView嵌套进NestedScrollView中,可能导致加载更多一直执行

    今天在使用BaseQuickAdapter对RecyclerView进行绑定的时候 支持加载更多 却发现一直自动进行加载更多 最后发现问题是因为在NestedScrollView中的缘故 还不知为什么
  • Gradio学习笔记--Gradio基本用法和简单案例

    目录 1 配置Gradio 2 Hello World案例 2 1 基本使用 2 2 进阶使用 3 图像案例 3 常用类 Interface 和 Blocks 1 配置Gradio 使用 pip 安装 Gradio pip install