首页 > 编程语言 >python系列&AIi系列(参考性极强):【完全攻略】Gradio:建立机器学习网页APP

python系列&AIi系列(参考性极强):【完全攻略】Gradio:建立机器学习网页APP

时间:2024-06-02 16:04:17浏览次数:23  
标签:输出 系列 gr python demo Gradio 参考性 组件 import

【完全攻略】Gradio:建立机器学习网页APP




【完全攻略】Gradio:建立机器学习网页APP

前言

Gradio是一个用于构建交互式界面的Python库。它可以帮助您快速创建自定义的Web界面,用于展示和测试机器学习模型、自然语言处理模型、计算机视觉模型等。

一、Gradio介绍以及安装

1-1、Gradio介绍

Gradio:
  • Gradio是一个用于构建交互式界面的Python库。它可以帮助您快速创建自定义的Web界面,用于展示和测试机器学习模型、自然语言处理模型、计算机视觉模型等。

  • Gradio使得构建交互式界面变得非常简单,无需编写繁琐的HTMLCSSJavaScript代码。您可以使用Gradio来创建一个具有输入字段(如文本输入或图像上传)和输出字段(如模型预测结果)的界面,用户可以直接与您的模型进行交互。

  • Gradio支持多种输入和输出类型,包括文本、图像、音频和视频。您可以通过定义回调函数来处理输入,并将输出返回给用户。Gradio还提供了自动化的界面布局和样式,使得界面设计变得简单而直观。

在这里插入图片描述

1-2、安装

安装:Gradio需要python版本为3.8以上

pip install python
pip install gradio
# update
pip install --upgrade gradio -i https://mirror.baidu.com/pypi/simple

二、快速开始(初步了解)

2-1、简单小栗子

小栗子:将会在浏览器自动弹出(地址: http://localhost:7860)

gr.Interface类: 可以使用用户界面包装任何函数

  • fn: 要运行的函数或模型。这个函数接受输入并返回输出。

  • inputs: 输入组件的类型和顺序。可以使用字符串表示组件类型(如"text"“checkbox”"slider"等),也可以使用Gradio提供的组件对象(如gr.TextInput()gr.Checkbox()gr.Slider()等)。

  • outputs: 输出组件的类型和顺序。同样可以使用字符串Gradio提供的组件对象表示。

import gradio as gr

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

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

    
if __name__ == "__main__":
    demo.launch()   

输出

在这里插入图片描述

2-2、多输入多输出

注意:输入列表中的每个组件依次对应fn函数中的参数。输出列表中的每个组件都对应于fn函数的返回值,注意按照顺序排列。

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)

# 创建一个Gradio界面的实例。fn参数指定了要运行的函数,inputs参数指定了输入组件的类型和顺序,outputs参数指定了输出组件的类型和顺序。在这里,输入组件依次是文本输入、复选框和滑块,输出组件依次是文本输出和数字输出。
demo = gr.Interface(
    fn=greet,
    # 输入部分为Text组件,checkbox组件、滑块。
    inputs=["text", "checkbox", gr.Slider(0, 100)],
    outputs=["text", "number"],
)
demo.launch()

输出

在这里插入图片描述

2-3、简易聊天机器人

gr.ChatInterface: 专门为聊天机器人UI设计的接口。该接口包装了一个函数,接受messagehistory作为参数,返回字符串作为相应。title作为标题。

  • message:用户输入的信息

  • history:对话历史

import random
import gradio as gr

def random_response(message, history):
    return random.choice(["Yes", "No"])

demo = gr.ChatInterface(random_response, title='chatgpt')

demo.launch()

三、关键技术

3-1、带有样例的输入

概述:提供输入数据样例,主要是通过examples关键字,提供一个嵌套列表。

"""
这段代码使用Gradio库创建了一个简单的计算器应用。应用中定义了一个名为calculator的函数,它接受三个参数:num1(第一个数字)、operation(操作符)和num2(第二个数字)。根据操作符的不同,函数会执行相应的计算操作,包括加法、减法、乘法和除法。如果除法操作中的第二个数字为零,会抛出一个gr.Error异常。
"""
import gradio as gr
#from foo import BAR
#
def calculator(num1, operation, num2):
    if operation == "add":
        return num1 + num2
    elif operation == "subtract":
        return num1 - num2
    elif operation == "multiply":
        return num1 * num2
    elif operation == "divide":
        if num2 == 0:
            raise gr.Error("Cannot divide by zero!")
        return num1 / num2

demo = gr.Interface(
    calculator,
    [
        "number", 
        gr.Radio(["add", "subtract", "multiply", "divide"]),
        "number"
    ],
    "number",
    examples=[
        [45, "add", 3],
        [3.14, "divide", 2],
        [144, "multiply", 2.5],
        [0, "subtract", 1.2],
    ],
    title="Toy Calculator",
    description="Here's a sample toy calculator. Allows you to calculate things like $2+2=4$",
)

demo.launch()

输出
在这里插入图片描述

3-2、提示弹窗

提示弹窗:当遇到错误时以弹窗的形式弹出,如上边例子中除以0的时候会引发的错误(gr.Error(“Cannot divide by zero!”)),也可以使用gr.Warning 或者 gr.Info 来告警。

在这里插入图片描述
在这里插入图片描述

3-3、描述内容

概述:接口中的一些参数可以帮助理解APP,如下方图片,分别对应三个参数的内容。

  • title:标题

  • description: 描述性内容

  • article:最下方的描述

在这里插入图片描述

3-4、风格

概述:选择界面风格

demo = gr.Interface(..., theme=gr.themes.Monochrome())

输出

在这里插入图片描述

3-5、流式输出

概述:流式输出文字,一个个输出,而不是全部输出,这里用到了关键字yield。这里我们使用time.sleep(0.1)来手动的让每个文字输出有间隔。

