Gradio的web界面演示与交互机器学习模型,安装和使用《1》

news2024/11/16 3:17:34

如何快速地将机器学习模型,给创建和分享出去,让更多的人来体验?
Gradio就是一种快速搭建web界面来演示机器学习模型的方式,任何人都可以在任何地方使用它。
官网地址:https://gradio.app/

1、安装Gradio

前提条件:Gradio需要Python 3.7或更高版本,仅此而已!
一般国内用户我都推荐加镜像来安装,个人喜欢豆瓣镜像,稳定,速度快。 

pip install gradio -i http://pypi.douban.com/simple/  --trusted-host pypi.douban.com

检测下安装是否成功,这里可以是在命令行或jupyter lab中都可以,运行方式很多。

import gradio as gr
print(gr.__version__)
3.28.1

2、运行Demo

2.1、给输入加个“你好” 

 先来个最简单的Demo,输入一个人名,点击提交,输出一个“你好,人名”

import gradio as gr

def greet(name):
    return "你好," + name + "!"

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

demo.launch()  

运行之后,可以看到左边输入“寅恪光潜”,点击“Submit”之后,右边输出“你好,寅恪光潜”。这里我是在JupyterLab中运行的,所以这种交互式可以直接在当前运行界面进行直接的输入和输出,当然这里也会提供一个URL:http://127.0.0.1:7861 点击这个链接同样也可以进行交互,如下图:

  

还可以生成公共链接,只需要在launch函数里面指定share=True即可

demo.launch(share=True)

这样就除了一个本地URL之外还有一个72小时有效期的公共外链,很方便的让不同地区的用户来体验。

这个就是安装到运行的过程,可以看到,过程是很简单的,代码也很简单,就是调用gradio模块中的Interface类。这里只用到三个参数就搞定,第一个是回调函数,第二个是输入组件,这里的类型是文本框,第二个是输出组件,类型是文本框。当然对于这个类的更详细的介绍,可以print(help(gr.Interface))
是不是省去了很多搭建前端的工作,确实是一个很Nice的工具!

2.2、多行输入文本

上面的文本框默认是单行,也可以指定为多行,也是gradio模块里面的类,我们可以查看其下面有哪些: 

