Gradio项目所学

news2024/12/23 13:06:47

从项目中学习Gradio:快速搭建AI算法可视化部署演示(侧重项目搭建与案例分享)

我们通常使用的两款AI可视化交互应用:
GradioStreamList 本次我们通过项目案例对Gradio从简单使用到进阶进行讲解介绍

Gradio的优势

Gradio的优势在于其代码结构的简单性与易用性,只需要简单地定义输入和输出地接口就可以快速地构建简单的交互界面,可以轻松的部署模型。并且Gradio适合场景比较简单,需要快速部署应用地开发者。

Gradio安装&基本用法

Python的第三方库Gradio便于快速上手,当前版本的Python要求在3.7及以上

# 通常使用清华镜像源来进行安装
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gradio

快速入门

import gradio as gr
# 定义
def greet(name):
    return "Hello " + name + "!"
#接口创建函数
#fn设置处理函数,inputs设置输入接口组件,outputs设置输出接口组件
#fn,inputs,outputs都是必填函数

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

执行结果:

#执行结果
Running on local URL:  http://127.0.0.1:7860

To create a public link, set `share=True` in `launch()`.

在运行程序后,会在终端提示程序运行的端口是在本地的7860端口(端口可以根据自己实际使用情况进行调整)

基本参数

Interface类以及Gradio基础模块
Interface类通过以下三个参数进行初始化:

  • fn:包装的函数
  • inputs:输入组件类型
  • outputs:输出组件类型
    通过上述的三个参数我们可以快速创建接口并发布。

Gradio基础模块:

  • 应用界面:gr.Interface(简易场景)、 gr.Blocks(定制化场景)
  • 输入输出:gr.Image(图像), gr.Textbox(文本框), gr.DataFrame(数据框), gr.Dropdown(下拉选项), gr.Number(数字), gr.Markdown, gr.Files
  • 控制组件:gr.Button(按钮)
  • 布局组件:gr.Tab(标签页), gr.Row(行布局), gr.Column(列布局)

自定义组件使用

import gradio as gr
def greet(name):
    return "Hello " + name + "!"
demo = gr.Interface(
    fn=greet,
    # 自定义输入框
    inputs=gr.Textbox(lines=3, placeholder="Name Here...",label="my input"),
    outputs="text",
)
demo.launch()
  • Interface.launch()方法返回三个值:
    • app: 为Gradio演示提供支持的Fast API应用程序
    • local_url:本地地址
    • share_url:公共地址(当share=True时生成)

进阶使用

interface交互

实时变化
在Interface中设置live=True,则输出会跟随输入实时变化。这个时候界面不会有submit按钮,因为不需要手动提交输入。

自定制组件: Blocks构建应用

相比Interface,Blocks提供了一个低级别的API,用于设计具有更灵活布局和数据流的网络应用。Blocks允许控制组件在页面上出现的位置,处理复杂的数据流(例如,输出可以作为其他函数的输入),并根据用户交互更新组件的属性可见性。

简单演示

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语句添加组件,如果不设置布局方式,那么组件将按照创建的顺序垂直出现在应用程序中,运行界面

示例代码:

import torch
import gradio as gr
import sys
import os

ROOT_PATH = sys.path[0]  # 根目录

yolov5_path = "ultralytics/yolov5"

# model =  torch.hub.load()
model = torch.hub.load(
            yolov5_path,
            "custom",
            # path=f"{local_model_path}/yolov5s",
            path=f"D:\Pycharm\PycharmProject\gradio_yolov5_det_blocks\models\\best-2.pt",
            # device="cuda:0",
            device="cpu",
            force_reload=False,
            _verbose=True,
        )

# 设置IOU , conf 来进行检测
def det_image(img):
    return model(img).render()[0]

os.chmod("D:\\Pycharm\\PycharmProject\\gradio_yolov5_det_blocks\\douchiphoto\\1.jpg",0o777)
os.chmod("D:\\Pycharm\\PycharmProject\\gradio_yolov5_det_blocks\\douchiphoto\\2.jpg",0o777)
os.chmod("D:\\Pycharm\\PycharmProject\\gradio_yolov5_det_blocks\\douchiphoto\\3.jpg",0o777)


