使用VoTT进行视频数据集标注

视频数据集标注方法:使用VoTT进行视频数据集标注

By 自牧君 2021/12/04

一、 VoTT

1.1 简介

软件下载地址:www.github.com/Microsoft/VoTT/releases

VoTT是微软发布的用于图像目标检测的标注工具,它是基于JavaScript开发的,因此可以跨Windows和Linux平台运行,并且支持从图片和视频读取。此外,其还提供了基于CNTK训练的Faster-RCNN模型进行自动标注然后人工矫正的方式,这样大大减轻了标注所需的工作量。其分为V1和V2两个版本, 目前V1仅用于BUG修复,不再添加新功能支持, 因此建议直接用V2.

image-20211125160334742

1.2 安装

安装好后,软件主界面如下:

image-20211125165630097

1.3 准备工作

( 1 \mathbf{1} 1) 建立源文件夹 “source”:用来存放需要标注的视频。

image-20211125170639124

( 2 \mathbf{2} 2) 建立目标文件夹 “target”:存放转化过程中的结果。

image-20211125170801749

( 3 \mathbf{3} 3) 建立目标文件夹 “results”:存放最终标注的结果。

image-20211125170923981

1.4 创建工程

( 1 \mathbf{1} 1) 点击 New Project 新建工程:

image-20211125171101966

( 2 \mathbf{2} 2) 填写工程信息。第一项填写工程名称,第二项一般不需改动。

image-20211125171412239

( 3 \mathbf{3} 3) 指定源文件夹source。 首先点击 “Add Connection”.

image-20211125171703281

① 在 “Provider” 项下拉菜单选择 “Local File System”.

② 在 “Folder Path” 选项下,选择刚刚创建的源文件夹 “source”.

③ 选择完成后,点击 “Save Connection” 即可完成源文件夹指定。

image-20211125172017565

( 4 \mathbf{4} 4) 指定目标文件夹target。步骤同上。

image-20211125172541254

( 5 \mathbf{5} 5) Description 对工程的描述,为可选项。

Video Settings* 下的 “Frame Extraction Rate” 为视频帧率,默认是15帧,根据实际需求去改动。

image-20211125172720157

( 6 \mathbf{6} 6) 最后是类别数,可以稍后再添加。这里我稍后再添加。最后点击 “Save Project” 新建工程。

image-20211125173010231

1.5 标注

( 1 \mathbf{1} 1) 进入工程后的界面如下:

image-20211125180335827

( 2 \mathbf{2} 2) 选取矩形标注框。

image-20211125180737984

( 3 \mathbf{3} 3) 接下来进行逐帧标注。

① 用矩形标注框框选目标;

② 点击右上角的 “加号” 添加标签;

③ 输入标签名称 “coscinodiscus” (圆筛藻);

④ 回车键确定。

image-20211125181303072

① 标注框选中目标后,点击右边的绿色标签;

② 矩形标注框变成和右边标签相同颜色(绿色) 时即标注成功。

image-20211125181903506

( 4 \mathbf{4} 4​) 点击下图所示的按钮,或着按键盘上的右箭头方向键,切换下一帧继续标注:

image-20211126145429669

① 连续标注5~8帧,即可以开始自动标注。

1.6 自动标注

( 1 \mathbf{1} 1) 左边菜单栏,点击学士帽图标,进行自动标注的设置。

image-20211125204323309

( 2 \mathbf{2} 2) 自动标注设置的菜单页面如下:

image-20211125204629984

① 学习模型。一般保持默认即可。

② 勾选 “Auto Detect” 即可开始自动学习标注。

③ 保存自动标注设置。

( 3 \mathbf{3} 3) 开始自动学习标注。

image-20211125204858921

( 4 \mathbf{4} 4) 把视频进度条手动拉到开始位置,加载学习模型:

image-20211125205004391

( 5 \mathbf{5} 5) 自动学习标注有一定的瑕疵,需要手动检查纠正。

image-20211125205714020

标注框变成正确标签的颜色 (这里是绿色) 即可。

image-20211125205739440

( 6 \mathbf{6} 6) 不断重复,直到标注完为止。

1.7 保存

( 1 \mathbf{1} 1) 标注完成后,点击保存。

image-20211125210507370

( 2 \mathbf{2} 2) 设置导出格式。基本保持默认即可。

image-20211126152503266

