政安晨【零基础玩转各类开源AI项目】解析开源:gradio:在Python中构建机器学习Web应用

目录

下载项目

快速开始

Gradio能做什么?

Hello, World

Interface 类

组件属性

多输入和输出组件

一个图像示例

Blocks: 更加灵活且可控

你好, Blocks

更多复杂性

尝试


政安晨的个人主页:政安晨

欢迎 👍点赞✍评论⭐收藏

收录专栏: 零基础玩转各类开源AI项目

希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正!

Gradio 是一个开源 Python 软件包,可以让你快速为机器学习模型、API 或任意 Python 函数创建演示或网络应用。然后,你就可以使用 Gradio 内置的分享功能,在几秒钟内分享你的演示或网络应用程序的链接。无需 JavaScript、CSS 或网络托管经验!

下载项目

git clone git@github.com:gradio-app/gradio.git

以递归方式更新库:

如果你想要以递归方式更新Gradio或其他GitHub项目,你可以使用Git的子模块功能。Git子模块允许你在一个Git仓库中包含另一个Git仓库。

cd gradio

git submodule update --remote --recursive

gradio如何用命令切换到某个版本,如4.36.0

将Gradio项目切换到特定的版本(例如4.36.0),你可以使用Git的checkout命令。首先,你需要在你的终端中导航到Gradio项目的目录,然后运行以下命令:

git checkout gradio@4.36.0

这个命令会将Gradio项目的代码切换到4.36.0版本。请注意,你需要确保Gradio项目的仓库中确实有一个名为gradio@4.36.0的标签或分支。

如果你是通过Python的包管理器pip安装的Gradio,你可以使用以下命令来安装特定版本的Gradio:

pip install gradio==4.36.0

Gradio适用于:

  • 向客户/合伙人/用户/学生演示您的机器学习模型。

  • 通过自动共享链接快速部署您的模型,并获得模型性能反馈。

  • 在开发过程中使用内置的操作和解释工具交互式地调试模型。

快速开始

依赖: Gradio只需要Python 3.8及以上版本icon-default.png?t=N7T8https://www.python.org/downloads/

Gradio能做什么?

与他人共享机器学习模型、API或数据科学工作流程的最佳方法之一就是创建一个交互式应用,让用户或同事在他们的浏览器中试用。

Gradio让你可以用Python构建演示并分享它们,而且通常只需几行代码!下面让我们开始吧。

Hello, World

要用Gradio运行"Hello World"示例,需要以下三个步骤:

1. 用pip下载Gradio:

pip install gradio

2. 用Python脚本或在Jupyter Notebook中运行下面的代码 (或者使用 Google Colab):

import gradio as gr

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

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

3. 下面的演示会自动出现在Jupyter Notebook中,如果使用脚本运行则会在浏览器http://localhost:7860弹出:

Interface 类

你可能会注意到,在运行示例时我们创建了一个 gradio.Interface 。 Interface 类可以用用户接口包装任意的Python函数。在上面的示例中,我们使用了一个基于文本的简单函数,但这个函数可以是任何东西,从音乐生成器到税率计算器,再到预训练机器学习模型的预测函数。

Interface 类核心需要三个参数初始化:

  • fn : 被UI包装的函数
  • inputs : 作为输入的组件 (例如: "text""image" or "audio")
  • outputs : 作为输出的组件 (例如: "text""image" or "label")

下面我们进一步分析用于输入和输出的组件。

组件属性

在之前的示例中我们可以看到一些简单的文本框组件 Textbox ,但是如果您想改变UI组件的外观或行为呢?

假设您想要自定义输入文本字段,例如您希望它更大并有一个文本占位符。如果我们使用 Textbox 的实际类,而不是使用字符串快捷方式,就可以通过组件属性实现个性化。

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()
多输入和输出组件

假设您有一个更复杂的函数,有多个输入和输出。在下面的示例中,我们定义了一个函数,该函数接受字符串、布尔值和数字,并返回字符串和数字。观察应该如何传递输入和输出组件列表。

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()

您只需将组件包装在列表中。输入列表inputs中的每个组件依次对应函数的一个参数。输出列表outputs中的每个组件都对应于函数的一个返回值,两者均按顺序对应。

一个图像示例

Gradio支持多种类型的组件,如 ImageDateFrameVideoLabel 。让我们尝试一个图像到图像的函数来感受一下!

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(), "image")
demo.launch()

当使用Image组件作为输入时,您的函数将接收一个形状为 (height, width, 3) 的NumPy数组,其中最后一个维度表示RGB值。我们还将以NumPy数组的形式返回一张图像。

你也可以用 type= 关键字参数设置组件使用的数据类型。例如,如果你想让你的函数获取一个图像的文件路径,而不是一个NumPy数组时,输入 Image 组件可以写成:

