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

news2024/11/19 17:23:46

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 gr

def 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 gr

def 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 Image

cls=clsModel("model/resnet50/",'imagenet1000.txt',imgsz=256)
def cls_predict(input_img):
    res=cls.forword(input_img,topk=5)
    print(res)
    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.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 Image




with 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.coloradmin.cn/o/1338024.html

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

相关文章

浅谈数据仓库运营

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

排序算法讲解

1)排序思想: 2)排序代码: 3)注意点: 4)时间/空间复杂度和稳定性 下面的排序是以实现升序讲解的。 (一)直接插入排序 1)排序思想: 把待排序的…

[Angular] 笔记 10:服务与依赖注入

什么是 Services & Dependency Injection? chatgpt 回答: 在 Angular 中,Services 是用来提供特定功能或执行特定任务的可重用代码块。它们可以用于处理数据、执行 HTTP 请求、管理应用程序状态等。Dependency Injection(依赖注入&#…

竞赛保研 基于人工智能的图像分类算法研究与实现 - 深度学习卷积神经网络图像分类

文章目录 0 简介1 常用的分类网络介绍1.1 CNN1.2 VGG1.3 GoogleNet 2 图像分类部分代码实现2.1 环境依赖2.2 需要导入的包2.3 参数设置(路径,图像尺寸,数据集分割比例)2.4 从preprocessedFolder读取图片并返回numpy格式(便于在神经网络中训练)2.5 数据预…

002、使用 Cargo 创建新项目,打印 Hello World

1. Cargo 简介 Cargo 是 Rust 的构建系统和包管理工具,比如构建代码、下载依赖的库、构建这些库等等。在安装 Rust 时,Cargo也会一起安装。 2. 创建新项目的具体步骤 步骤1: 我们在桌面新建一个文件夹,用于存放后面练习用的代码文…

如何让机器人具备实时、多模态的触觉感知能力?

人类能够直观地感知和理解复杂的触觉信息,是因为分布在指尖皮肤的皮肤感受器同时接收到不同的触觉刺激,并将触觉信号立即传输到大脑。尽管许多研究小组试图模仿人类皮肤的结构和功能,但在一个系统内实现类似人类的触觉感知过程仍然是一个挑战…

【计算机网络】快速做题向 极限数据传输率的计算(有噪声/无噪声)

首先需要理解什么是码元 码元在课本上的概念比较难理解 但是只要记住 二进制码元在图上显示的就是有两种高度的横杠“—”(对应0,1),即,有两种二进制码元 四进制就是有四种高度的横杠“—”(对应00&…

与擎创科技共建一体化“数智”运维体系,实现数字化转型

小窗滴滴小编获取最新版公司简介 前言: 哈喽大家好,最近分享的互联网IT热讯大家都挺喜欢,小编看着数据着实开心,感谢大家支持,小编会继续给大家推送。 新岁即将启封,我们一年一期的运维干货年末大讲也要…

【C++】开源:fast-cpp-csv-parser数据解析库配置使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍fast-cpp-csv-parser数据解析库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一…

小程序面试题 | 22.精选小程序面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

亚马逊云科技 re:Invent 大会 - ElastiCache Serverless 模式来袭

大会介绍 亚马逊云科技的 re:Invent 大会是一年一度的,面向全球技术开发者科技盛会。几乎每次都会发布云科技、云计算等相关领域的产品重磅更新,不但将时下主流热门的技术不断整合,也未将来的发展标明了方向。 亚马逊云科技开发者社区为开发…

一键启动Python世界:PyCharm安装全攻略与pyinstaller魔法转换

文章目录 一、 前言二、PyCharm1.PyCharm的介绍2.PyCharm相比较cmd的优势3.PyCharm的下载4.PyCharm的安装4.1 第一步4.2 第二步4.3 第三步4.4 第四步4.5 第五步4.6 第六步4.7 安装完成4.8 同意条款4.9 数据共享4.10 软件界面4.11 新建项目4.12 项目编写和运行4.13 汉化 三、 打…

python消费rabbitmq

队列经常用,能保持信息一致性。也能跨语言,java写的生产者,推到队列中,python写的消费者消费。 这里,生成者,我们是java,已经发了一条消息了。 python是使用pika来链接rabbitmq 安装pika pip…

java SSM课程平台系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM课程平台系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S…

若依(Spring boot)框架中如何在不同的控制器之间共享与使用数据

在若依框架或Spring boot框架中,控制器共享和使用数据是为了确保数据一致性、传递信息、提高效率和降低系统复杂性。这可以通过全局变量、依赖注入或数据库/缓存等方式实现。共享和使用数据对框架的正常运行非常关键,有助于促进控制器之间的协同工作&…

After Effects 2021 for Mac(AE 2021)

After Effects 2021是一款由Adobe公司开发的视频特效和动态图形制作软件,它主要用于电影、电视和网络视频的后期制作。该软件可以帮助用户创建各种令人惊叹的视觉效果,包括动态图形、文字特效、粒子系统、3D渲染等。 After Effects 2021提供了数百种特效…

钦丰科技(安徽)股份有限公司携卫生级阀门管件盛装亮相2024发酵展

钦丰科技(安徽)股份有限公司携卫生级阀门管件盛装亮相2024济南生物发酵展! 展位号:2号馆A65展位 2024第12届国际生物发酵产品与技术装备展览会(济南)于3月5-7日在山东国际会展中心盛大召开,展会同期将举办30余场高质…

Linux应用程序管理与安装

一.Linux应用程序基础: 1.Linux应用程序与命令的关系: 两者的用途区别: 系统命令:命令文件一般在安装操作系统一起安装,用于辅助操作系统本身的管理。 应用程序:应用程序一般需要在操作系统之外另行安装&a…

学习笔记11——Spring的XML配置

学习笔记系列开头惯例发布一些寻亲消息 链接:https://www.baobeihuijia.com/bbhj/contents/3/192584.html SSM框架——IOC基础【BeanSetter注入加载xml】 框架总览 Spring Framework 谈谈我对Spring的理解 - 知乎 (zhihu.com)java - 【架构视角】一篇文章带你彻底…

PYTHON基础:K最邻近算法

K最邻近算法笔记 K最邻近算法既可以用在分类中,也可以用在回归中。在分类的方法,比如说在x-y的坐标轴上又两个成堆的数据集,也就是有两类,如果这个时候有个点在图上,它是属于谁? 原则就是哪一类离它比较近…