用Qt编写视频追踪数据标注工具

文章目录

  • 编写该工具的意义
  • 使用步骤
    • 选择图片所在的目录
    • 标注目标ID
    • 保存标注结果

编写该工具的意义

视频数据主要用于多目标追踪中,与目标检测不同,用于训练追踪模型的数据最重要的是目标的ID号(若某一帧中某目标被标为1号,在所有的视频帧中都应为1号),目前现成的数据集有行人追踪的MOT Challenge,车辆追踪的UA-DETRAC,如果要追踪其他类型目标需要自己采集并标注,但是在网上找不到关于特别好用的标注工具。

一开始使用LabelImg标注,每一张一次只标一个目标,后面的帧中也只标注这个目标,直到标完所有图片或该目标离开了视野,这样就得到了这个目标在视频中的活动轨迹,再用一个python脚本将这些标注处理成MOT官方的gt.txt形式,返回到第一张图片标注下一个目标…,一直把所有的目标都标完。这样的标注方法耗费了大量的时间,比如若视频中有10个目标需要标注,那么上述过程就要循环10次,而且手工画框还不准确,如果能先用精确的检测器检测出所有的目标的边界框,然后手动标它们的ID号,标注速度就会大大提升。于是自己用Qt写了一个标注工具,现在将这个工具发布出来,欢迎各位同行点评指正。

使用这个工具前提是有检测器可以精确地检测到每一个目标,如果检测结果不准确,那么标注就没有意义,如果出现漏检,也可以在标注过程中手动画边界框,但这只是一个辅助作用,主要还是用检测器的结果,如果出现误检,我们可以忽略误检的边界框。

使用步骤

项目名称叫VideoLabel,使用C++版Qt编写,因为是自己使用,没有过多华丽的图标,整个程序的结构如下:

选择图片所在的目录

进行标注之前先要用检测器检测到每一帧中的所有目标,并将检测结果按照MOT的格式保存到txt文件中,检测结果保存的格式为:
帧号,ID号,边界框左上顶点横坐标,边界框左上顶点纵坐标,边界框宽度,边界框高度,置信度

帧号即图片的编号;ID号表示该目标的轨迹号,检测结果中统一都为设置为-1,我们程序要标注的就是这个参数。

此程序生成的标注完全参照MOT的格式,所以图片的目录格式也要遵从MOT,具体操如下:新建一个目录,名称可以任意,里面再新建两个子目录命名为det和img1,两个子目录的名称不能错,否则程序读取不到图片和检测结果,将保存检测结果的文件命名为det.txt,放到det目录,需要标注的图片放到img1目录。

这样图片的检测结果就准备好了,打开标注程序,选择刚才新建的目录,程序就会自动读取图片的检测结果并把检测结果处理后画到图片上,以MOT官方数据集为例,如下图:
​​

标注目标ID

现在开始标注目标的ID即轨迹号,鼠标所在的位置边界框内会变成绿色,左上角的下拉框内可以选择要标注的ID号,默认为0(建议每一张只标一个,按D键切换下一张,A切换上一张,直到把所有的图片都标完,这样可以节省时间)一张图片的目标的目标ID号不能重复,否则程序提示错误,如果不小心标错了,也可以点右键删除或修改, 一张图片标完后结果应该是这样:

如果出现检测器漏检的情况,可以手动画框,点击Draw,可以手动画框,画完后点Click退出,手动画的框可以删除,根据检测结果画的框不能删除,这是程序的一个不足这处,后面会陆续改

保存标注结果

将所有的图片标注完后点Save会将结果保存到当前目录的gt子目录下,并命名为gt.txt,保存格式同样为MOT官方格式.

程序源码:https://github.com/baguenaudier/VideoLabel

你可能感兴趣的:(Qt,C/C++)