gr.Image(type="filepath")

还要注意,我们的输入 Image 组件带有一个编辑按钮 🖉,它允许裁剪和放大图像。以这种方式操作图像可以帮助揭示机器学习模型中的偏见或隐藏的缺陷!

Blocks: 更加灵活且可控

Gradio 提供了两个类来构建应用程序

1. Interface,这为创建到目前为止我们一直在讨论的示例提供了一个高级抽象。

2. Blocks,一个用于设计具有更灵活布局和数据流的web应用程序的初级API。block可以做许多事,比如特征化多个数据流和演示,控制组件在页面上出现的位置,处理复杂的数据流(例如,输出可以作为其他函数的输入),以及根据用户交互更新组件的属性/可见性,且仍然在Python中。如果您需要这种个性化,那就试试 Blocks 吧!

你好, 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 子句组成,在该子句中创建的任何组件都会自动添加到应用程序中。
  • 组件在应用程序中按创建的顺序垂直显示,(稍后我们将介绍自定义布局!)
  • 一个 按钮 Button 被创建,然后添加了一个 click 事件监听器。这个API看起来很熟悉!就像 Interface一样, click 方法接受一个Python函数、输入组件和输出组件。
更多复杂性

这里有一个应用程序可以让你感受一下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("Flip text or image files using this demo.")
    with gr.Tabs():
        with gr.TabItem("Flip Text"):
            text_input = gr.Textbox()
            text_output = gr.Textbox()
            text_button = gr.Button("Flip")
        with gr.TabItem("Flip Image"):
            with gr.Row():
                image_input = gr.Image()
                image_output = gr.Image()
            image_button = gr.Button("Flip")

    text_button.click(flip_text, inputs=text_input, outputs=text_output)
    image_button.click(flip_image, inputs=image_input, outputs=image_output)

demo.launch()

尝试

1.安装最新稳定版本的Python和创建虚拟环境: 首先,你需要在miniconda中创建一个新的虚拟环境,并安装最新稳定版本的Python。你可以使用以下命令来完成这个任务:

conda create -n zac_gradio python=3.9

选择 y

这里,zac_gradio是你的环境名称,python=3.9是你要安装的Python版本。你可以根据需要更改这些值。

2. 激活你的虚拟环境: 创建环境后,你需要使用以下命令来激活它:

conda activate zac_gradio

 

3. 安装gradio: 在你的虚拟环境中,你可以使用以下命令来安装gradio:

pip install gradio

4. 实现一个gradio的例子

下面是一个简单的gradio应用示例,它创建了一个界面,用户可以输入一个数字,然后应用会返回这个数字的平方:

import gradio as gr

def square(input):
    return input ** 2

iface = gr.Interface(fn=square, inputs="number", outputs="number")
iface.launch()


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion 改变光线的能力简直太强大了!

在没有 Stable Diffusion 的年代,对照片的光线进行后期处理,基本要依靠 Photoshop。比如添加一个曝光图层。这个技术对于形状简单的物体来说很方便,因为光线效果很好模拟。但对于形状复杂的主体,比如人来说,要想实现自…

革新内容创作:AI生成工具的力量

作为一名AI爱好者,我积累了许多实用的AI生成工具。今天,我想分享一些我经常使用的工具,这些工具不仅能帮助提升工作效率,还能激发创意思维。 我们都知道,随着技术的进步,AI生成工具已经变得越来越智能&…

游戏试玩站打码zq平台系统可运营的任务网源码

安装说明 1.恢复数据; 2.数据连接库配置路径:protected\config\mail.php 文件中修改第60行 (记得不要用记事本修改,否则可能会出现验证码显示不了问题,建议用Notepad) 3.浏览器访问输入 127.0.0.2 显示界…

NOSQL -- MOGODB

Mogodb简介: 是一个开源的, 高性能, 无模式的文档型数据库. NoSql数据库产品当中的一种, 也是最像关系型数据库的非关系型数据库 使用场景: 针对不同的应用场景, 以及其对应的修改对应数据的频率, 我们可以以此选择需要哪一种类型的数据库 Mongo的使用: 启动: 在解压完成之后…

使引用作为函数参数将变量i和j的值互换

C之所以增加引用机制,主要是把它作为函数参数,以扩充函数传递数据的功能。 解题思路: 传递变量的地址。形参是指针变量,实参是一个变量的地址,调用函数时,形参(指针变量)得到实参变…

【计算机毕业设计】258基于微信小程序的课堂点名系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

聚焦新版综合编程能力面试考查汇总

