视频标注工具介绍
工具
0 简介
0.1 行为识别数据标注工具的需求
- 1、标注视频框
- 2、按帧率采样
- 3、单个框多类标签
- 4、相邻帧之间框关联(设置box ID,同一个人物同一个ID)
- 5、对一段视频内容进行整体的行为标注,不必标框。最好可以选取一个时间段并播放, 以便人为确定行为的种类。
0.2 目前已有的工具
- VOTT: 目前倾向使用此工具对视频帧进行标框。该工具操作流畅,适合大量标注,可以设置采样模式,是唯一具有
3、一框多标签
标注能力的工具。
- Ultimatelabeling: 唯一具有
4、标注框关联性
功能的工具,但没有一框多标,同时使用卡顿。
- Vatic: 不推荐使用,基本只具有上述标注视频的功能,估计是早期目标识别比较常用的工具
- ELAN:建议用于整体标注,对于视频内容整体标注的需求。但不具有标框的功能。
标注工具 |
标注视频框 |
按帧率采样 |
单个框多类标签 |
相邻帧之间框关联 |
对视频进行整体标注 |
特点 |
VOTT(目前选择) |
支持 |
支持 |
支持 |
不支持 |
不支持 |
唯一可以一框多标 |
Ultimatelabeling |
支持 |
不支持 |
不支持 |
支持 |
不支持 |
唯一可以框关联 |
Vatic |
支持 |
不支持 |
不支持 |
不支持 |
不支持 |
无 |
ELAN(目前选择) |
不支持 |
支持 |
不支持 |
不支持 |
支持 |
适用整体标注需求 |
0.3 小总结
- 目前已调研的工具还没有一种可以囊括上述的所有需求。当然这毫不意外。
- 对于视频的标框,建议使用VoTT。因为我们的行为识别基本上只关注一个人的行为,所以
4、相邻帧之间框关联
显得没有这么重要,但VoTT的独有功能3、单个框多类标签
就会很需要。同时VoTT的界面设计方便快速大量地标注。
对于5、视频整体内容的标注
毫无疑问使用ELAN
1. VOTT
1.1 基本情况
- 参考资料:github (有详细的使用说明)
- 需求实现情况 :
- 标注视频框
- 按帧率采样
- 单个框多类标签
- 相邻帧之间框关联(设置box ID,同一个人物同一个ID)
- 对一段视频内容进行整体的标注,不必标框。最好可以选取一个时间段并播放, 以便人为确定行为的种类。
- 优点与缺点
- 支持多人编辑,同一个项目中切换多个视频,操作流畅,支持yi'kuang
- 源码安装有一定难度,容易失败。如使用可执行档安装,没有修改余地。
- 下载
- 链接 (建议直接下载可执行档)
- 选择需要的版本下载
- 安装与使用:我们的服务器上设置 x11 forwarding后可以直接
source ~/.bashrc
sudo snap run vott
1.2 使用方法
1.2.1 新建项目
- source connection - 导入图片的路径
- target connection - 输出图片的位置
- video settngs - 设置采样率(每秒采多少帧)
- Targets - 设置标签enter设置下一个
1.2.2 标注视频
标记一个视频很像标记一系列图像。当从左边选择一个视频,它将开始自动播放,播放器上有几个控制,如下图所示:
- 除了正常的视频播放控制,还有两对额外的按钮。
- 在左侧,有previous和next框架按钮。单击这些将暂停视频,并根据项目设置移动到下一个适当的帧。例如,如果项目设置的帧提取率为1,这些按钮将导致视频向后或向前移动1秒,而如果帧提取率为10,视频将向后或向前移动0.1秒。
- 在右边,有上一个和下一个标记的框架按钮。如果存在已标记的帧,则单击这些将暂停视频并移动到具有先前标记区域的下一个或上一个帧。彩色线也将沿着视频的时间轴可见。这些表示已经访问过的视频帧。黄线表示只访问过的框架,而绿线表示访问过和标记过的框架。可以单击彩色线条来快速导航到指定的框架。时间轴还可以用来手动将视频刷洗到任意点,不过帧提取率的项目设置始终是遵守的。暂停时,视频将根据此项目设置移动到最近的帧。这样,可以为已知包含少量标记项的视频片断设置非常低的帧抽取率(如每秒1帧),并为更高的帧抽取率(如每秒30帧)以允许细粒度控制。在播放视频时不可能标记和绘制区域。
- 此外右边的标注栏是支持多选的,选中框后点一下标签添加再点一下同一个取消,选不同标签添加第二个。 正上方有复制标注按钮,当两帧之间变化不大时可以直接把上一帧的结果复制过来。点击博士帽按钮会自动标注框,之后人工添加标签即可。
1.2.4 输出标签
- 支持的输出格式如下
- 单击左侧导航中的Export(箭头)图标。选择适当的导出提供者以及要导出的格式。分割成测试集和训练集的百分比也可以在这里调整。
2. ultimatelabeling
2.1 功能实现情况:
- 需求实现情况:
- 标注视频框
- 按帧率采样
- 单个框多类标签
- 相邻帧之间框关联(设置box ID,同一个人物同一个ID)
- 对一段视频内容进行整体的标注,不必标框。最好可以选取一个时间段并播放, 以便人为确定行为的种类。
- 优点与缺点
- 可以做到相邻帧之间框关联
- 操作卡顿,标签输出容易出错
2.2 开启方法
- 设置 x11 forwarding
- cd /hdd01/zhuhongyi/UltimateLabeling
- source ~/.bashrc
- python -m ultimatelabeling.main
2.3 界面使用方法
- 在服务器中把视频文档复制到 /hdd01/zhuhongyi/UltimateLabeling/data 即可载入。 结果会显示在界面的左边。
- 在界面中左上角
file->export
输出label.csv 结果到/hdd01/zhuhongyi/UltimateLabeling/output
- 左右光标可以切换帧,ctrl+left 可以框选, 右下角
Ifno
栏位 class选择类别, istance ID选编号,Edit
提供修改类别栏
2.4 输出格式
- 一行代表一个框的内容
- column1:帧编号(从0开始)column2:框标签编号 column3:框的ID(用于框关联帧) column4~7:'x','y','w','h' column8:内置算法输出的score
3. Vatic
3.1 功能实现情况
- 需求实现情况 :
- 标注视频框
- 按帧率采样
- 单个框多类标签
- 相邻帧之间框关联(设置box ID,同一个人物同一个ID)
- 对一段视频内容进行整体的标注,不必标框。最好可以选取一个时间段并播放, 以便人为确定行为的种类。
- 优点与缺点
3.2 使用方法
3.2.1
3.2.2 创建项目与导出结果(以下操作都是在进入docker容器后的)
1、首先我们需要对视频做取帧操作,命令行如下(此处的路径要先创建):
turkic extract /path/to/video.mp4 /path/to/output/directory1
--width 1000 --height 1000 #也可以换成 -- no-resize
2、然后我们将导出的帧转换成Vatic的格式:(这一步倒不是必须的)
turkic formatframes /path/to/output/directory1 /path/to/output/directory2
3、导入视频
sudo turkic load name path/to/output/directory2 Label1 ~Attr1A ~Attr1B
Label2 ~Attr2A ~Attr2B ~Attr2C Label3 --offline
name是数据库的名字自己取,也是你之后导出视频时需要使用的名字(最好每个视频对应一个)。 Labelx代表你要标记的类别,而Attrx是你标记类别的属性,作者说至少需要一个。最后的–offline参数,离线操作的话是必须要带上的,否则无法进行之后的操作。
4、发布视频
turkic publish --offline
生成以下结果
http://localhost/?id=1&hitId=offline
http://localhost/?id=2&hitId=offline
http://localhost/?id=3&hitId=offline
http://localhost/?id=4&hitId=offline
http://localhost/?id=5&hitId=offline
在浏览器中输入域名(e.g. http://10.0.10.56:8111/?id=1&hitId=offline)
5、导出结果
turkic dump identifier -o /output --pascal --pascal-skip 1
大致使用如上,其他细节可参考3.2.1中的链接
3.2.3 标注工具的使用
具体内容可参考图中右上角的instructions按钮。 点击右上角的new object可以生成一个框选的任务,在图中框完后在右边选框中勾选标签。如图中生成的playphone2框还可以选择outside of the view frame(不显示)occluded or obsreucted(遮挡)
3.3 注意
进入docker容器后turkic相关的指令都在~/vatic目录下。docker和本地传文件
4 ELAN(视频整体标注工具)
4.1 功能实现情况
- 对视频取时间段,并附上标注
- 按秒、按帧索引视频时间点,并播放选取的时间段。
- 不能标框
官网
未完待续