我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

YOLOv5实现目标计数_Albert_yeager的博客

1. 分类实现

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

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

# Write results+计数# count=0person_count = 0tie_count = 0for *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

         添加的主要代码为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。这样就能实现分类计数。

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

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

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

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

# Write results+计数# count=0W_count = 0S_count = 0for *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() 函数,具体添加方法如下:

       在 “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   

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

         

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

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

        在 “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://blog.csdn.net/Albert_yeager/article/details/130694180

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

YOLOv5怎么实现在图片上显示统计出单一检测目标的个数

这篇文章主要介绍“YOLOv5怎么实现在图片上显示统计出单一检测目标的个数”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“YOLOv5怎么实现在图片上显示统计出单一检测目标的个数”文章能帮助大家解决问
2023-07-05

YOLOv5在图片上显示统计出单一检测目标的个数实例代码

各位读者首先要认识到的问题是,在YOLOv5中完成锚框计数是一件非常简单的工作,下面这篇文章主要给大家介绍了关于YOLOv5如何在图片上显示统计出单一检测目标的个数的相关资料,需要的朋友可以参考下
2023-05-14

android怎么实现在图标上显示数字

这篇文章主要介绍了android怎么实现在图标上显示数字的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇android怎么实现在图标上显示数字文章都会有所收获,下面我们一起来看看吧。效果图:动态显示当天的号数。主
2023-06-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录