基于gradio快速部署自己的深度学习模型(目标检测、图像分类、语义分割模型)

gradio是一款基于python的算法快速部署工具,本博文主要介绍使用gradio部署目标检测、图像分类、语义分割模型的部署。相比于flask,使用gradio不需要自己构造前端代码,只需要将后端接口写好即可。此外,基于gradio实现的项目,可以托管到huggingface。

官网地址:https://www.gradio.app/guides/quickstart
文档地址:https://www.gradio.app/docs/interface
优质教程:https://zhuanlan.zhihu.com/p/624712372
安装命令:pip install gradio

托管到huggingface具体步骤如下:
在这里插入图片描述

1、基本用法

1.1 输入图像返回文本

基本使用方法如下所示

import gradio as grdef image_classifier(inp):return {'cat': 0.3, 'dog': 0.7}demo = gr.Interface(fn=image_classifier, inputs="image", outputs="label")
demo.launch()

每一个参数的描述如下所示
在这里插入图片描述
页面部署效果如下所示
在这里插入图片描述

1.2 输入文本返回文本

import random
import gradio as grdef random_response(message, history):return random.choice(["Yes "+message, "No"+message])demo = gr.ChatInterface(random_response, examples=["hello", "hola", "merhaba"], title="Echo Bot")if __name__ == "__main__":demo.launch()

在这里插入图片描述

1.3 输入图像返回图像

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
#shape设置输入图像大小
#demo = gr.Interface(sepia, gr.Image(height=200, width=200), "image")
demo = gr.Interface(sepia, inputs=gr.Image(), outputs="image")
demo.launch()

在这里插入图片描述

2、部署模型

以下部署代码中的ppDeploy 源自博客paddle 57 基于paddle_infer以面向对象方式2行代码部署目标检测模型、图像分类模型、语义分割模型

2.1 图像分类

部署代码如下所示

from ppDeploy import *
import gradio as gr 
from PIL import Imagecls=clsModel("model/resnet50/",'imagenet1000.txt',imgsz=256)
def cls_predict(input_img):res=cls.forword(input_img,topk=5)print(res)return resif __name__=="__main__":gr.close_all() demo = gr.Interface(fn = cls_predict,inputs = gr.Image(type='pil'), outputs = gr.Label(num_top_classes=5), examples = ['examples/1.jpg','examples/2.jpg','examples/3.jpg','examples/4.jpg','examples/5.jpg',])demo.launch()

部署效果如下所示
在这里插入图片描述

2.2 目标检测

部署代码如下所示,其特点是输入为image+float,输出为flaot,然后examples 需要给出多个(在显示时变成了表格)


from ppDeploy import *
import gradio as gr 
from PIL import Image#cls=clsModel("model/resnet50/",'imagenet1000.txt',imgsz=256)
det=detModel("model/ppyoloe_m/",'object365.txt',imgsz=640)
def det_predict(input_img,conf):res=det.forword(input_img,conf)return res
if __name__=="__main__":gr.close_all() #demo = gr.Interface(fn = cls_predict,inputs = gr.Image(type='pil'), outputs = gr.Label(num_top_classes=5), examples = ['examples/1.jpg','examples/2.jpg','examples/3.jpg','examples/4.jpg','examples/5.jpg',])demo = gr.Interface(fn = det_predict,inputs = [gr.Image(type='pil'),gr.Number(precision=2,minimum=0.01,maximum=1,value=0.3)], outputs = "image",examples = [['examples/1.jpg',0.3],['examples/2.jpg',0.3],['examples/3.jpg',0.3],['examples/4.jpg',0.3],['examples/5.jpg',0.3],])demo.launch()

运行效果如下所示
在这里插入图片描述

通过对部署代码进行修改,examples仅给出一个nx1的二维数组,其又变成了图片列表

