YOLOv5实现目标分类计数并显示在图像上

这篇具有很好参考价值的文章主要介绍了YOLOv5实现目标分类计数并显示在图像上。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        有同学后台私信我,想用YOLOv5实现目标的分类计数,因此本文将在之前目标计数博客的基础上添加一些代码,实现分类计数。阅读本文前请先看那篇博客,链接如下:

YOLOv5实现目标计数_Albert_yeager的博客

1. 分类实现

        以coco数据集为例,其类别如下(共80类)。注意,每个类别都对应着一个序号,如: 'person' 序号为0,  'bicycle' 序号为1,  'car'  序号为2...这个在之后的调用中会用到。

YOLOv5实现目标分类计数并显示在图像上

         找到之前写的的计数模块(详见之前的博客),将其替换为下面的代码,即可实现分类计数功能,下面我将进行详细的讲解。

# Write results+计数
# count=0
person_count = 0
tie_count = 0
for *xyxy, conf, cls in reversed(det):
    if save_txt:  # Write to file
        xywh = (xyxy2xywh(torch.tensor(xyxy).view(1, 4)) / gn).view(-1).tolist()  # normalized xywh
        line = (cls, *xywh, conf) if opt.save_conf else (cls, *xywh)  # label format
        with open(txt_path + '.txt', 'a') as f:
            f.write(('%g ' * len(line)).rstrip() % line + '\n')

    if save_img or view_img:  # Add bbox to image
        #c = int(cls)# integer class分类数
        #label = '%s %.2f  num: %d' % (names[int(cls)], conf, person_count)
        label = f'{names[int(cls)]} {conf:.2f}'
        plot_one_box(xyxy, im0, label=label, color=colors[int(cls)], line_thickness=3)
    ##########################分类计数##########################
        if int(cls) == 0:
            person_count += 1
        if int(cls) == 27:
            tie_count += 1
        # count = count+1

YOLOv5实现目标分类计数并显示在图像上

         添加的主要代码为1、2、4,其中1、2是初始化两个类别的个数,这里我选择人('person')和领带('tie')作为两个计数的类(可以根据需求添加自己的类)。3是显示标签的格式,下面那一行是官方的,你也可以改成自己喜欢的样子。

        重点来了!4中的代码是两个判断,int(cls)表示类别的序号。在coco的类别中,'person' 的序号为0,因此当 int(cls) == 0 时也就是当识别到人时,人的计数器 person_count+1;'tie' 的序号为27,因此当 int(cls) == 27 时也就是当识别到领带时,领带的计数器 tie_count+1。这样就能实现分类计数。

YOLOv5实现目标分类计数并显示在图像上

         这里用的推断模型是yolov5s.pt,是用coco数据集训练出来的,因此识别的类就是上面展示的80类,序号就是依次从0-79(这是一句废话)。那么如果要对自己的数据集进行分类计数,那么就要用自己训练出来的模型进行推断,序号就是按训练部署时names数组中的序列,从0开始,依次递增。

        为了讲得更清楚,我再举一个例子(点赞关注一下呗(>﹏<) ,555~)

        下面是我自己训练部署时的数据集文件内容,可以看到我要识别五个目标,分别是HEWSN,那么根据names数组中的序列,‘H’对应的序号为0,E对应1,W对应2,S对应3,N对应4。

YOLOv5实现目标分类计数并显示在图像上

         如果我想对W和S进行分类计数,那么上面的代码应该改成下面这样,首先定义W_count,S_count两个计数器,然后当int(cls) == 2时W_count+1,int(cls) == 3时S_count+1。当然,推断模型记得改成自己的(更改 '--weights' 参数的默认值)。

# Write results+计数
# count=0
W_count = 0
S_count = 0
for *xyxy, conf, cls in reversed(det):
    if save_txt:  # Write to file
        xywh = (xyxy2xywh(torch.tensor(xyxy).view(1, 4)) / gn).view(-1).tolist()  # normalized xywh
        line = (cls, *xywh, conf) if opt.save_conf else (cls, *xywh)  # label format
        with open(txt_path + '.txt', 'a') as f:
            f.write(('%g ' * len(line)).rstrip() % line + '\n')

    if save_img or view_img:  # Add bbox to image
        #c = int(cls)# integer class分类数
        #label = '%s %.2f  num: %d' % (names[int(cls)], conf, person_count)
        label = f'{names[int(cls)]} {conf:.2f}'
        plot_one_box(xyxy, im0, label=label, color=colors[int(cls)], line_thickness=3)
    ##########################分类计数##########################
        if int(cls) == 2:
            W_count += 1
        if int(cls) == 3:
            S_count += 1
        # count = count+1

2. 图片/视频识别显示计数内容

        为了将计数结果显示在图像上,需要使用 cv2.putText() 函数,具体添加方法如下:

YOLOv5实现目标分类计数并显示在图像上

       在 “if save_img:” 后添加下面这几行代码即可,这里我就只打印人和领带的计数了,大家可以根据自己的需求改。

##############################视频识别显示计数内容####################################
text = 'person_num:%d ' % (person_count)
cv2.putText(im0, text, (180, 50), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 0, 255), 5)
text = 'tie_num:%d ' % (tie_count)
cv2.putText(im0, text, (180, 120), cv2.FONT_HERSHEY_SIMPLEX, 2, (255, 0, 0), 5)
####################################################################################

        另外注意cv2.putText()函数的几个参数意义,然后慢慢调参,让打印出来的图片美观就行了。

