YOLOv5实战记录 Gradio搭建Web GUI

转自:https://blog.csdn.net/EmileJiao/article/details/137448176

最终的:

import torch
import gradio as gr
 
model=torch.hub.load("./","custom",path="runs/train/exp2/weights/best.pt",source="local")
 
title="基于Gradio的YOLOv5演示项目"
desc="这是一个基于YOLOv5的项目,非常简洁。"
 
base_conf,base_iou=0.25,0.45
 
def det_image(img,conf_thres,iou_thres):
    model.conf=conf_thres
    model.iou=iou_thres
    return model(img).render()[0]
 
gr.Interface(inputs=["image",gr.Slider(maximum=1,minimum=0,value=base_conf),gr.Slider(maximum=1,minimum=0,value=base_iou)],
             outputs=["image"],
             fn=det_image,
             title=title,
             description=desc,
             live =True,
 
             examples=[["./datasets/images/train/30.jpg",base_conf,base_iou],["./datasets/images/train/60.jpg",base_conf,base_iou]]
             ).launch(share=True)
#live=True, 可以实现实时检测,不需要点击submit。
 
# inputs=["image"] 映射,组件调用。实际上调用了gr.Image()
#创建slider时,并没有显式绑定。这是因为fn会绑定input和output input中的三个参数,对应了det_image的三个传参。
 

  初始:

import torch
import gradio as gr
 
model=torch.hub.load("./","custom",path="runs/train/exp2/weights/best.pt",source="local")
 
gr.Interface(inputs=["image"],
             outputs=["image"],
             fn= lambda img:model(img).render()[0], ).launch()
 
# inputs=["image"] 映射,组件调用。实际上调用了gr.Image()
 

  

 我们继续完善页面,添加标题,添加conf-thres 和iou-thres两个参数的滚动条,代码如下:

import torch
import gradio as gr
 
model=torch.hub.load("./","custom",path="runs/train/exp2/weights/best.pt",source="local")
 
title="基于Gradio的YOLOv5演示项目" #标题
desc="这是一个基于YOLOv5的项目,非常简洁。" #描述
 
def det_image(img,conf_thres,iou_thres):
    model.conf=conf_thres   #conf代表置信度阈值,数值越低框越多。
    model.iou=iou_thres  #代表IOU阈值,数值越低框越少,越高框越多。
    return model(img).render()[0]
 
gr.Interface(inputs=["image","slider","slider"],
             outputs=["image"],
             fn=det_image,
             title=title,
             description=desc).launch()
 
#inputs=["image"] 映射,组件调用。实际上调用了gr.Image()
#创建slider时,并没有显式绑定。这是因为fn会绑定input和output input中的三个参数,对应了det_image的三个传参。

  

现在这样有个问题,conf和iou是0-100之间的数,我们需要设置成0-1,可以直接给

    model.conf=conf_thres/100
    model.iou=iou_thres/100 

但是这种方法不够好,我们可以改善组件本身。

将“slider”改为:gr.Slider(maximum=1,minimum=0)

可以设置默认值:

base_conf,base_iou=0.25,0.45

gr.Slider(maximum=1,minimum=0,value=base_conf)

  

继续完善界面,我们可以预先放几个案例,供用户选择。

添加examples=[["./datasets/images/train/30.jpg",base_conf,base_iou],["./datasets/images/train/60.jpg",base_conf,base_iou]] 

如果想调用摄像头检测,将inputs=["image" 改为 inputs=[gr.Webcam() 即可
现在我们每次检测都需要点击submit才可以。在gr.Interface()中添加live=True,可以实现实时检测,不需要点击submit,程序会自动检测,显示出结果。

 

posted @ 2024-08-23 11:16  sweeeper  阅读(180)  评论(0)    收藏  举报