利用 MMDetection 处理视频


前言

在参加 OpenMMLab AI 实战营中,有个作业要求利用 MMDetection (目标检测工具包)训练模型,然后利用这个模型对一段小视频进行处理 (保留 mask 部分的彩色, 背景部分取灰)。文章的素材当然也来自实战营啦。这里主要讲一下处理视频的过程,训练模型的过程略过。


一、模型引入

from mmdet.apis import init_detector
model = init_detector(config="../work_dir/balloon.py", checkpoint="../work_dir/latest.pth")

这里 config 为训练模型的配置文件,checkpoint 为训练完保存的模型文件


二、查看图片

要利用 MMDetection 处理视频,就要先知道如何查看模型处理完之后的图片

from mmdet.apis import inference_detector, show_result_pyplot
img_path = "../data/balloon/val/3825919971_93fb1ec581_b.jpg"
result = inference_detector(model, img_path)
show_result_pyplot(model, img_path, result, score_thr=0.85)

结果如下:

![在这里插入图片描述](https://img-blog.csdnimg.cn/5a0110d8df5b4563ae937c73dfefdafd.png


三、视频每帧

我们处理视频,很容易可以想到讲视频拆穿一帧一帧处理,一帧就是一张图片,这里利用 mmcv 对视频进行处理

import mmcv
v = mmcv.VideoReader("test_video.mp4")
v.cvt2frames("frame_dir/in")

在这里插入图片描述
在处理后我们可以得到 150 张图片
在这里插入图片描述


四、处理每帧

0、理解 inference_detector

在这里插入图片描述
inference_detector 函数传入一个 model 既训练的模型,和一张或几张图片,重点在于 returns ,返回在这说的不是很清楚,单个返回的是 bbox, segm, 即边框和分割信息

result = inference_detector(model, img)
bbox, segm = result
bbox = np.array(bbox[0]) # bbox 为列表
print(bbox.shape) # (23, 5)
segm = np.array(segm[0])
print(segm.shape) # (23, 1024, 683)

这里的 23 代表检测到 23 个目标
bbox 中含有的信息为 (x, y, w, h, n)即距离左上角的宽度和长度、框的长度和宽度、概率
segm 中 (1024, 683)为图片宽度和高度,值为 Bool, true 则为 mask, false 则为背景
另外,可以看到这里引入了 numpy,一方面是为了处理方便,一方面是为了加快速度

1、处理图片

score_thr = 0.85
balloon_cnt = bbox[bbox[:, -1] > score_thr].shape[0]
data = mmcv.imread(img_path)  # -> ndarray
tmp = data.copy()
# Gray = (Red * 0.3 + Green * 0.59 + Blue * 0.11)
# 'bgr'
data[:, :, 0] = data[:, :, 2] * 0.3 + data[:, :, 1] * 0.59 + data[:, :, 0] * 0.11
data[:, :, 1] = data[:, :, 0]
data[:, :, 2] = data[:, :, 0]
for balloon in segm[:balloon_cnt]:
    data[balloon] = tmp[balloon]
mmcv.imwrite(data, "out.jpg")

这里首先判断了一下为目标(这里是 balloon 气球)大于 0.85 概率的数量,接着对整张图片进行灰度计算 (这里要注意 mmcv.imread() 返回的通道为 bgr ),最后将含有目标的部分用原来的数值替代,最后利用mmcv 保存图片
结果如下:

在这里插入图片描述


五、拼接图片

上面我们将视频拆成图片,最后我们当然要将图片拼接成视频啦

mmcv.frames2video(frame_dir="frame_dir/out", video_file="video_out.mp4")

利用 mmcv 一行代码搞定


最后

最后看看结果吧
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用MMDetection训练数据集,你可以按照以下步骤进行操作: 1. 首先,导入所需的库和模块。你可以使用以下代码导入所需的库和模块: ```python from mmdet.datasets import build_dataset from mmdet.models import build_detector from mmdet.apis import train_detector ``` 2. 构建数据集。使用`build_dataset`函数来构建数据集。你可以使用以下代码构建数据集: ```python datasets = \[build_dataset(cfg.data.train)\] ``` 3. 构建检测器模型。使用`build_detector`函数来构建检测器模型。你可以使用以下代码构建模型: ```python model = build_detector(cfg.model, train_cfg=cfg.get('train_cfg'), test_cfg=cfg.get('test_cfg')) ``` 4. 设置类别属性。为了方便可视化,你可以为模型添加一个类别属性。你可以使用以下代码设置类别属性: ```python model.CLASSES = datasets\[0\].CLASSES ``` 5. 创建工作目录。使用`mmcv.mkdir_or_exist`函数来创建工作目录。你可以使用以下代码创建工作目录: ```python mmcv.mkdir_or_exist(osp.abspath(cfg.work_dir)) ``` 6. 训练检测器模型。使用`train_detector`函数来训练检测器模型。你可以使用以下代码训练模型: ```python train_detector(model, datasets, cfg, distributed=False, validate=True) ``` 这些步骤将帮助你使用MMDetection训练数据集。请确保你已经安装了MMDetection,并按照上述步骤进行操作。\[1\]\[2\] #### 引用[.reference_title] - *1* *2* *3* [使用MMDetection训练自己的数据集](https://blog.csdn.net/ECHOSON/article/details/119959863)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值