我使用了官方的脚本来绘制轨迹,该脚本就在官方网站下的跟踪文档中:
然后,我想利用 yolov8n-obb 模型来绘制轨迹。
出现如上的错误
报错代码如下:
恳请解决指导!
我使用了官方的脚本来绘制轨迹,该脚本就在官方网站下的跟踪文档中:
然后,我想利用 yolov8n-obb 模型来绘制轨迹。
让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言问题描述: 在使用 yolov8n-obb 模型绘制轨迹时,出现了错误。 解决方案: 从报错信息中可以看出,问题出现在 `draw_track` 函数的第五十两行,提示 `boxes_Frame is not subscriptable`,即无法对 `boxes_Frame` 进行下标操作。根据代码可以看出,`boxes_Frame` 是从 `camera` 中获取的物体框坐标,因此可以猜测问题出现在 `camera` 中。 查看代码可以发现,`camera` 在第一行被初始化为跟踪的摄像头,而在报错的函数中,`camera` 被重新赋值为目标检测的结果。因此,需要将目标检测和轨迹绘制分开进行,不要在目标检测的过程中修改 `camera` 的值。 这里给出一份修改后的代码:
import cv2
import numpy as np
from detect import detect # 目标检测函数
from utils import get_track_id, get_color, draw_trail # 绘制轨迹及相关函数
# 初始化跟踪器
tracker = cv2.TrackerCSRT_create()
camera = cv2.VideoCapture(0)
while True:
ok, frame = camera.read() # 读取视频帧
if not ok:
break
# 目标检测
bboxes, classes = detect(frame)
# 转换为 OpenCV 格式的坐标
bboxes = [np.array([bbox[0], bbox[1], bbox[2] - bbox[0], bbox[3] - bbox[1]])
for bbox in bboxes]
# 调用跟踪器跟踪目标
if len(bboxes) > 0:
bbox = bboxes[0] # 取第一个检测到的目标进行跟踪
tracker.init(frame, bbox)
track_id = get_track_id(classes[0])
color = get_color(track_id)
boxes_Frame = bbox
# 跟踪已检测到的目标
if boxes_Frame is not None:
ok, bbox = tracker.update(frame)
if ok:
boxes_Frame = bbox
draw_trail(frame, boxes_Frame, color)
# 显示视频帧
cv2.imshow("Tracking", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放摄像头资源
camera.release()
cv2.destroyAllWindows()
在这份代码中,将目标检测和绘制轨迹的代码进行了分离,避免了在目标检测中修改 camera
的值从而导致错误的出现。 补充说明: 为了更好地重现问题,本示例代码中省略了一些关键部分代码,仅提供了简化的轨迹绘制代码。如果需要在实际使用中进行修改,请先确保完整代码的正确性。