转自:https://blog.csdn.net/EmileJiao/article/details/137448176
最终的:
import torch import gradio as grmodel=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.45def det_image(img,conf_thres,iou_thres):model.conf=conf_thresmodel.iou=iou_thresreturn 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 grmodel=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 grmodel=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.45gr.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,程序会自动检测,显示出结果。