基于Yolov5的目标追踪(非Yolov5+DeepSort版)
Posted 荣仔!最靓的仔!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Yolov5的目标追踪(非Yolov5+DeepSort版)相关的知识,希望对你有一定的参考价值。
目录
3 源码地址
1 效果演示
基于yolov5的目标跟踪(非yolov5+deepsort版)
注:目标跟踪,全网都用的是 。仅用 可以实现吗?可以。该视频效果实现的是手动暂停正在播放的视频,在画面中对待跟踪目标进行矩形框选,再让视频播放时即可对目标进行跟踪(包括目标框定位和轨迹划线等)
2 实现细节
2.1 获取预测目标框坐标位置信息
# 前向推理
pred = model(img, augment=False)[0]
# NMS去除多余的框
pred = non_max_suppression(pred, conf_thres, iou_thres, agnostic=False)
# 开始预测
for i, det in enumerate(pred):
if det is not None and len(det):
# 将框从img大小重新缩放为im0大小
det[:, :4] = scale_coords(img.shape[2:], det[:, :4], showimg.shape).round()
for *xyxy, conf, cls in reversed(det):
str_xyxy = (torch.tensor(xyxy).tolist())
print('获得的目标框位置信息:', str_xyxy)
2.2 计算两框的 IoU
# 第一个矩形框面积
parea = (pxmax - pxmin) * (pymax - pymin)
# 第二个矩形框面积
garea = (gxmax - gxmin) * (gymax - gymin)
# 相交处矩形框四角位置坐标
xmin = max(pxmin, gxmin)
ymin = max(pymin, gymin)
xmax = min(pxmax, gxmax)
ymax = min(pymax, gymax)
# 相交处矩形框长和宽
w = xmax - xmin
h = ymax - ymin
# 若没有交集,则IoU值为0
if w < 0 or h < 0:
print('IoU值为:0')
# 否则进行IoU值的运算,并将结果返回输出
area = w * h
print('IoU值为:', area / (parea + garea - area))
2.3 实现视频画面暂停播放
import cv2
capture = cv2.VideoCapture(0)
while True:
ret, frame = capture.read()
cv2.imshow('Video', frame)
k = cv2.waitKey(1)
if k == 32: # 按下空格键即可无限次实现暂停/播放画面效果
cv2.waitKey(0)
2.4 实现在暂停视频画面后对目标框选
import cv2
# 获取鼠标位置
def draw_circle(event, x, y, flags, param):
global xmin, ymin, xmax, ymax
if event == cv2.EVENT_LBUTTONDOWN:
print(x, y)
xmin, ymin = x, y
elif event == cv2.EVENT_LBUTTONUP:
print(x, y)
xmax, ymax = x, y
xmin, ymin, xmax, ymax = 0, 0, 0, 0
cv2.namedWindow('img')
cv2.setMouseCallback('img', draw_circle)
capture = cv2.VideoCapture(0)
while True:
ret, frame = capture.read()
cv2.imshow('Video', frame)
k = cv2.waitKey(1)
if k == 32: # 按下空格暂停,画框后再按下空格,目标框即可出现
cv2.imshow('img', frame)
frame_rect = frame.copy()
cv2.rectangle(frame_rect, (xmin, ymin), (xmax, ymax), (0, 255, 0), 1)
cv2.imshow('img', frame_rect)
cv2.waitKey(0)
2.5 OpenCV画线、画框、画点等
画圆/点
cv2.circle(image, center_coordinates, radius, color, thickness)
- image:它是要在其上绘制圆的图像。
- center_coordinates:它是圆的中心坐标。坐标表示为两个值的元组,即(X坐标值,Y坐标值)。
- radius:它是圆的半径。
- color:它是要绘制的圆的边界线的颜色。对于BGR,我们通过一个元组。例如:(255,0,0)为蓝色。
- thickness:它是圆边界线的粗细像素。厚度-1像素将以指定的颜色填充矩形形状。
画框
cv2.rectangle(image, start_point, end_point, color, thickness)
- image:它是要在其上绘制矩形的图像。
- start_point:它是矩形的起始坐标。坐标表示为两个值的元组,即(X坐标值,Y坐标值)。
- end_point:它是矩形的结束坐标。坐标表示为两个值的元组,即(X坐标值ÿ坐标值)。
- color:它是要绘制的矩形的边界线的颜色。对于BGR,我们通过一个元组。例如:(255,0,0)为蓝色。
- thickness:它是矩形边框线的粗细像素。厚度-1像素将以指定的颜色填充矩形形状。
画线
cv2.line(image, start_point, end_point, color, thickness)
- image:它是要在其上绘制线段的图像。
- start_point:它是线段的起始坐标。坐标表示为两个值的元组,即(X坐标值,Y坐标值)。
- end_point:它是线段的结束坐标。坐标表示为两个值的元组,即(X坐标值ÿ坐标值)。
- color:它是要绘制的线段的边界线的颜色。对于BGR,我们通过一个元组。例如:(255,0,0)为蓝色。
- thickness:它是设定线段的粗细像素。
3 源码地址
END
以上是关于基于Yolov5的目标追踪(非Yolov5+DeepSort版)的主要内容,如果未能解决你的问题,请参考以下文章
YoloV5+GSConv:基于YoloV5GSConv得小目标检测算法训练
视频实时行为检测——基于yolov5+deepsort+slowfast算法