目录 一、业务性编程和广度能力考查 (一)基本定义 (二)必要性分析 二、高频考查样题(编程扩展问法) 考题1: 用java 代码实现一个死锁用例,说说怎么解决死锁问题?(高…

测试开发面经分享,面试七天速成 DAY 1

1. get、post、put、delete的区别 a. get请求: i. 用于从服务器获取资源。请求参数附加在URL的查询字符串中。 ii. 对服务器的请求是幂等的,即多次相同的GET请求应该返回相同的结果。 iii. 可以被缓存,可以被收藏为书签。 iv. 对于敏感数据不…

第26讲:Ceph集群OSD扩缩容中Reblanceing数据重分布

文章目录 1.Reblanceing数据重分布的概念2.验证Reblanceing触发的过程3.Reblanceing细节4.临时关闭Reblanceing机制 1.Reblanceing数据重分布的概念 当集群中OSD进行扩缩容操作后,会触发一个Reblanceing数据重分布的机制,简单的理解就是将扩缩容前后OSD…

AI大模型探索之路-实战篇:智能化IT领域搜索引擎的构建与初步实践

系列篇章💥 No.文章1AI大模型探索之路-实战篇:智能化IT领域搜索引擎的构建与初步实践2AI大模型探索之路-实战篇:智能化IT领域搜索引擎之GLM-4大模型技术的实践探索3AI大模型探索之路-实战篇:智能化IT领域搜索引擎之知乎网站数据获…

基本元器件 - 晶体三级管

目录 区分极性 不同封装引脚辨认 基本电流关系 输出伏安特性 阻容耦合放大电路 晶体管的工作状态 三极管的主要参数 判断三极管的工作状态 估算法 图解法 基本放大电路 晶体三极管是一种 电流控电流 的元器件。 区分极性 除基极外,带箭头是发射极&…

优化LLM Prompt:降低使用成本和响应延迟的实用技巧

编者按: LLMs 被视为 AI 领域的一个里程碑式的突破,但要将其应用于实际生产环境,并且还能用对、用好并非易事。模型的使用成本和响应延迟是目前将大语言模型(LLMs)应用于生产环境中的核心难题之一。 在本期刊载的这篇文…

如何使用C++ STL标准模板库中的算法函数(附源码)

目录 1、概述 2、调用sort函数对列表元素进行排序 3、调用count_if查找满足条件的元素个数 4、调用find_if函数找到目标元素的信息 5、调用remove_copy_if函数搜索满足条件的多个元素 6、总结 VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.…

香港服务器的正确维护指南:确保稳定运行的实用策略

很多人使用香港服务器,很清楚即使它们可以全天候运行而不会出现问题,您仍然需要进行适当的维护以确保效率。原因很简单,香港服务器的正确维护对于保证网站或应用的正常运行时间、数据安全以及系统性能至关重要。以下本文将讨论一些有关如何维…

【开源】医院电子病历管理系统 SSM+JSP+MySQL

目录 一、项目介绍 科室模块 医生模块 预约挂号模块 就诊记录模块 就诊评价模块 二、项目界面 三、核心代码 一、项目介绍 经典老框架SSM打造入门项目《医院电子病历管理系统》,分为用户网页和管理后台,包括科室模块、医生模块、预约挂号模块、…

AI网络爬虫:批量获取post请求动态加载的json数据

网站https://www.futurepedia.io/ai-innovations的数据是通过post请求动态加载的: 查看几页的请求载荷: {"companies":[],"startDate":"2023-12-01T00:00:00.000Z","endDate":"2024-06-09T12:25:08.525Z&…

wireshark 标记自己想要的数据包

1:点击视图 2:点击视图-着色规则 点击新增一行,双击名称-进行编辑 过滤器规则-编辑自己想要看到的 点击前景-选择凸出显示颜色 点击背景--选择凸出显示颜色 点击确定按钮

提升易用性,OceanBase生态管控产品的“从小到大”

2022年,OceanBase发布4.0版本“小鱼”,并首次公开提出了单机分布式一体化这一理念,旨在适应大小不同规模的工作负载,全面满足用户数据库“从小到大”全生命周期的需求。当时,我们所说的“从小到大”主要聚焦于数据库的…

Linux系统之smem命令的基本使用

Linux系统之smem命令的基本使用 一、smem命令介绍二、smem命令的使用帮助2.1 smem命令的help帮助信息2.2 smem命令的语法解释 三、smem工具安装3.1 安装epel3.2 搜索smem包3.3 安装smem 四、smem命令的基本使用4.1 查看内存概览4.2 查看内存占用百分比4.3 查看系统内存使用情况…

JDKCGLIB实现动态代理

1.代理模式 代理模式是23中设计模式中的一种。简单来说就是我们使用代理对象来替代真实对象,这样就可以实现在不修改原目标对象的前提下,提供额外的功能操作,以达到扩展目标对象的功能。 代理模式的功能主要是扩展目标对象的功能,比如说在目…