from ppDeploy import *
import gradio as gr 
from PIL import Image#cls=clsModel("model/resnet50/",'imagenet1000.txt',imgsz=256)
det=detModel("model/ppyoloe_m/",'object365.txt',imgsz=640)
def det_predict(input_img,conf):res=det.forword(input_img,conf)return res
if __name__=="__main__":gr.close_all() #demo = gr.Interface(fn = cls_predict,inputs = gr.Image(type='pil'), outputs = gr.Label(num_top_classes=5), examples = ['examples/1.jpg','examples/2.jpg','examples/3.jpg','examples/4.jpg','examples/5.jpg',])demo = gr.Interface(fn = det_predict,inputs = [gr.Image(type='pil'),gr.Number(precision=2,minimum=0.01,maximum=1,value=0.3)], outputs = "image",examples = [['examples/1.jpg'],['examples/2.jpg'],['examples/3.jpg'],['examples/4.jpg'],['examples/5.jpg'],])demo.launch()

此时执行效果如下所示:
在这里插入图片描述

2.3 语义分割

部署代码如下

from ppDeploy import *
import gradio as gr 
from PIL import Image#cls=clsModel("model/resnet50/",'imagenet1000.txt',imgsz=256)
#det=detModel("model/ppyoloe_m/",'object365.txt',imgsz=640)
seg=segModel("model/segformerb1/",imgsz=1024)
def seg_predict(input_img,conf):res=seg.forword(input_img,conf)return res
if __name__=="__main__":gr.close_all() #demo = gr.Interface(fn = cls_predict,inputs = gr.Image(type='pil'), outputs = gr.Label(num_top_classes=5), examples = ['examples/1.jpg','examples/2.jpg','examples/3.jpg','examples/4.jpg','examples/5.jpg',])demo = gr.Interface(fn = seg_predict,inputs = [gr.Image(type='pil')], outputs = "image",examples = ['examples/1.jpg','examples/2.jpg','examples/3.jpg','examples/4.jpg','examples/5.jpg',])demo.launch()

部署效果如下
在这里插入图片描述

3、同时部署多个模型

3.1 部署代码

通过以下代码可以用选项卡的形式,同时部署3个模型。
以下代码中,通过with gr.Tab("图像分类"):可以开启一个新的选项卡,通过with gr.Row():可以强制是控件在同一行,通过with gr.Column():可以强制使控件在同一列。具体效果图见章节3.2


from ppDeploy import *
import gradio as gr 
from PIL import Imagewith gr.Blocks() as demo:gr.Markdown("功能选项卡")with gr.Tab("图像分类"):cls_input = gr.Image(type='pil')cls_button = gr.Button("submit",)cls_output = gr.Label(num_top_classes=5)gr.Examples(examples=['examples/1.jpg','examples/2.jpg','examples/3.jpg','examples/4.jpg','examples/5.jpg',],inputs=[cls_input])with gr.Tab("语义分割"):with gr.Row():with gr.Column():seg_input = gr.Image(type='pil')seg_button = gr.Button("submit")with gr.Column():seg_output = gr.Image(type='pil')gr.Examples(examples=['examples/1.jpg','examples/2.jpg','examples/3.jpg','examples/4.jpg','examples/5.jpg',],inputs=[seg_input])with gr.Tab("目标检测"):with gr.Row():with gr.Column():det_input_image = gr.Image(type='pil')det_input_number = gr.Number(precision=2,minimum=0.01,maximum=1,value=0.3,label='置信度')det_button = gr.Button("submit")with gr.Column():det_output = gr.Image(type='pil')gr.Examples(examples=['examples/1.jpg','examples/2.jpg','examples/3.jpg','examples/4.jpg','examples/5.jpg',],inputs=[det_input_image])#[['examples/1.jpg'],['examples/2.jpg'],['examples/3.jpg'],['examples/4.jpg'],['examples/5.jpg'],['examples/6.jpg'],]with gr.Accordion("功能说明"):gr.Markdown("点击选项卡可以切换功能选项,点击Examples中的图片可以使用示例图片")cls=clsModel("model/resnet50/",'imagenet1000.txt',imgsz=256)det=detModel("model/ppyoloe_m/",'object365.txt',imgsz=640)seg=segModel("model/segformerb1/",imgsz=1024)cls_button.click(cls.forword, inputs=cls_input, outputs=cls_output)seg_button.click(seg.forword, inputs=seg_input, outputs=seg_output)det_button.click(det.forword, inputs=[det_input_image,det_input_number], outputs=det_output)if __name__ == "__main__":demo.launch()