def main():
    gr.close_all()
    imput_douchi = gr.Image(image_mode="RGB", source="upload", type="pil", label="待检测图片")

    with gr.Blocks() as gyd:

        with gr.Box():
            with gr.Row():
                with gr.Column():
                    gr.Markdown('# NetMedia团队模型展示')
                    gr.Markdown('## 相关介绍:')
                    gr.Markdown('首先向我们走来的是安驾通挖机斗齿智能检测模型...')


        with gr.Box():
            with gr.Row():
                with gr.Column():
                    gr.Markdown("### 挖机斗齿检测")
                    gr.Markdown('输入图片示例')
                    gr.Examples(["D:\\Pycharm\\PycharmProject\\gradio_yolov5_det_blocks\\douchiphoto\\3.jpg",
                                 "D:\\Pycharm\\PycharmProject\\gradio_yolov5_det_blocks\\douchiphoto\\2.jpg",
                                 "D:\\Pycharm\\PycharmProject\\gradio_yolov5_det_blocks\\douchiphoto\\1.jpg"],imput_douchi)
                    imput_douchi.render()
                    btn_douchi = gr.Button(value='点击进行挖机斗齿检测')

                with gr.Column():
                    outputs_img_p5 = gr.Image(type="pil", label="检测图片")


        btn_douchi.click(fn=det_image,
                         inputs=[imput_douchi],
                         outputs=[outputs_img_p5])


    gyd.launch(inbrowser=True)

if __name__ == '__main__':
    main()

运行结果:
在这里插入图片描述

组件渲染:点击作为输入

在某些情况下,您可能希望在实际在UI中呈现组件之前定义组件。例如,您可能希望在相应的gr.Textbox输入上方显示使用gr.examples的示例部分。由于gr.Examples需要输入组件对象作为参数,因此您需要先定义输入组件,然后在定义gr.Exmples对象后再进行渲染。解决方法是在gr.Blocks()范围外定义gr.Textbox,并在UI中希望放置的任何位置使用组件的.render()方法。

import gradio as gr
input_textbox = gr.Textbox()
with gr.Blocks() as demo:
    #提供示例输入给input_textbox,示例输入以嵌套列表形式设置
    gr.Examples(["hello", "bonjour", "merhaba"], input_textbox)
    # render函数渲染input_textbox
    input_textbox.render()
demo.launch()

在这里插入图片描述

# examples 是一个list,inputs里面有多少个组件,examples里面就需要有多少个值
# 如果想要调用摄像头进行检测 , 只需要修改inputs的image为gr.Webcam(),即可
# live=True ,当检测到输入端发生变化时,输出端也会响应的发生变化
gr.Interface(inputs=["image",gr.Slider(minimum=0,maximum=1,value=base_conf),gr.Slider(minimum=0,maximum=1,value=base_iou)],
             outputs=["image"],
             fn=det_image,
             title = title,
             description=desc,
             live=True,
             examples=[["D:\\Pycharm\\PycharmProject\\gradio_yolov5_det_blocks\\pic\douchi.jpg",base_conf,base_iou],
                       ["D:\\Pycharm\PycharmProject\\gradio_yolov5_det_blocks\pic\\yolo.jpg",base_conf,base_iou]]).launch()

端口调整

选择开放的端口进行调整:

gyd.launch(server_name="0.0.0.0",server_port=5010)

在这里插入图片描述

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

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

相关文章

Java“牵手”京东商品详情数据,京东API接口申请指南

京东平台商品详情接口是开放平台提供的一种API接口,通过调用API接口,开发者可以获取京东商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片等详细信息 。 获取商品详情接口API是一种用于获取电商平台上商品详情数据的接口,通过…

面试总结 - 计算机网络

计算机网络 1 OSI 七层模型 | TCP与UDP | 响应状态码 OSI 模型 应用层: 计算机用户,以及各种应用程序和网络之间的接口,其功能是直接向用户提供服务,完成用户希望在网络上完成的各种工作。 HTTP SMTP FTP DNS 表示层: 负责数据格式的转换&…

鸿蒙系列-如何更好地使用 ArkUI 的 Image 组件?

如何使用好 ArkUI 的 Image 组件? 开发者经常需要在应用中显示一些图片,例如:按钮中的logo、网络图片、本地图片等。在应用中显示图片需要使用 Image 组件实现,Image支持多种图片格式,包括png、jpg、bmp、svg和gif&am…

实现公网远程访问:Windows本地快速搭建SFTP文件服务器并配置端口映射

文章目录 1. 搭建SFTP服务器1.1 下载 freesshd服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内网连接测试成功 3 使用cpolar内网穿透3.1 创建SFTP隧道3.2 查看在线隧道列表 4. 使用SFTP客户端&#xff0…

镜头翻转大师:视频剪辑高手的魔法技巧

在数字媒体时代,视频制作已成为各种规模的组织和个人的必备技能。无论是小型家庭活动还是大型企业项目,都需要通过视频来展示成果、传播信息,或是仅仅为了分享生活的美好瞬间。然而,视频制作并非易事,其中最困难的步骤…

气传导蓝牙耳机排行榜,值得大家选择的气传导耳机推荐!

​随着科技的不断进步,气传导耳机已经成为了市场上备受瞩目的产品之一。相比传统耳机,气传导耳机的音质表现更加出色,同时还具有更好的佩戴感受。下面跟着我脚步来,推荐几款值得大家选择的气传导耳机,看看哪款更好&…