['Accordion', 'AnnotatedImage', 'Annotatedimage', 'Audio', 'BarPlot', 'Blocks', 'Box', 'Button', 'CSVLogger', 'Carousel', 'Chatbot', 'Checkbox', 'CheckboxGroup', 'Checkboxgroup', 'Code', 'ColorPicker', 'Column', 'DataFrame', 'Dataframe', 'Dataset', 'Dropdown', 'Error', 'EventData', 'Examples', 'File', 'Files', 'FlaggingCallback', 'Gallery', 'Group', 'HTML', 'Highlight', 'HighlightedText', 'Highlightedtext', 'HuggingFaceDatasetJSONSaver', 'HuggingFaceDatasetSaver', 'Image', 'ImageMask', 'ImagePaint', 'Interface', 'Interpretation', 'JSON', 'Json', 'Label', 'LinePlot', 'List', 'Markdown', 'Matrix', 'Mic', 'Microphone', 'Model3D', 'Number', 'Numpy', 'Paint', 'Parallel', 'Pil', 'PlayableVideo', 'Plot', 'Progress', 'Radio', 'Request', 'Row', 'ScatterPlot', 'SelectData', 'Series', 'SimpleCSVLogger', 'Sketchpad', 'Slider', 'State', 'StatusTracker', 'Tab', 'TabItem', 'TabbedInterface', 'Tabs', 'Text', 'TextArea', 'Textbox', 'Theme', 'TimeSeries', 'Timeseries', 'UploadButton', 'Variable', 'Video', 'Webcam', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', 'blocks', 'close_all', 'component', 'components', 'context', 'current_pkg_version', 'data_classes', 'deprecation', 'events', 'exceptions', 'external', 'external_utils', 'flagging', 'gradio', 'helpers', 'inputs', 'interface', 'interpretation', 'ipython_ext', 'layouts', 'load', 'load_ipython_extension', 'make_waveform', 'mix', 'mount_gradio_app', 'networking', 'outputs', 'pipelines', 'pkgutil', 'processing_utils', 'queueing', 'ranged_response', 'routes', 'skip', 'strings', 'templates', 'themes', 'tunneling', 'update', 'utils']

可以看到除了文本框之外,复选框、图片、视频、文件、麦克风等等都有,还是很丰富的。

文本指定为多行,只需要指定其参数lines=num即可

demo = gr.Interface(fn=greet, inputs=gr.Textbox(lines=4,placeholder='请输入名字'), outputs="text")

这里就指定为4行的多行文本框,其中placeholder是个占位符,起到提示作用。 

2.3、接收多个组件的输入

除了接收一个输入源之外,我们还可以接收来自多个组件的输入,也可以输出多个,我们来看下输入这边,除了文本框之外,加一个复选框,滑动块(华氏度),输出也是多个,一个文本框和一个数字框。

import gradio as gr

def greet(name, is_boy, Fahrenheit):
    salutation = "你好,帅哥。" if is_boy else "你好,美女。"
    celsius = round((Fahrenheit - 32)/1.8 , 2)
    greeting = f"{salutation} {name}. 今天温度:{celsius}摄氏度"
    return greeting,celsius

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

这里我们可以知道,输入和输出的组件,都顺序放在列表当中,其中函数的输入组件跟函数的参数一一对应,同样的输出组件也是一一对应。这种极简的做法真的大大减少了工作量,更快速的生成web界面给顾客使用。当然也可以不到web界面进行输入,直接调用来测试结果:

from gradio_client import Client

client = Client("http://127.0.0.1:7872/")
result = client.predict("Tony",False,33,api_name="/predict")
print(result)

'''
Loaded as API: http://127.0.0.1:7872/ ✔
('你好,美女。 Tony. 今天温度:0.56摄氏度', 0.56)
'''

2.4、图像组件

既然是为机器学习模型而开发的工具,那么图片是最常用的一种,肯定是支持的,我们来看下,将一张彩色图片转换成棕黑色滤镜的图片,代码如下:

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() #控制在[-1,1]
    return sepia_img

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

代码可以知道,输入和输出都是图片组件,可以指定图片的大小,这里宽高都指定为600,跟输入图片的实际大小无关。然后函数接收的图片是(W,H,3),其中最后一维是3个通道,就是RGB值。最后我们将以NumPy数组的形式返回一个图像,当然在浏览器中又要做处理,转换成图片格式。
我们看下效果图:

其中右上角的红色圈位置,可以点击对图片进行编辑,以这种方式裁剪图像可以帮助我们了解机器学习模型中的偏见或隐藏缺陷。

3、使用Blocks更灵活的控制

上面我们使用的是Interface接口来实现,这个优点就是快速布局,接下来我们来看下Blocks,可以控制组件在页面中的位置,处理复杂的数据流(例如输出可以作为其他函数的输入),以及基于用户交互更新组件的属性/可见性,显得更加的灵活。

import gradio as gr

def greet(name):
    return "很久不见 " + name + "你好"

with gr.Blocks() as demo:
    name = gr.Textbox(label="姓名")
    output = gr.Textbox(label="输出问候语")
    greet_btn = gr.Button("Greet")
    greet_btn.click(fn=greet, inputs=name, outputs=output, api_name="greet")


demo.launch()

Blocks是用with子句创建的,在这个子句中创建的任何组件都会自动添加到应用中。组件按照创建的顺序垂直显示在应用程序中。
创建一个Button,然后向该按钮添加了一个单击事件侦听器。这个API看起来应该很熟悉!与Interface一样,click方法接受一个Python函数、输入组件和输出组件。其中api_name可选。

4、更复杂的Blocks应用

Blocks有了了解之后,我们来做一个复杂点的东西,使用菜单来做多个功能的切换,接下来是两个菜单,一个翻转文本,一个翻转图片的功能:


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("翻转文本或图片")
    with gr.Tab("翻转文本"):
        text_input = gr.Textbox()
        text_output = gr.Textbox()
        text_button = gr.Button("点击翻转")
    with gr.Tab("翻转图片"):
        with gr.Row():
            image_input = gr.Image()
            image_output = gr.Image()
        image_button = gr.Button("翻转图片")

    with gr.Accordion("查看更多!"):
        gr.Markdown("这里可以是一些说明之类的...")

    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.Markdown()这里面可以放Markdown格式的内容,或gr.HTML()这个就是常见的HTML内容了
gr.Blocks()下面使用gr.Tab()来做翻转文本和翻转图片的菜单。其余的差不多,参数也是函数、输入、输出。

 

小结:总的来说,真的就是一个字,爽。特别的方便,因为在输入和输出的时候,已做了前置处理和后置处理,比如说输入的图片,首先前置转换为numpy,然后经过函数处理之后,就做后置处理,转换成浏览器能够显示的图片格式,呈现出来。

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

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

相关文章

YOLOv5:图解common.py常用模块

YOLOv5:图解common.py常用模块 前言前提条件相关介绍common.py基本模块ConvBottleneckBottleneckCSPC3SPPSPPFFocus未完待续 参考 前言 由于本人水平有限,难免出现错漏,敬请批评改正。更多精彩内容,可点击进入YOLO系列专栏或我的个…

jieba分词(1):入门案例

1 场景介绍 大数据量的查询问题 假设我们要从商品的表里面查询一个商品 我们的数据库里面肯定有个t_goods的表,我们现在利用商品的名称做模糊查询 1.1 对于数据库的查询的 select * from t_goods where goodsName like “%手机%” ; 问题: 这个查询…

CSDN | 好久不见,甚是想念

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言A…

JavaScript实现在键盘输入按键,浏览器进行显示的代码

以下为实现在键盘输入按键,浏览器进行显示的代码和运行截图 目录 前言 一、在键盘输入按键,浏览器进行显示 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择,您可以在目录里进行快速查找&#xf…

《灰盒模型在非侵入式体外估计糖化血红蛋白百分比和数字脉搏波形的推导和验证》阅读笔记

目录 一、论文摘要 二、论文十问 Q1:论文试图解决什么问题? Q2:这是否是一个新的问题? Q3:这篇文章要验证一个什么科学假设? Q4:有哪些相关研究?如何归类?谁是这一课…

84.python input输入函数知识拓展

文章目录 1. input函数知识回顾2. input常犯错误解析3. 用函数转换从终端输入的数据3.1 输入的数为整数,则用int转换为整数3.2 输入的数为浮点数,则用float转换为浮点数3.3 不考虑输入的数据类型,则用eval函数转换 4. 变量的多种赋值方式4.1 …

OpenCV教程——OpenCV环境配置及第一个测试代码

1.OpenCV简介 OpenCV是一个计算机视觉的开源库。英文全称是:Open Source Computer Vision Library。 常用的OpenCV的核心模块: Image ProcessCamera Calibration and 3D ReconstructionVideo AnalysisObject DetectionMachine LearningDeep LearningG…

【Linux】Linux安装Git(图文解说详细版)

文章目录 前言第一步,官网下载安装包第二步,解压安装包第三步,安装编译环境第四步,编译源码第五步,安装git第六步,配置环境变量 前言 服务器版本:CentOS7.8 git官网:https://git-sc…

汽车出租系统【纯控制台】(Java课设)

系统类型 纯控制台类型(没有用到数据库) 使用范围 适合作为Java课设!!! 部署环境 jdk1.8Idea或eclipse 运行效果 本系统源码地址:https://download.csdn.net/download/qq_50954361/87753364 更多系统…

Qt5.14.2安装教程

之所以选择安装Qt5.14.2,是因为从5.15.0起,对于开源用户,Qt官方不再提供独立安装文件,源码安装听说很繁琐,并且还要激活码。 官网下载链接:https://download.qt.io/archive/qt/5.14/5.14.2/ 1、Windows用户…

智能优化算法:基于驾驶训练的优化算法-附代码

智能优化算法:基于驾驶训练的优化算法 文章目录 智能优化算法:基于驾驶训练的优化算法1. 基于驾驶训练优化算法1.1 初始化1.2 阶段一:驾驶教练培训(探索阶段)1.3 阶段二:学员学习(探索阶段&…

Jupyter notebook 如何设定默认的保存目录?

前言: 做智能车的时候,Jupter Notebook的默认保存在可怜的C盘,本来就很紧张的C肯定受不了,要改到别的地方,网上找了一些参考,说变更一下配置地址就可以了,照着做,99%的博客说&#x…

Linux驱动开发笔记(一):helloworld驱动源码编写、makefile编写以及驱动编译基本流程

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130534343 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

算法和算法竞赛的知识点

2023年5月7日,周日早上: 虽然今天早上我作出了改变学习算法方式的决定,但是知识点有哪些、具体该怎么做还没搞清楚,于是去刷题网站截图了它们的标签。 或许看相关书籍的知识点和题单也不错。 LeetCode的知识点 力扣 蓝桥杯的知识…

2023招商Fintech数据赛道rank33 赛后分享

赛题需求: 本次比赛为参赛选手提供了两个数据集,即训练数据集(train)和测试数据集(test_A榜/test_B榜)。参赛选手需要基于训练数据集,通过有效的特征提取,构建客户进取类产品配置发生时点预测模型,并将模型应用于测试数据集上,输出…

力扣sql中等篇练习(十六)

力扣sql中等篇练习(十六) 1 不同性别每日分数统计 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 # 分数是往后累加的 SELECT s2.gender,s2.day,sum(s1.score_points) total FROM Scores s1 CROSS JOIN Scores s2 ON s2.gen…

java创建多线程的方法

Java中是可以创建多个线程的,每个线程都有自己的名字和时间戳。下面我们来看看创建多个线程的方法。 创建多个线程,需要使用到 Thread类中的 create方法。需要注意的是,不是所有的线程都可以使用 create方法来创建,只有当这些线程…

目前可用的ChatGPT网站

本文意在整理可用gpt-3.5、gpt-4.0等网站。 本文主要是方便自己翻阅,如对您也有所帮助,不胜荣幸~ 文章目录 chatgpt.qdymys.cngpttalkchatgpt-cn.cobing.com总结 chatgpt.qdymys.cn 网址:https://chatgpt.qdymys.cn/限制:三小时只…

【新星计划-2023】TCP/IP协议讲解

相信大家在学习的过程中一定听到过TCP/IP这个协议,那么,TCP/IP协议是什么?为什么会有TCP/IP协议? 一、TCP/IP是什么? TCP/IP是用于计算机通信的一组协议,我们通常称它为TCP/IP协议族。它是70年代中期美国…

Spring Boot项目瘦身

目录 1,什么是瘦身?2,为什么要瘦身?3,如何瘦身?3.1,瘦身思路:3.2,瘦身方法 4,瘦身后运行 1,什么是瘦身? 瘦身:thinBody&a…