“VoTT JSON” 选项下的 “Asset State” 项:

第一个选项是:输出全部图像。

第二个选项是:只输出当前所关联的图像 (默认选这个)。

第三个选项是:只输出当前所标记的图像。

image-20211126152538432

( 3 \mathbf{3} 3) 导出结果。

image-20211125210907608

结果将会保存到 “target” 文件夹中:

image-20211126124139099

1.8 矩形标注框的显示

( 1 \mathbf{1} 1) 这一步用 python 代码来完成,代码如下:

注意:

① 要提前安装好以下库:

pip install opencv-python --user
pip install opencv-contrib-python --user
pip install bounding_box --user

② 下列代码中,有注释的那一行需要根据自己文件的实际路径、实际文件名修改。

import json
import cv2
import os
from bounding_box import bounding_box as bbox_plot

Img_Dir = 'F:\\videoDatasetTag\\target\\vott-json-export'           # 这里填写target文件夹中vott-json-export文件夹的路径
Save_Dir = 'F:\\videoDatasetTag\\results'                           # 这里填写results文件夹路径
Draw_Tags = ['coscinodiscus']                                       # 这里填写标签名称


def make_video(img_dir, img_size=(1920, 1080), fps=5):
    file_path = os.path.join(Save_Dir, "demo.mp4")
    filelist = os.listdir(img_dir)
    fourcc = cv2.VideoWriter_fourcc('D', 'I', 'V', 'X')
    video = cv2.VideoWriter(file_path, fourcc, fps, img_size)

    for item in filelist:
        if item.endswith('.jpg'):
            item = img_dir + '/' + item
            img = cv2.imread(item)
            video.write(img)
    video.release()


def draw_one_img(img_name, img_timestamp, labels_list):

    img_path = os.path.join(Img_Dir, img_name)
    img = cv2.imread(img_path, cv2.IMREAD_COLOR)
    for label in labels_list:
        tag = label['tags'][0]
        if not tag in Draw_Tags:
            continue
        bbox = label['boundingBox']
        left = bbox['left']
        top = bbox['top']
        right = left + bbox['width']
        bottom = top + bbox['height']
        bbox_plot.add(img, left, top, right, bottom, tag, 'red')
    save_name = 'time%s.jpg' % format(img_timestamp, '.2f').replace('.', '')
    save_path = os.path.join(Save_Dir, save_name)
    cv2.imwrite(save_path, img)
    print(save_name, 'ok~')


def main():
    lb_json = os.path.join(Img_Dir, 'test-export.json')     		# 这里填写\target\vott-json-export文件夹中.json后缀的文件名
    with open(lb_json, 'r',encoding='utf-8') as f:
        labels_dict = json.load(f)

    assets = labels_dict['assets']
    size = None

    for k, v in assets.items():
        img_name = v['asset']['name']
        img_timestamp = v['asset']['timestamp']
        if size is None:
            w = v['asset']['size']['width']
            h = v['asset']['size']['height']
            size = (w, h)
        labels_list = v['regions']
        draw_one_img(img_name, img_timestamp, labels_list)

    make_video(Save_Dir, img_size=size)


if __name__ == '__main__':
    main()

( 2 \mathbf{2} 2) 执行上面的代码。

image-20211126130559250

( 3 \mathbf{3} 3) 执行完毕后,在 “results” 文件夹中即可看到 2 \mathbf{2} 2 种标注格式:带有标注的 视频 帧图片

image-20211126130802281

① 视频展示:

image-20211126130901778

② 帧图片展示 (部分):

image-20211126131010886

1.9 标注完成

训练时,如果需要的是以视频为单位,则采用步骤 1.8 1.8 1.8 中的 ①视频格式。

如果以单帧图片作为训练单位,则采用采用步骤 1.8 1.8 1.8 中的 ②帧图片格式。

1.10 测试过程中遇到的问题

( 1 \mathbf{1} 1) 该软件无法加载 .avi 格式的视频,我使用《格式工厂》软件转为 .mp4 格式后才能正常加载。

( 2 \mathbf{2} 2) 视频标注工作量大。此前工程设置了帧率为15帧,所以10秒的视频就有150帧,相当于标注了150张图片。更何况数据集中的视频动辄几分钟。自动标注也有瑕疵,需要逐帧对自动标注进行检查和微调。

  • 10
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自牧君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值