【错误记录】exe4j 打包程序无法设置 jar 包依赖的问题 ( 将源码 和 依赖库打包到同一个 jar 包中 )

文章目录 一、问题描述二、解决方案 一、问题描述 在 【错误记录】IntelliJ IDEA 导出可执行 jar 包执行报错 ( java.lang.ClassNotFoundException | 打包时没有选择依赖库 ) 博客中遇到 java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriverat j…

[LeetCode周赛复盘] 第 360 场周赛20230827

[LeetCode周赛复盘] 第 360 场周赛20230827 一、本周周赛总结2833. 距离原点最远的点1. 题目描述2. 思路分析3. 代码实现 2834. 找出美丽数组的最小和2. 思路分析3. 代码实现 2835. 使子序列的和等于目标的最少操作次数1. 题目描述2. 思路分析3. 代码实现 2836. 在传球游戏中最…

Leetcode328 奇偶链表

思路:分别处理奇偶,保存奇偶的第一个和最后一个节点,注意最后链接的时候需要把偶数的next去掉再拼接不然就成环了 class Solution:def oddEvenList(self, head: ListNode) -> ListNode:if not head or not head.next or not head.next.ne…

数据结构与算法-递归回溯分治

引入思考: 1.微信分销系统中有一个返利,大家应该都知道,比如B是A的下线,C是B的下线,那么在分钱返利的时候A可以分B,C的钱,这时候我们是不是就要分别找B,C的最后上级。这个问题我们一般怎么来解决…

数据通信——传输层TCP(可靠传输机制的滑动窗口)

引言 之前提到过拥塞问题,如果大量数据疯狂涌入,接收端无法及时处理就会导致数据丢包,从而使得通信受到干扰。之前的连续ARQ如果不加以节制,疯狂发送报文,接收端无法及时返回ACK就会导致网络瘫痪。 滑动窗口机制协议 这…

Linux服务器部署JavaWeb后端项目

适用于:MVVM前后台分离开发、部署、域名配置 前端:Vue 后端:Spring Boot 这篇文章只讲后端部署,前端部署戳这里 目录 Step1:服务器上搭建后端所需环境1、更新服务器软件包2、安装JDK83、安装MySQL4、登录MySQL5、修…

一百六十六、MySQL——systemctl stop mysqld无法停止MySQL8.0服务

一、目的 为了解决MySQL的中文乱码问题,需要对/etc/my.cnf文件进行参数配置。 而对/etc/my.cnf文件进行配置参数之前,需要先停止MySQL服务 二、错误命令语句示范 (一)错误的命令语句 # systemctl stop mysqld (…

SQL分组后取topN

准备数据 create table SC( SId varchar(10) comment "学生ID", CId varchar(10) comment "课程ID", score decimal(18,1) comment "课程成绩");insert into SC values(01 , 01 , 80); insert into SC values(01 , 02 , 90); insert into SC va…

用最少数量的箭引爆气球【贪心算法】

用最少数量的箭引爆气球 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x 轴从不同点 完全垂直 地…

Debian12 Gnome环境下的办公软件安装

一、禁用Wayland,启用xorg 当前Debian12 默认采用Wayland来支持gnome环境,但是许多软件无法在该系统下显示,例如:openoffice,yozo-office,weixin,fcitx。所以要在gdm3的配置文件中,…

港交所MMDH行情协议

目录 一、交易时间 二、MMDH与OMD的差异 三、MMDH消息类型 四、MMDH的市场快照数据 内地市场数据枢纽-证券市场(OMD-MMDH) 港交所OMD-C对接笔记 - skylerjiang - 博客园 (cnblogs.com) 一、交易时间 图 1 港交所交易时间段 图 2 消息序列 二、MMDH与OMD的差异 图 3 标准…

Leetcode213 打劫家舍2

思路&#xff1a;既然头尾不能同时取&#xff0c;那就分别算只取头或者只取尾&#xff0c;不考虑特殊情况的话是一个简单的动态规划 class Solution:def rob(self, nums: list[int]) -> int:if len(nums) < 3:return max(nums)max_sum [nums[0], max(nums[1], nums[0])…

IC芯片老化测试以及方案详解

芯片老化试验是一种对芯片进行长时间运行和负载测试的方法&#xff0c;以模拟芯片在实际使用中的老化情况。 1. 目的&#xff1a;芯片老化试验的目的是评估芯片在长时间使用和负载情况下的可靠性和性能稳定性&#xff0c;以确定其寿命和可靠性指标。 2. 测试方案设计&#xff1…

软件测试/测试开发丨Python 内置库 正则表达式

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27058 python 内置库 正则表达式 目录 正则表达式使用re模块实现正则表达式操作 正则表达式 正则表达式就是记录文本规则的代码可以查找操作符合某些复…