Gradio机器学习模型快速部署工具quickstart
作者:Livingbody 发布时间:2023-06-30 01:09:52
引言
书接上回 Gradio机器学习模型快速部署工具【quickstart】翻译,讲到多输入输出,其实很简单,就是把多个组件包装到列表,inputs和outputs对应的就是2个列表,输入输出列表,仅此而已。
1.图像示例
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()
使用该Image
组件作为输入时,您的函数将接收一个形状为 的 NumPy 数组(width, height, 3)
,其中最后一个维度表示 RGB 值。我们还将以 NumPy 数组的形式返回图像。
您还可以使用关键字参数设置组件使用的数据类型type=
。例如,如果您希望您的函数采用图像的文件路径而不是 NumPy 数组,则输入Image
组件可以写为:
gr.Image(type="filepath", shape=...)
另请注意,我们的输入Image
组件带有一个编辑按钮🖉,它允许裁剪和放大图像。以这种方式处理图像有助于揭示机器学习模型中的偏差或隐藏缺陷!
您可以在Gradio 文档中阅读更多关于许多组件以及如何使用它们的信息。
2.块:更多的灵活性和控制
Gradio 提供了两个类来构建应用程序:
1. Interface,它为创建我们迄今为止一直在讨论的演示提供了高级抽象。
2. Blocks,一种用于设计具有更灵活布局和数据流的网络应用程序的低级 API。Blocks 允许你做一些事情,比如以多个数据流和演示为特色,控制组件在页面上出现的位置,处理复杂的数据流(例如,输出可以作为其他功能的输入),以及根据用户交互更新组件的属性/可见性——仍然全部在 Python 中。如果您需要这种可定制性,请试试Blocks
吧!
让我们看一个简单的例子。请注意此处的 API 与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)
demo.launch()
注意事项:
Blocks
是用一个with
子句制作的,在这个子句中创建的任何组件都会自动添加到应用程序中。组件按照它们创建的顺序垂直显示在应用程序中。(稍后我们将介绍自定义布局!)
创建了A
Button
,然后将click
事件 * 添加到此按钮。这个 API 应该看起来很熟悉!与 一样Interface
,该click
方法采用 Python 函数、输入组件和输出组件。
3.更复杂的 Blocks
这是一个应用程序,可让您体验Blocks
:
import numpy as np
import gradio as gr
# 1.文字翻转
def flip_text(x):
return x[::-1]
# 2.图像翻转
def flip_image(x):
return np.fliplr(x)
with gr.Blocks() as demo:
# 3.添加markdown组件
gr.Markdown("Flip text or image files using this demo.")
# 4.添加Tab
with gr.Tab("Flip Text"):
text_input = gr.Textbox()
text_output = gr.Textbox()
text_button = gr.Button("Flip")
with gr.Tab("Flip Image"):
with gr.Row():
image_input = gr.Image()
image_output = gr.Image()
image_button = gr.Button("Flip")
# 5.添加Accordion
with gr.Accordion("Open for More!"):
gr.Markdown("Look at me...")
# 6.添加2个按钮
text_button.click(flip_text, inputs=text_input, outputs=text_output)
image_button.click(flip_image, inputs=image_input, outputs=image_output)
demo.launch()
参考网址:gradio.app/quickstart/
来源:https://juejin.cn/post/7217012056114036795


猜你喜欢
- Go语言中 sync 包里提供了互斥锁 Mutex 和读写锁 RWMutex 用于处理并发过程中可能出现同时两个或多个协程(或线程)读或写同
- This is a {t}. {name}是一个很强大的字符串模板解析方法。它接受三个参数,分别是{args.text},{args.obj
- 前言有的时候我们需要根据不同的用户身份生成不同的路由规则,例如:vip用户应该有自己的vip页面所对应的专用路由。一、初始化项目初始化vit
- goroutine 泄漏和避免泄漏的最佳实践Go的奇妙之处在于,我们可以使用goroutines和channel轻松地执行并发任务。如果在生
- 自己写的小工具,可以直接获取csdn文章并转换为markdown格式效果图核心代码from PySide2.QtWidgets import
- 一、库介绍opencv,face_recognition,numpy,以及dlib注意:安装opencv速度可能过慢,需要更换国内镜像源,参
- 一、c++调用Python将Python安装目录下的include和libs文件夹引入到项目中,将libs目录下的python37.lib复
- 在单个HTML元素上利用CSS2.1实现拥有3张背景图片和2张内容图效果,或者多重边框的效果。这种渐进增强的方式适用于所有支持CSS2.1伪
- 一,实用方法1.线程之间执行是无序的,cpu调度哪个线程就执行哪个线程;2.主线程等待所有子线程结束后再结束,设置守护线程可以实现当主线程结
- 首先我们从一个小程序导入,各定一个list,找出其中的素数,我们会这样写import mathdef is_Prims(number): &
- 如何根据二维数组中的某一行或者某一列排序?假设data是一个numpy.array类型的二维数组,可以利用numpy中的argsort函数进
- 无论安装以下哪种库,强烈建议在新环境下安装,之前在base环境下安装各种报错!!!如何在新环境下安装可参见我之前的总结或网上其他文章。不推荐
- Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的。相比于Angular.js,Vue.js提
- 目录引言数据获取与指标构建数据获取构建目标变量(target variable)技术指标特征构建计算技术指标模型预测与评估加入技术指标特征特
- 背景:加入现在有这样的数据,可能一条ocr代表两个label,并且label通过","分隔。我们想把数据转换成下面的。原
- 开通了一个阿里云来玩,记录一下环境搭建的过程运行环境ECS Ubuntu 16.04 64位过程#切换到安装文件夹cd /usr/local
- 本文实例为大家分享了python3实现人脸识别的具体代码,供大家参考,具体内容如下第一种:import cv2import numpy as
- Python lxml安装失败针对windows系统LXML安装失败而且pip升级也失败解决方案原因可能是pip没有安装到python我们需
- 本文实例讲述了JavaScript设计模式之模板方法模式原理与用法。分享给大家供大家参考,具体如下:一、模板方法模式:一种只需使用继承就可以
- 小渣渣复现大佬project发现GPU跑不动,出现如下报错:RuntimeError: CUDA out of memory.看下来最简单粗