import random
import time

import gradio as gr


def random_response(message, history):
    responses = [
        "谢谢您的留言!",
        "非常有趣!",
        "我不确定该如何回答。",
        "请问还有其他问题吗?",
        "我会尽快回复您的。",
        "很高兴能与您交流!",
    ]

    # 逐步生成回复
    responses = random.choice(responses)
    responses_so_far = ""
    for char in responses:
        responses_so_far += char
        time.sleep(0.1)
        yield responses_so_far


demo = gr.ChatInterface(random_response, title='ㄣ知冷煖★')

demo.launch()

输出
在这里插入图片描述

3-6、进度条

概述Gradio支持创建自定义进度条,只需要在方法中添加progress=gr.Progress(),即可,可以直接通过调用实例并赋值来更新进度条,如progress(0.05),也可以使用其中的tqdm方法来跟踪迭代更新进度。

import gradio as gr
import time

def slowly_reverse(word, progress=gr.Progress()):
    progress(0, desc="Starting")
    time.sleep(1)
    progress(0.05)
    new_string = ""
    for letter in progress.tqdm(word, desc="Reversing"):
        time.sleep(0.25)
        new_string = letter + new_string
    return new_string

demo = gr.Interface(slowly_reverse, gr.Text(), gr.Text())

demo.launch()

输出

在这里插入图片描述

3-7、分享APP

概述:Gradio样例可以通过设置share=True来让他人访问。有访问期限。其他方案

demo.launch(share=True)

参考文献:

Gradio文档

总结

年年岁岁花相似,岁岁年年人不同。







ㄣ知冷煖★

【完全攻略】Gradio:建立机器学习网页APP

标签:输出,系列,gr,python,demo,Gradio,参考性,组件,import
From: https://blog.csdn.net/weixin_54626591/article/details/139391850

相关文章

  • Docker 部署 Python 服务
    app.pyfromflaskimportFlaskfromredisimportRedis,RedisErrorimportosimportsocket#ConnecttoRedisredis=Redis(host="redis",db=0,socket_connect_timeout=2,socket_timeout=2)app=Flask(__name__)@app.route("/")defhe......
  • Python—面向对象小解(5)
    一、多任务介绍1.1进程与线程进程是操作系统分配资源的最小单元线程执行程序的的最小单元线程依赖进程,可以获取进程的资源一个程序执行先要创建进程分配资源,然后使用线程执行任务默认情况下一个进程中有一个线程1.2多任务介绍运行多个进程或线程执行代码逻辑......
  • 【程序异常记录】01 --- python编码问题
    问题描述df=pd.read_csv(meter_path,encoding='utf-8')指定utf-8编码读取后赋值到rosmsg进行topicpublish报错error:fieldmeters_result[].task_meter_id.meter_id.alias_nameisanon-asciistringtips:str通过encode()方法可以编码为指定的bytes。反过来,当从网络或......
  • 椭圆曲线密码学(ECC)加解密,附带python代码
    想起来很久没写博客了,刚好今天要写实验报告,随便把之前的也完成吧1.椭圆曲线概念椭圆曲线在经过化解后,可以用这条式子表达:E:y²=x³+ax+b其背后的密码学原理,是基于椭圆曲线离散对数问题,比RSA算法更有安全且运算速度更快。在看上面的式子,我们知道构造一个椭圆曲线,需要a,b两个参数......
  • Python中的魔法函数
        大家好,Python作为一种高级编程语言,以其简洁、优雅和易读性而闻名。然而,Python的强大之处不仅仅在于其语法的简洁性,还在于其灵活的面向对象编程范式。在Python中,有一类特殊的方法被称为“魔法函数”,它们以双下划线(__)开头和结尾,为Python提供了一种强大的机制,使得用......
  • 使用python绘制小提琴图
    使用python绘制小提琴图小提琴图效果代码小提琴图小提琴图(ViolinPlot)是一种结合了箱线图和核密度估计图的图形,用于显示数据分布的情况。它不仅展示了数据的四分位数、最大值和最小值,还通过密度曲线展示了数据的分布形状。相比于传统的箱线图,小提琴图可以提供更多关......
  • 【python学习】Anaconda的介绍、下载及conda和pip换源方式(切换到国内镜像源)
    什么是AnacondaAnaconda是一个专为数据科学和机器学习预装了多种库的Python发行版。提供了包管理与环境管理的功能解决了多个版本python并存的问题解决了第三方包安装问题如何下载Anaconda官网地址:https://www.anaconda.com/点击右上角的FreeDownload填写邮箱地址......
  • 九天毕昇深度学习平台 | 升级python版本3.8
    下载3.8版本https://www.python.org/ftp/python/3.8.18/Python-3.8.18.tgz解压!tar-xvfPython-3.8.18.tgz在终端配置./configure#(可选--prefix=/usr/local/python3.8.18)makesudomakeinstall不指定--prefix时,configure会将可执行文件安装到/usr/local/bin,库......
  • 202305青少年软件编程(Python)等级考试试卷(四级)
    第1题【单选题】有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。问第n年的时候,共有多少头母牛?由递推法可推测,当年数小于等于4的时候,第几年就是有几头牛,即a[1]=1;a[2]=2;a[3]=3;a[4]=4。当n大于4的时候,这时候第......
  • 什么!你还在学列表和元组?!这一篇文章就够了!之Python基础篇-列表与元组
    列表定义列表的格式:列表名=[元素1,元素2,元素3,......]空列表的定义:my_list=[](常用)  或  my_list=list()列表中的元素不需要具有相同的类型。#定义列表list1,且列表中的元素不具有相同的类型>>>list1=['xiaoming','m',201,54,'13458714']>>>type(list......