3.2 部署效果

图像分类效果
在这里插入图片描述
语义分割效果
在这里插入图片描述
目标检测效果
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据仓库【2】:架构

数据仓库【2】:架构 1、架构图2、ETL流程2.1、ETL -- Extract-Transform-Load2.1.1、数据抽取(Extraction)2.1.2、数据转换(Transformation)2.1.3、数据加载( Loading ) 2.2、ETL工具2.2.1、结构…

浅谈数据仓库运营

一、背景 企业每天都会产生大量的数据,随着时间增长,数据会呈现几何增长,尤其在系统基建基础好的公司。好的数据仓库需要提前规划和好的运营,才能支持企业的发展,为企业提供数据分析基础。 二、目标 提高数据仓库存储…

【RocketMQ笔记02】安装RocketMQ可视化工具rocketmq-dashboard

这篇文章,主要介绍如何安装RocketMQ可视化工具rocketmq-dashboard。 目录 一、RocketMQ可视化界面 1.1、下载rocketmq-dashboard 1.2、修改配置文件 1.3、打包工程 1.4、启动rocketmq-dashboard 一、RocketMQ可视化界面 1.1、下载rocketmq-dashboard rocketm…

Jenkins 自动设置镜像版本号

使用Jenkins环境变量当作镜像版本号 这样version变量就是版本号,在镜像构建的过程中可以使用 docker build 之后,如果有自己的镜像库,肯定要docker push 一下 至于部署的步骤,一般需要stop并删除原有的容器.我这里用的是docker-compose。同样…

利用Jmeter做接口测试(功能测试)全流程分析!

利用Jmeter做接口测试怎么做呢?过程真的是超级简单。 明白了原理以后,把零碎的知识点填充进去就可以了。所以在学习的过程中,不管学什么,我一直都强调的是要循序渐进,和明白原理和逻辑。这篇文章就来介绍一下如何利用…

SpringCloud 整合 Canal+RabbitMQ+Redis 实现数据监听

1Canal介绍 Canal 指的是阿里巴巴开源的数据同步工具,用于数据库的实时增量数据订阅和消费。它可以针对 MySQL、MariaDB、Percona、阿里云RDS、Gtid模式下的异构数据同步等情况进行实时增量数据同步。 当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.…

学习笔记15——前端和http协议

学习笔记系列开头惯例发布一些寻亲消息,感谢关注! 链接:https://baobeihuijia.com/bbhj/ 关系 客户端:对连接访问到的前端代码进行解析和渲染,就是浏览器的内核服务器端:按照规则编写前端界面代码 解析标准…

GrayLog日志平台的基本使用-ssh接入Dashboards展示

这里使用的版本为graylog4.2.10 1、一键安装graylog4.2.10,解压zip包,执行脚本就行 链接:https://pan.baidu.com/s/11U7GpBZ1B7PXR8pyWVcHNw?pwdudln 提取码:udln 2、通过rsyslog采集系统日志,具体操作参考前面文…

【二叉树】【单调双向队列】LeetCode239:滑动窗口最大值

作者推荐 map|动态规划|单调栈|LeetCode975:奇偶跳 涉及知识点 单调双向队列 二叉树 题目 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动…

Web组态可视化编辑器-by组态

