使用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张图片。更何况数据集中的视频动辄几分钟。自动标注也有瑕疵,需要逐帧对自动标注进行检查和微调。

### VOTT工具的使用方法 VOTT(Visual Object Tagging Tool)是一款开源的数据标注和标记工具,主要用于图像和视频资产的处理[^2]。以下是关于如何利用VOTT进行视频数据的标注或管理的相关说明。 #### 工具安装与初始化 为了启动并运行VOTT,用户需先完成其下载与安装过程。一旦安装完毕,在首次打开时会进入连接配置界面。在此阶段,可以通过创建新的连接来指定存储位置以及项目名称。值得注意的是,尽管保存连接后理论上应自动返回至项目设置页,但实际上可能仍需手动挑选待标注数据集路径[^3]。 #### 数据导入流程 当基本环境搭建完成后,下一步便是将目标视频素材引入到工作区当中。这一步骤通常涉及浏览本地硬盘找到对应的媒体文件夹,并将其添加进来作为可操作对象之一。支持多种格式输入使得兼容性得到了保障,从而方便不同来源的内容都能顺利参与后续环节。 #### 实际标注操作指南 进入到具体实施层面之后,可以看到界面上提供了丰富的辅助功能按钮帮助提升效率。比如针对每一帧画面可以快速绘制边界框界定感兴趣区域(ROI),同时还能附加类别标签用于区分各类实体存在形式;另外也允许调整这些矩形大小形状直至完全贴合实际物体轮廓为止。而且整个过程中会有即时反馈显示当前进度状况概览图表等等实用特性加持下让整体体验更加友好直观[^1]。 #### 结果导出选项 最后考虑成果分享传播需求方面,则设置了灵活多样的输出模式可供选择匹配下游应用场景要求。无论是CSV格式记录详细坐标参数信息还是JSON结构化描述方式均能轻松实现一键转换打包带走无缝对接其他算法模型训练框架体系内部组件之间相互协作配合达成最终目的——构建高质量机器学习样本库资源池助力AI技术发展进步不断向前迈进! ```python # 示例代码展示如何读取由VOTT生成的标准JSON文件中的标注信息 import json def load_vott_annotations(file_path): with open(file_path, 'r') as f: data = json.load(f) annotations = [] for asset in data['assets'].values(): regions = asset.get('regions', []) for region in regions: tags = region.get('tags', []) bounding_box = region.get('boundingBox') if bounding_box and tags: annotations.append({ "tag": tags[0], "left": bounding_box["left"], "top": bounding_box["top"], "width": bounding_box["width"], "height": bounding_box["height"] }) return annotations annotations_data = load_vott_annotations("path_to_your_json_file.json") print(annotations_data[:5]) # 打印前五个标注实例查看效果 ```
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卡皮巴拉不躺平

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

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

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

打赏作者

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

抵扣说明:

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

余额充值