AI视觉

最近间断了一会儿全栈的学习进程,跟项目在学习CV方面的内容,简单记录一下

实现单目标跟踪

单目标跟踪&轨迹生成

 1 import mmcv
 2 import tempfile
 3 from mmtrack.apis import inference_sot, init_model
 4 
 5 # 输入输出视频路径
 6 input_video = 'data/bee.mp4'
 7 output = 'outputs/C4_SOT_bee_trace.mp4'
 8 
 9 # 指定单目标追踪算法 config 配置文件
10 sot_config = './configs/sot/siamese_rpn/siamese_rpn_r50_20e_lasot.py'
11 # 指定单目标检测算法的模型权重文件
12 sot_checkpoint = 'https://download.openmmlab.com/mmtracking/sot/siamese_rpn/siamese_rpn_r50_1x_lasot/siamese_rpn_r50_1x_lasot_20211203_151612-da4b3c66.pth'
13 # 初始化单目标追踪模型
14 sot_model = init_model(sot_config, sot_checkpoint, device='cuda:0')
15 
16 # 指定初始目标矩形框坐标 [x, y, w, h]
17 init_bbox_xywh = [132, 59, 57, 61]
18 
19 # 转成 [x1, y1, x2, y2 ]
20 init_bbox_xyxy = [init_bbox_xywh[0], init_bbox_xywh[1], init_bbox_xywh[0]+init_bbox_xywh[2], init_bbox_xywh[1]+init_bbox_xywh[3]]
21 
22 # 读入待预测视频
23 imgs = mmcv.VideoReader(input_video)
24 prog_bar = mmcv.ProgressBar(len(imgs))
25 out_dir = tempfile.TemporaryDirectory()
26 out_path = out_dir.name
27 
28 # 逐帧输入模型预测
29 circle_coord_list = []
30 print('开始逐帧处理')
31 for i, img in enumerate(imgs):
32     img_draw = img.copy()
33     
34     result = inference_sot(sot_model, img, init_bbox_xyxy, frame_id=i)
35     # 目标检测矩形框坐标
36     result_bbox = result['track_bboxes'][:4].astype('uint32')
37     
38     # 绘制目标检测矩形框:图像,左上角坐标,右下角坐标,颜色,线宽
39     img_draw = cv2.rectangle(img_draw, (result_bbox[0], result_bbox[1]), (result_bbox[2], result_bbox[3]), (0,255,0), 2)    
40     
41     # 获取矩形框中心点轨迹点坐标
42     circle_x = int((result_bbox[0] + result_bbox[2]) / 2)
43     circle_y = int((result_bbox[1] + result_bbox[3]) / 2)
44     circle_coord_list.append([circle_x, circle_y])
45     # 绘制从第一帧到当前帧的轨迹
46     for each in circle_coord_list:
47         # 绘制圆,指定圆心坐标和半径,红色,最后一个参数为线宽,-1表示填充
48         img_draw = cv2.circle(img_draw, (each[0],each[1]), 5, (0,0,255), -1)
49     
50     # 将当前帧的可视化效果保存为图片文件
51     cv2.imwrite(f'{out_path}/{i:06d}.jpg', img_draw)
52     prog_bar.update()
53 
54 # 将保存下来的各帧图片文件串成视频
55 print('导出视频,FPS {}'.format(imgs.fps))
56 mmcv.frames2video(out_path, output, fps=imgs.fps, fourcc='mp4v')
57 print('已成功导出视频 至 {}'.format(output))
58 out_dir.cleanup()

 

原文地址:http://www.cnblogs.com/AC-Mirabelle/p/16816031.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性