演示地址: http://www.by-lot.com http://www.byzt.net web组态可视化编辑器:引领未来可视化编辑的新潮流 随着网络的普及和快速发展,web组态可视化编辑器应运而生,为人们在网络世界中创建和编辑内容提供了更加便捷的操作方式。这…

Zookeeper在分布式命名服务中的实践

Java学习面试指南:https://javaxiaobear.cn 命名服务是为系统中的资源提供标识能力。ZooKeeper的命名服务主要是利用ZooKeeper节点的树形分层结构和子节点的顺序维护能力,来为分布式系统中的资源命名。 哪些应用场景需要用到分布式命名服务呢&#xff1…

如何使用宝塔面板+Discuz+cpolar内网穿透工具搭建可远程访问论坛服务

文章目录 前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 前言 Crossday Discuz! Board(以下简称 Discuz!)是一套通用的社区论坛软件系统,用户可以在不需要任何编程的基础上&a…

华为---USG6000V防火墙web基本配置示例

目录 1. 实验要求 2. 配置思路 3. 网络拓扑图 4. USG6000V防火墙端口和各终端相关配置 5. 在USG6000V防火墙web管理界面创建区域和添加相应端口 6. 给USG6000V防火墙端口配置IP地址 7. 配置通行策略 8. 测试验证 8.1 逐个删除策略,再看各区域终端通信情况 …

【QT】非常简单的登录界面实现

本系列是作者自学实践过程的记录 本文是关于登录界面设计 有问题欢迎讨论 效果图: 一、创建项目和主界面 创建Qt Widget Application 这里我们使用qmake而不是cmake 这是主界面,登录界面等后面再创建,这里要勾选上generate form&#xff0…

个性化定制的知识付费小程序,为用户提供个性化的知识服务,知识付费saas租户平台

明理信息科技知识付费saas租户平台 在当今数字化时代,知识付费已经成为一种趋势,越来越多的人愿意为有价值的知识付费。然而,公共知识付费平台虽然内容丰富,但难以满足个人或企业个性化的需求和品牌打造。同时,开发和…

【软件工程】可执行文件和数据分离

一、概述 可执行文件和数据分离是一种软件设计策略,旨在将程序代码和程序使用的数据分离存储。这种方法通常用于提高软件的模块化程度和灵活性,以及方便软件的管理和维护。 在可执行文件和数据分离中,程序代码通常以可执行文件的形式存储&a…

负载均衡——Ribbon

文章目录 Ribbon和Eureka配合使用项目引入RibbonRestTemplate添加LoadBalanced注解注意自定义均衡方式代码注册方式配置方式 Ribbon脱离Eureka使用 Ribbon,Nexflix发布的负载均衡器,有助于控制HTTP和TCP客户端的行为。基于某种负载均衡算法(轮…

STM32 cubeMX 人体红外模块实验

本文代码使用HAL库。 文章目录 前言一、人体红外模块介绍工作原理: 二、人体红外原理图解读三、STM32 cubeMX配置红外模块四、代码编写总结 前言 实验开发板:STM32F051K8。所需软件:keil5 , cubeMX 。实验目的:了解 人…

Kali Linux—借助 SET+MSF 进行网络钓鱼、生成木马、获主机shell、权限提升、远程监控、钓鱼邮件等完整渗透测试(二)

远控木马 SET 同时集成了木马生成工具,可以生成木马并调用MSF框架对远程主机进行控制。直接使用MSF生成木马并控制主机的可参考之前另一篇博文:渗透测试-Kali入侵Win7主机。 控制主机 1、运行 SET,选择创建攻击载荷和监听器: 2…

【机器学习】人工智能概述

人工智能(Artificial Intelligence,简称AI)是一门研究如何使机器能够像人一样思考、学习和执行任务的学科。它是计算机科学的一个重要分支,涉及机器学习、自然语言处理、计算机视觉等多个领域。 人工智能的概念最早可以追溯到20世…