当前位置: 首页 > news >正文

yolov5v7v8目标检测增加计数功能--免费源码

在yolo系列中,很多网友都反馈过想要在目标检测的图片上,显示计数功能。其实官方已经实现了这个功能,只不过没有把相关的参数写到图片上。所以微智启软件工作室出一篇教程,教大家如何把计数的参数打印到图片上。

一、yolov5目标检测增加计数功能实现

1、在detect.py代码中的132行左右,找到这样的代码

{n}是指类别统计的数量

{names[int(c)]}则是标签名

所以只需要调整这两个参数,就可以得到想要的格式,对于我们常用的习惯,我把代码改成了如下的格式:

运行输出代码,发现前面多出一串,并不是我们想要的效果

所以需要我们自己定义一个变量,只接收后面的统计参数即可。我这里放在了55行,定义一个空的字符串

count=''

然后在s +=的后面接收【f"{names[int(c)]}{'s' * (n > 1)}:{n} |"】的值

count+= f"{names[int(c)]}{'s' * (n > 1)}:{n} |"

然后,只需要在合适的位置,通过cv2,把参数写到图片即可。我这里添加到了151行左右,也就是im0 = annotator.result()的后面。

cv2.putText(im0, f"{count}",(30,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2,cv2.LINE_AA)

关于cv2的参数含义如下:

  • im0: 这是输入图像,即要在其上添加文本的图像。
  • f"{s}": 这是要添加到图像上的文本。在这里,s 是一个变量,它被转换为字符串并作为文本添加到图像上。
  • (30, 30): 这是文本在图像上的位置坐标。在这个例子中,文本将放置在图像的 (30, 30) 位置。
  • cv2.FONT_HERSHEY_SIMPLEX: 这是字体类型。在这个例子中,使用了 Hershey Simplex 字体。
  • 1: 这是字体缩放因子。这个值决定了文本的大小。
  • (0, 0, 255): 这是文本的颜色。在这个例子中,文本颜色为红色,表示为 BGR(蓝色、绿色、红色)格式的元组。
  • 2: 这是文本线条的粗细。这个值决定了文本边缘的粗细程度。
  • cv2.LINE_AA: 这是线条类型。在这个例子中,使用了抗锯齿线条。

在cv2添加完后,再清空字符串,方便下次的统计

count=''

二、yolov7目标检测增加计数功能


yolov7和yolov5其实差不多的,可以先运行看一下效果,这个是统计的输出如下,发现有现成的效果:

在这里插入图片描述
打开detect.py。找到117行左右



所以我们只需把{n}–这里的{n}也就是类别的数量,移动到后面就可以了,同时还可以把逗号换成自己想要的符号,我这里是“ | ”移动后如下(可以根据自己的需求更改):

s += f"{names[int(c)]}{'s' * (n > 1)}:{n}|" 

接下来,在合适的位置,通过cv2来把文字显示图片上
在这里插入图片描述

cv2.putText(im0, f"{s}",(30,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2,cv2.LINE_AA)
  • im0: 这是输入图像,即要在其上添加文本的图像。
  • f"{s}": 这是要添加到图像上的文本。在这里,s 是一个变量,它被转换为字符串并作为文本添加到图像上。
  • (30, 30): 这是文本在图像上的位置坐标。在这个例子中,文本将放置在图像的 (30, 30) 位置。
  • cv2.FONT_HERSHEY_SIMPLEX: 这是字体类型。在这个例子中,使用了 Hershey Simplex 字体。
  • 1: 这是字体缩放因子。这个值决定了文本的大小。
  • (0, 0, 255): 这是文本的颜色。在这个例子中,文本颜色为红色,表示为 BGR(蓝色、绿色、红色)格式的元组。
  • 2: 这是文本线条的粗细。这个值决定了文本边缘的粗细程度。
  • cv2.LINE_AA: 这是线条类型。在这个例子中,使用了抗锯齿线条。

v7从115行到133行的完整代码如下,可以直接替换。

       for c in det[:, -1].unique():n = (det[:, -1] == c).sum()  # detections per classs += f"{names[int(c)]}{'s' * (n > 1)}  | {n} "  # add to string# Write resultsfor *xyxy, conf, cls in reversed(det):if save_txt:  # Write to filexywh = (xyxy2xywh(torch.tensor(xyxy).view(1, 4)) / gn).view(-1).tolist()  # normalized xywhline = (cls, *xywh, conf) if opt.save_conf else (cls, *xywh)  # label formatwith open(txt_path + '.txt', 'a') as f:f.write(('%g ' * len(line)).rstrip() % line + '\n')if save_img or view_img:  # Add bbox to imagelabel = f'{names[int(cls)]} {conf:.2f}'plot_one_box(xyxy, im0, label=label, color=colors[int(cls)], line_thickness=1)# Print time (inference + NMS)print(f'{s}Done. ({(1E3 * (t2 - t1)):.1f}ms) Inference, ({(1E3 * (t3 - t2)):.1f}ms) NMS')
cv2.putText(im0, f"{s}", (30, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2, cv2.LINE_AA)

 三、yolov8目标检测计数功能实现

yolov8相对于前面两个的计数,稍微来说比较麻烦点,可能也有类似的参数,但是我没有找到,所以debug后发现【self.results[i].boxes.cls】这个属性里面,有类别的统计

打开【ultralytics/engine/predictor.py】只需要遍历统计这个类别序号的个数即可。

遍历完数据后,定义一个空的字典【names_dic = {}】

 # 将结果转换为Python列表result_list = self.results[i].boxes.cls.tolist()# 初始化一个空字典用于存储数字和它们的出现次数count_dict = {}# 遍历列表,统计数字出现的次数for number in result_list:if number in count_dict:count_dict[number] += 1else:count_dict[number] = 1for k, v in count_dict.items():names_dic[self.model.names[k]] = vresult_str = '| '.join([f'{key}:{value}' for key, value in names_dic.items()])

然后,在合格的位置,cv2,我添加在了

if self.args.verbose or self.args.save or self.args.save_txt or self.args.show:

这个方法的后面,因为只有执行了它,self.plotted_img才会被赋值

cv2.putText(self.plotted_img, result_str, (30, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2,cv2.LINE_AA)

 

运行效果如下图:


至此,代码已经全部给出了,只要注意代码的缩进,就可以大功告成了。不过,有的朋友还是不懂得修改,那么我就把测试的python完整代码放到csdn上吧,设置的0积分下载。

代码下载地址:

https://download.csdn.net/download/weixin_41717861/88887348

相关文章:

yolov5v7v8目标检测增加计数功能--免费源码

在yolo系列中,很多网友都反馈过想要在目标检测的图片上,显示计数功能。其实官方已经实现了这个功能,只不过没有把相关的参数写到图片上。所以微智启软件工作室出一篇教程,教大家如何把计数的参数打印到图片上。 一、yolov5目标检测…...

JPA常见异常 JPA可能抛出的异常

1、EntityNotFoundException(实体不存在异常): 通过 JPA 查找一个不存在的实体。 2、NonUniqueResultException(非唯一结果异常): 查询返回了多个结果,但期望只有一个结果。 3、TransactionRequiredExcep…...

Dockerfile的艺术:构建高效容器镜像的指令详解与实战指南

在容器化技术风靡全球的今天,Dockerfile作为构建 Docker 镜像的蓝图,其编写技巧与理解深度直接影响着应用部署的效率与稳定性。本文将深入剖析Dockerfile中的核心指令,以实战角度为您呈现一份详尽的解读与操作指南,并在文末抛出一…...

软件开发项目管理中各角色职责介绍

项目经理:项目经理在项目全生命周期中扮演着核心统筹与协调者的角色,负责从项目的启动、规划、执行、监控直至收尾的全过程管理。具体职责包括但不限于以下几点: 制定项目计划:依据项目业务主客户需求,明确项目范围、时…...

将时间转换为 `刚刚`、`几秒前`、`几分钟前`、`几小时前`、`几天前`、几月前或按照传入格式显示

const formatPast (date, type "default", zeroFillFlag true) > {// 定义countTime变量,用于存储计算后的数据let countTime;// 获取当前时间戳let time new Date().getTime();// 转换传入参数为时间戳let afferentTime new Date(date).getTime(…...

Oracle存储过程干货(二):PLSQL控制语句

注:本文的数据都来源于,oracle自带的emp表。 —if then elsif end if,单条件判断— declarev_grade char(1); beginv_grade : B;if v_grade A thendbms_output.put_line(哥真牛逼);elsedbms_output.put_line(哥还得加油);end if; end; /—if then els…...

深入Gradle:初识构建自动化的魅力

在软件开发的世界中,构建工具是不可或缺的一部分。它们帮助我们自动化编译、测试和打包应用程序的过程,从而节省时间并减少错误。在众多构建工具中,Gradle以其灵活性、可扩展性和卓越的性能而脱颖而出。本篇文章将带你走进Gradle的世界&#…...

cpp版ros2、opencv转换

ros2转opencv #include <opencv2/opencv.hpp> #include <cv_bridge/cv_bridge.h> #include <sensor_msgs/image_encodings.hpp> ​ subscriber_ this->create_subscription<sensor_msgs::msg::Image>( "img", 10, std::bind(&Subs…...

使用API接口竞品价格监控

步骤一&#xff1a;确定监控目标和KPIs 目标&#xff1a;明确您希望通过监控竞品价格来实现的目标&#xff0c;例如保持价格竞争力、检测价格波动等。KPIs&#xff1a;设定关键绩效指标&#xff0c;如价格变动幅度、价格调整频率等。 步骤二&#xff1a;选择数据源和API 电商…...

Redis的BitMap的使用

简介 Redis的Bitmap不是一个独立的数据结构类型&#xff0c;而是基于字符串&#xff08;String&#xff09;类型实现的一种功能 &#xff0c;存储的是二进制的文件&#xff0c;布隆过滤器就是基于BitMap实现的。 语句的使用 新增操作 setbit key offset value offset的首位…...

视频号带货究竟怎么做?老阳分享的项目怎么样?

在当今社会&#xff0c;随着互联网的快速发展&#xff0c;社交媒体已经成为人们日常生活中不可或缺的一部分。在这个背景下&#xff0c;视频号带货作为一种新兴的电商模式&#xff0c;逐渐崭露头角。许多人都想通过加入视频号带货行业来实现自己的财富自由。其中&#xff0c;老…...

AI智能分析网关V4智慧环保/智慧垃圾站视频智能分析与监控方案

一、背景介绍 随着城市化进程的加速&#xff0c;垃圾处理问题日益受到人们的关注&#xff0c;传统的垃圾站管理方式已经无法满足现代社会的需求。针对当前垃圾站的监管需求&#xff0c;TSINGSEE青犀可基于旗下视频智能检测AI智能分析网关V4与安防监控视频综合管理系统EasyCVR平…...

vxe-table编辑单元格动态插槽slot的使用

业务场景&#xff1a;表格中只有特定某一行的的单元格可以编辑&#xff0c;列很多&#xff0c;为每个列写个插槽要写很多重复代码&#xff0c;所以这里使用动态插槽&#xff0c;简化代码量。显示编辑图标&#xff0c;点击编辑图标隐藏。失去焦点保存调后台接口。 解决办法&…...

2024新鲜出炉阿里巴巴面试真题,如果不想35岁被淘汰这篇文章必看

最近看到群里看到一个女生&#xff0c;讲述了她从开始选择Android&#xff0c;经过非常努力的学习和挣扎&#xff0c;然而最后面对当前的环境却不得不放弃。看完以后真的非常替她感觉惋惜&#xff0c;如果早几年入行可能结果会比现在好很多&#xff0c;但可惜&#xff0c;这就是…...

设计模式(含7大原则)面试题

目录 主要参考文章 设计模式的目的 设计模式的七大原则 设计模式的三大分类及关键点 1、创建型模式&#xff08;用于解耦对象的实例化过程&#xff09; 2、结构型模式 3、行为型模式 23种设计模式&#xff08;乱序--现学现写&#xff0c;不全面--应付面试为主&#xff…...

claude3科普

Claude 3 是一系列由 Anthropic 推出的新一代 语言模型&#xff08;LLMs&#xff09;。Anthropic 是一家人工智能初创公司&#xff0c;其背后的投资者包括亚马逊等&#xff0c;总投资额达到 40亿美元12。 这一系列模型分为三个不同级别的能力&#xff0c;分别是&#xff1a; …...

2024中国·北京预制菜产业博览会

2024中国北京预制菜产业博览会 时间&#xff1a;2024年5月25-27日 地点&#xff1a;北京中国国际展览中心 主办单位&#xff1a;北京鸿利展览服务有限公司 承办单位&#xff1a;北京预制菜博览会组委会 北京鸿利展览服务有限公司 预制菜产业“一头连着餐桌&#xff0c;一头…...

【Vue】vue3 在图片上渲染 OCR 识别后的文本框、可复制文本组件

需求 后面返回解析后的文本和四角坐标&#xff0c;在图片上渲染成框&#xff0c;并且可复制。图片还可以缩放、拖拽 实现 这里要重点讲下关于OCR文本框的处理&#xff1a; 因为一些文字可能是斜着放的&#xff0c;所有我们要特殊处理&#xff0c;根据三角函数来计算出它的偏…...

Linux系统运维脚本:批量创建linux用户和密码(读取文件中的账号和密码来批量创建用户)

目 录 一、要求 二、解决方案 &#xff08;一&#xff09;解决思路 &#xff08;二&#xff09;方案 三、脚本程序实现 &#xff08;一&#xff09;脚本代码和解释 1、脚本代码 2、代码解释 &#xff08;二&#xff09;脚本验证 1、脚本编辑 2、给予执行权…...

重力坝廊道量水堰计与堰板安装技术指南

在水利工程中&#xff0c;重力坝廊道量水堰计的安装是确保水资源有效监测与管理的关键环节。本文将详细阐述量水堰计及量水堰板的安装方法&#xff0c;以确保安装质量&#xff0c;提高水资源利用效率。 一、量水堰计的安装位置 量水堰计应安装在堰板的上游&#xff0c;距离堰板…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...