前言
近期写了一些关于制作数据集的博客,在这里将系统性从逻辑结构构造角度出发进行数据集的制作,网络上关于VOC2COCO数据集的开源代码比比皆是,我门就以VOC数据集的制作为例子为大家介绍如何高效完成数据集的制作。
核心架构
基于LabelImg进行数据集的制作我想这种方法应该是较为传统的制作数据集的方式,通过开源代码完成LabelImg搭建进行VOC数据集的制作。在这篇博客中我将为大家带来一种快速制作数据集的方式。
核心架构:
- 读取摄像头
- 构造True循环
- 获取视频画面
- 对视频画面进行归一化(可设置成自己需要的大小方便后面计算人脸框,避免因外接相机不同造成Bug)
- 调用目标检测函数,返回值分别为:目标图像、目标在图像中的X轴坐标值、目标在图像中的Y轴坐标值
- 判断返回值中是否存在目标图像或目标在图像中的XY值(有时候画面中没有目标或目标被遮挡导致BUG跳出TURE循环)
- 如果返回值判断为不存在目标则disp(No target)
- 如果返回值判断为存在目标则执行下面的程序
- 给图像命名。图像全名 = 图像名称 + 图像格式
- 存储命名结束的图像至指定位置
- 给txt文件信息部分进行赋值。TxtInfo = 图像全名+空格+标签+空格+Xmin+空格+Ymin+空格+Xmax+空格+Ymax
- 对TxtInfo进行创建txt文件并存储。txt全程 = 图像名称 + .txt
- 结束if 和 while True 循环
剖析核心架构:
在步骤1中,我们读取摄像头是为了获取数据源;我们也可以通过读取文件夹下的图像作为获取数据源;
在步骤2中,主要是为了能够通过摄像头连接过程中能够持续性获取数据,如果大家是使用读取文件夹的方式的话可以选择剔除掉(如果不剔除的,可以选择一直往指定文件夹内灌数据);
在步骤3中可以类比为读取图像数据了;
在步骤4中进行归一化,如果你使用的是通过摄像头获取的数据,可以不用归一化步骤;如果是使用读取文件夹内图像建议使用归一化,这样可以避免采集到的图像的像素大小不统一;
在步骤5中:这是关键的一步,在调用目标检测函数的时候,我们可以通过形态学自定义搭建检测函数、百度智能云或华为相关接口函数和开源目标检测函数进行完成(大家也自己自己做一个符合自己需要的目标检测函数,例如:fastrcnn\ssd\yolo)
在步骤6、7和7中的目标作用是筛选出当前获取到的图像是否含有目标,存在目标则计算目标在图像中的XY坐标区间,若没有则打印无目标提示
在步骤8、9、10中是为了存储存在目标画面,大家在对图像取名的时候可以采用UUID进行命名,整体可以等价为:图像全名 = 图像名称 + 图像格式 | (UUID.JPG = UUID + .JPG)
在步骤11和12:这是第二关键的一步,我们需要将检测到的信息按照如上所述那般赋值,填写进txt文档中;在给txt文档命名的时候需要将txt文档的名称命名的和图像的名一样 | (UUID.txt ~= UUID.JPG)
展望
在对txt文档生成后大家可以使用开源代码:txt2xml生成VOC数据集。通过如上核心架构以及对架构的剖析,能够有清晰的思路,在大家需要解决大量数据集的时候能够触类旁通快速完成数据集的制作,在这里希望各位不会再为了数据集的制作而发愁!
我会例举几个项目至我的Github仓库中:kiven-yangming