cv2.putText(im0, text, (40, 100), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 4)
# 要绘制的图像(im0)
# 要绘制的文本字符串(text)
# 文本的位置(x, y),窗口左上角为(0,0)
# 要使用的字体类型(font),这里用OpenCV的内嵌字体
# 字体大小(font_scale),在此处为1
# 字体颜色(font_color),在此处为红色(0, 0, 255)
# 字体线宽(thickness),在此处为4   

        最后实现效果如下(视频识别同理):

YOLOv5实现目标分类计数并显示在图像上

         

3. 实时检测窗口打印计数内容

        为了将计数结果显示在实时检测的窗口中,同样需要使用 cv2.putText() 函数,具体的修改方法如下:

YOLOv5实现目标分类计数并显示在图像上

        在 “if view_img:” 后添加下面这几行代码(这里我就只打印人的计数了,大家可以根据自己的需求改)。

##############################实时检测窗口打印计数内容#################################
text = 'person_num:%d ' % (person_count)
cv2.putText(im0, text, (180, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 4)
####################################################################################

        

        希望这篇文章可以帮助到大家,其他评论区和私信问我问题的同学们也不要急,你们的问题我一直在研究,如果完成了我会第一时间发出来并通知你的(≧∇≦)/

求学路上,你我共勉(๑•̀ㅂ•́)و✧文章来源地址https://www.toymoban.com/news/detail-474281.html

到了这里,关于YOLOv5实现目标分类计数并显示在图像上的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图像处理实战02-yolov5目标检测

    YOLOv5 是一种目标检测算法,它是 YOLO (You Only Look Once) 系列算法的最新版本。YOLOv5 采用了一种新的架构,它包括一个基于 CSPNet (Cross Stage Partial Network) 的主干网络以及一系列改进的技巧,如多尺度训练、数据增强、网络混合精度训练等,从而实现了更快的检测速度和更好的检测

    2024年02月09日
    浏览(34)
  • 【目标检测】YOLOv5:标签中文显示/自定义颜色

    本篇主要用来实现将YOLOv5输出的标签转成中文,并且自定义标签颜色的需求。 我所使用的是YOLOv5-5.0版本。 在detect.py中,这两行代码设置标签名字和颜色。 可以发现,类别名字并不是在运行检测时导入的,而是内嵌在保存的模型参数文件中。 新建一个 load_model.py 文件,加载

    2024年02月04日
    浏览(101)
  • yolov5旋转目标检测遥感图像检测-无人机旋转目标检测(代码和原理)

    YOLOv5(You Only Look Once version 5)是一个流行且高效的实时目标检测深度学习模型,最初设计用于处理图像中的水平矩形边界框目标。然而,对于旋转目标检测,通常需要对原始YOLOv5架构进行扩展或修改,以便能够检测具有任意角度的对象,比如倾斜的车牌、风力发电机叶片或者

    2024年04月14日
    浏览(43)
  • 基于yolov5的遥感图像目标检测(NWPU VHR-10)

    最近在做毕设,感觉网上信息不是很全,把自己的训练过程写下来供做这个方向的友友学习。 只有简单的复现,其余的还没探索到。 首先就是数据集:我用的数据集是西工大发布的数据集,NWPU VHR-10 链接:https://pan.baidu.com/s/1vfhDU2ORWUpL-aGM1PllGw  提取码:d5au 西工大数据集有十

    2023年04月25日
    浏览(38)
  • 目标检测论文解读复现之十:基于YOLOv5的遥感图像目标检测(代码已复现)

    前言        此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文,帮助大家解答疑惑。解读的系列文章,本人

    2024年02月06日
    浏览(41)
  • 使用YOLOV5实现视频中的车辆计数

    目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。

    2024年01月25日
    浏览(42)
  • 目标检测 YOLOv5的loss权重,以及与图像大小的关系

    YOLOv5中有三个损失分别是 box, obj, cls 在超参数配置文件hyp.*.yaml中可以设置基础值,例如 训练使用时,在train.py进行更新 可以看到损失与nl(number of detection layers,检测层的层数,这里是3)和图像尺寸相关,与layers相关这个好理解,是因为损失多个layers的加和。与图像尺寸相关

    2024年02月09日
    浏览(42)
  • ​目标检测算法——YOLOv5/YOLOv7改进之结合​SOCA(单幅图像超分辨率)

    (一)前沿介绍 论文题目:Second-order Attention Network for Single Image Super-Resolution 论文地址:CVPR19 超分辨率 代码地址:https://github.com/daitao/SAN 1.SOCA moudle结构图 2.相关实验结果 (二)YOLOv5/YOLOv7改进之结合​SOCA 1.配置common.py文件 2.配置yolo.py文件 3.配置yolov5/yolov7_SOCA moudle.yaml文件

    2024年02月07日
    浏览(273)
  • 目标检测YOLO实战应用案例100讲-基于深度学习的航拍图像YOLOv5目标检测(论文篇)(续)

    目录 基础理论及相关技术  2.1 深度学习基础理论 

    2024年04月16日
    浏览(48)
  • 两百行C++代码实现yolov5车辆计数部署(通俗易懂版)

    本文是文章传统图像处理方法实现车辆计数的后续。这里用OpenCV实现了基于yolov5检测器的单向车辆计数功能,方法是撞线计数。该代码只能演示视频demo效果,一些功能未完善,离实际工程应用还有距离。 实现流程: (1)训练yolov5模型,这里就没有自己训练了,直接使用官方

    2024年02月06日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包