视频标注工具,包含两个功能
- 视频类别标注 (LabelV-CLS)
- 视频时空标注 (LabelV-STL)
要求Python 3.x环境,安装依赖项:
pip install -r requirements.txt对每个视频标注一个类别标签,可用于视频筛选或分类
- Tips:
为了方便视频标注和模型训练,建议提前将所有视频先处理成不超过20秒的短视频,一般10秒比较合适
- 将待标注视频放在同一个文件夹下,视频需要编码为html5 <video>标签所支持的视频编码格式:MP4、WebM、Ogg。
- (本步骤可省略)生成待标注视频的文件名列表文件
xxxxx.txt, 文件内容类似如下:
path
video1/a.mp4
video1/b.mp4
video/c.mp4
如果上述第2步省略,则配置文件configs/example_cls.yaml中video_list='',此时将自动获取video_dir中的视频文件用于标注,否则video_list='/path/to/xxxxx.txt'需要完整文件路径。
根据自己的数据修改配置文件中的其它参数,参数配置完成后运行服务启动命令:
python labelv_cls.py configs/example_cls.yaml浏览器打开标注URL进行标注: http://0.0.0.0:port/task_name, 远程标注时,将IP替换为服务器的真实IP, port和task_name见配置文件

标注视频中某一事件或行为动作发生的时空位置,包括起始时刻点和每个时刻在视频中的空间位置。
- Tips:
为了方便视频标注和模型训练,建议提前将所有视频先处理成不超过20秒的短视频,一般10秒比较合适
- 将待标注视频放在同一个文件夹下,视频需要编码为html5 <video>标签所支持的视频编码格式:MP4、WebM、Ogg。
- (本步骤可省略)生成待标注视频的文件名列表文件
xxxxx.txt, 文件内容类似如下:
path
video1/a.mp4
video1/b.mp4
video/c.mp4
从第二行开始,每行包含一个相对路径,video_dir和该相对路径组成视频的完整路径。
如果上述第2步省略,则配置文件configs/example_stl.yaml中video_list='',此时系统自动获取video_dir中的视频文件用于标注, 否则:
- 填入生成的
/path/to/xxxxx.txt文件完整路径 - 直接使用视频类别标注 (LabelV-CLS)生成的csv文件(
configs/example_cls.yaml中label_file变量的值)作为video_list,此时,所有label_id=1的视频将用于标注 根据自己的数据修改配置文件中的其它参数,参数配置完成后运行服务启动命令:
python labelv_stl.py configs/example_stl.yaml- 刷新网页可暂时跳过该视频
- 标注完一个动作后,点击保存,暂存该动作的标注数据;然后重新设定起始帧继续标定下一个动作并保存;直到该视频所有动作并标注完成后点击提交结果
- 系统根据起始结束帧和关键帧间隔自动计算待标注的关键帧,每个关键帧单击后自动变为绿色,表示这个关键帧的框被已被正确标注,双击可取消。首尾关键帧必须被标注为绿色,未标注为绿色的其它帧将根据绿色帧自动插值计算框(差值框用红色显示)。仅标记为绿色的关键帧的框才会被保存。
验证是否已经安装 ffmpeg, 终端输入命令: ffmpeg .
如果没有安装需要先安装, Anaconda环境下安装命令:conda install ffmpeg
修改 video_visual.py 中参数:
video_dir: 视频数据所在目录,意义同配置文件中的video_dir参数output_dir: 可视化标注结果后数据视频的目录label_file: 标注文件路径,意义同配置文件中的label_file参数
然后文件路径后运行命令:
python video_visual.py浏览器打开URL: http://0.0.0.0:port/task_name 进行标注。 下面是两个视频的标注结果:
[
{
"scale": 0.5,
"name": "coverr-man-and-woman-talking-after-a-tennis-match-1142-1080p.mp4",
"actions": [
{
"start": 16,
"end": 101,
"label": "喝水",
"boxes": {
"16": [
548,
67,
786,
538
],
"37": [
557,
91,
786,
538
],
"59": [
552,
124,
786,
538
],
"80": [
538,
149,
786,
538
],
"101": [
525,
175,
786,
538
]
}
}
],
"time": "2022-11-30 11:41:33"
},
{
"scale": 0.5,
"name": "coverr-a-guy-surfing-in-the-sea-8809-1080p.mp4",
"actions": [
{
"start": 217,
"end": 247,
"label": "跌倒",
"boxes": {
"217": [
190,
56,
374,
355
],
"232": [
300,
138,
448,
361
],
"247": [
421,
132,
566,
245
]
}
}
],
"time": "2022-11-30 11:51:48"
}
]其中:
scale: 视频标注时缩放倍数,在原始视频上boxes的真实值是 boxes/scalename: 视频文件名actions: 对应视频标注出来的动作或者事件start: 动作或者事件的起始帧号,帧号/平均帧率可以换算成起始时间end: 动作或者事件的结束帧号,帧号/平均帧率可以换算成结束时间label: 对应的类别名称boxes: 关键帧的bounding box, 以{帧号: box}形式保存time: 标注提交时间

