基于yolov8目标跟踪+数量统计(源码)

最近项目中需要有一个高效的目标检测工具及统计各个标签通过视频中的数量,首先高效的目标检测工具当然首选是最新的yolov8,然后统计数量这个也好办,不就是目标跟踪加上一个变量来存储目标跟踪的id不就可以了吗?然而是我把问题想简单了,这个需求中需要统计不同类别标签各自的数量。最开始想不到解决方法,于是面向cdsn编程,然而,找了一圈没有找到相关的方法思路,甚至都没有找到与yolov8改进相关的文章,毕竟yolov8是新面世开源的,得!自己想呗。

最后想到一个最简单的解决方法,在目标跟踪模块增加一个2*n(n代表标签的数量)的二维数组,列标存储是哪个类别,数组的第一行存储目标跟踪得到该类别的id数,第二行存储该类数量。如此简单,直接上代码:

在这个函数中,加上数组totol_num

 接着在循环

for d in reversed(det):

中的

if self.args.save or self.args.save_crop or self.args.show:  # Add bbox to image

加入

if d.id.item() > totol_num[0][c]:   # c是类别的下标,判断这个目标是不是已经统计过了
     totol_num[0][c] = d.id.item()
     totol_num[1][c] = totol_num[1][c] + 1

接着在

magic function中增加

self.totol_num = []
   for i in range(2):
       self.totol_num.append([])
       for j in range(80):
            self.totol_num[i].append(0)

用于初始化二维数组

然后在202行调用predict.py的write_results函数中修改变量

最后在

totol_num = (predictor.totol_num).copy()
for i in range(80):
    if totol_num[1][int(i)] != 0:
    print('class: ' + str(predictor.model.names[i]) + '  num: ' + str(totol_num[1][int(i)]))

 最后是随便新建一个main函数,我们就可以快乐的跑代码啦

from ultralytics import YOLO
model = YOLO(“yolov8x.pt”)
model.track(source=”test.mp4”, tracker=”botsort.yaml”, save=True)

最后是跑出来的效果:

这是显示的内容(每一帧图片后都会显示)

 不过我用的是官方的训练参数,所以应对我们具体的场景可能识别成功率不算太高,另外还有的问题就是这个验证的速度太慢,达不到实时性的要求,用2080ti都能跑出这么拉跨的速度......

一个大二的学生,正在学习深度学习,觉得我的文章有用请关注哦~~~~

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值