python目标跟踪结果可视化:生成跟踪结果图和视频

用python将跟踪可视化结果导出。

结果如图:

视频结果:

anti_uav

代码中需要改地址的地方:

txt_name跟踪文本路径;

file_path_img原始图片路径;

save_path保存结果地址;

filename跟踪文本路径(同txt_name)

#需要改地址的地方:txt_name跟踪文本路径;file_path_img原始图片路径;save_path保存结果地址;filename跟踪文本路径(同txt_name)
import os
import numpy as np
import cv2


def sort_output(txt_path):
    with open(txt_path, 'r') as f:
        list = []
        for line in f:
            list.append(line.strip())

    # with open(txt_path, "w") as f:
    #     for item in sorted(list, key=lambda x: int(float(str(x).split(',')[0]))):
    #         f.writelines(item)
    #         f.writelines('\n')
        f.close()

def draw_mot(video_id):
    txt_name = 'E:/otb_txt' + video_id + '.txt'  # 索引txt跟踪文本路径  video是自动索引的目标文件名称如otb数据集中的bastetball
    file_path_img = 'E:/otb_img' + video_id    # 原始图片路径    
    # 自动生成新的文件夹来存储画了bbox的图片 
    save_path = 'E:/result_video'
    if not os.path.exists(save_path + video_id):                 
        os.makedirs(save_path + video_id)
        print('The ' + video_id + '  have create!')
    save_file_path = save_path + video_id
    sort_output(txt_name)  # 这是一个对txt文本结果排序的代码,key=frame,根据帧数排序

    source_file = open(txt_name)
    # 把frame存入列表img_names
    file_names = os.listdir(file_path_img)
    file_names.sort(key=lambda x:int(x.split('.bmp')[0]))
    img_num = [fn for fn in file_names if fn.endswith(('.jpg', '.jpeg', '.png','.bmp'))]

    im = cv2.imread(os.path.join(file_path_img, file_names[0]))
    img_size = (im.shape[1], im.shape[0])
    fps = 30                                   #调节视频帧数
    video_dir = os.path.join(save_file_path, video_id + '.mp4')
    video = cv2.VideoWriter(video_dir, cv2.VideoWriter_fourcc('m', 'p', '4', 'v'), fps, img_size)  # mjpg-avi
    

    source_file = open(txt_name)
    for idx in img_num:
        img = cv2.imread(os.path.join(file_path_img, idx))
        # for i in range(img_num[idx]):
        line = source_file.readline()
        staff = line.split(',')
        id = video_id
        #id = staff[1]
        #cls = staff[3]
        box = staff[:]
        # print(id, box)
        # draw_bbox
        try:
            cv2.rectangle(img, (int(float(box[0])), int(float(box[1]))),
                        (int(float(box[0])) + int(float(box[2])), int(float(box[1])) + int(float(box[3]))),
                        (0, 255, 0), 2)
            # put_text
            #cv2.putText(img, str(int(id)) + ' ' + str(int(cls)), (int(float(box[0])), int(float(box[1]))),
                        #cv2.FONT_HERSHEY_SIMPLEX, 0.3, (0, 0, 255), 1)
            cv2.putText(img, str(id), (int(float(box[0])), int(float(box[1]))),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.3, (0, 0, 255), 1)
            # 保存图片
            cv2.imwrite(os.path.join(save_file_path, idx), img)
        except:
            cv2.putText(img,"no result" , (10,10),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.3, (0, 0, 255), 1)
            # 保存图片
            cv2.imwrite(os.path.join(save_file_path, idx), img)

        video.write(img)

    # 释放资源
    video.release()
    

    source_file.close()


if __name__ == '__main__':
    filename = os.listdir('E:/otb_txt')  #txt跟踪文本路径
    #生成数据集下的文件夹名称如otb的basketball
    for name in filename:
        print('The video ' + name.split('.')[0] + ' begin!')
        draw_mot(name.split('.')[0])
        print('The video ' + name.split('.')[0] + ' Done!')

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 我可以回答这个问题。生成基于Yolov5和DeepSort的多目标跟踪代码需要掌握深度学习、计算机视觉、Python编程等知识。可以参考Yolov5和DeepSort的官方文档和GitHub代码库,也可以参考相关的博客和教程。 ### 回答2: 生成基于Yolov5和DeepSort的多目标跟踪代码需要以下步骤: 第一步,安装Yolov5和DeepSort所需的环境。可以使用pip命令安装相关库,例如numpy、opencv、torch等。同时,需要下载并配置Yolov5和DeepSort的预训练权重文件和配置文件。 第二步,编写代码进行目标检测。使用Yolov5模型进行目标检测,根据输入的像或视频,对目标进行检测和识别。Yolov5模型可以通过导入Yolov5库,调用相关函数实现。 第三步,实现目标跟踪。将Yolov5检测到的目标框坐标和类别传入DeepSort模型,通过DeepSort模型对目标进行跟踪。DeepSort模型提供了卡尔曼滤波和匈牙利算法等跟踪算法,可以对目标进行精准的持续跟踪。 第四步,对跟踪结果进行后处理。根据DeepSort跟踪的结果,可以进行相关的后处理操作。例如,可以去除跟踪结果的重复目标、筛选出满足特定条件的目标,或者进行轨迹分析等。 第五步,展示和保存结果。将跟踪结果可视化展示,可以使用opencv等库将跟踪结果绘制在像或视频上。同时,对跟踪结果进行保存,方便后续分析和使用。 总之,生成基于Yolov5和DeepSort的多目标跟踪代码,需要安装相关环境、编写目标检测和目标跟踪代码,进行后处理和结果展示,并保存跟踪结果。通过实现这些步骤,可以实现一个完整的多目标跟踪系统。 ### 回答3: 生成基于Yolov5和DeepSort的多目标跟踪代码需要以下步骤: 1. 安装Yolov5和DeepSort库:首先,需要从官方Github页面上克隆Yolov5和DeepSort的代码库到本地。然后按照它们各自的文档指南进行安装和配置。 2. 数据准备:准备用于训练和测试的数据集。可以使用常见的目标检测数据集(如COCO)作为训练集,以及包含视频和标注的数据作为测试集。 3. 训练目标检测模型:使用Yolov5目标检测模型对准备好的训练集进行训练。根据Yolov5文档提供的指导,设置适当的超参数并进行训练。在训练期间,模型将学习检测目标物体的位置和类别。 4. 检测目标并应用DeepSort:使用训练好的Yolov5模型测试视频数据集,对每一帧进行目标检测。然后将检测到的目标物体传递给DeepSort算法,利用其强大的多目标跟踪能力来跟踪目标物体。DeepSort将为每个目标分配唯一的ID,并在目标遮挡或离开视野后仍然能够正确地追踪它们。 5. 结果可视化和后处理:将跟踪结果可视化,并可以在屏幕上或保存为视频进行显示。还可以应用后处理技术来进一步提高跟踪质量,例如滤除不符合运动规律的轨迹,或通过融合多个相机视角的跟踪结果来提高鲁棒性。 最后,在完成上述步骤后,你将获得一个基于Yolov5和DeepSort的多目标跟踪代码。可以在新的视频数据上应用该代码,实现准确而可靠的多目标跟踪任务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值