Yolov5 多边形标签转换,所有json文件自动转成txt格式[详细过程]
问题引入
网上的json转化为txt的教程都比较简要,查找了很多资料之后,再自己一个一个的运行代码最后才终于知道其原理。
Labelme简要介绍
通过labelme对图进行标注后,得到的是json文件,而Yolov5对数据进行模型构建的时候,读取需要的是txt格式的文件。所以需要先通过Python进行文件格式的转换
注:labelme是麻省理工(MIT)的计算机科学和人工智能实验室(CSAIL)研发的图像标注工具,人们可以使用该工具创建定制化标注任务或执行图像标注,项目源代码已经开源。
Labelme程序运行,通过标注后如图所示:
图1 Labelme标注
此图片可以得到以下格式的json文件:
文件中的字段如下:
‘version’——版本号
‘shapes’——里面装的是Yolov5需要的数据
‘label’——你在labelme里面设置的类
‘points’——点的坐标
我这里的label如图1所示共有5类,等下进行json转化为txt的时候用
对应这些类创一个字典以便json进行转换
例:name2id={'bike':0,'arrow':1,'crossline':2,'building':3,'car':4,'person':5}
可能某一张图片中可能不存在上述的某个类,所以这里请以某个json中最多的类创建这个字典。
多边形标签的处理方法
由于yolov5 仅支持矩形图形的识别,所以需要通过数据处理,将多边形变换为矩形。
处理原理:遍历该标签所有的坐标,获取最大x_max,y_max,最小x_min,y_min的x和y的坐标。
然后再进行数据的规范化。
转换后的txt格式如下:
第一个是类,比如第一行中的第一个数字是4,我的name2id中car也为4,即这里指代的就是'car'这个标签。
第一行 第二个 和 第三个数字 为数字为图片中心点(x,y)的坐标
第四个数字和第五个数字对应的是 这个标签的 宽和高。
代码实现
多边形标签代码实现方法
json转化为txt的部分代码如下:
json_floder——读取json的文件夹的绝对路径
txt_outer_path——保存txt文本的文件夹的绝对路径
json_name——json_name是json文本的名字
读取该类的坐标然后进行数字规范化
数字规范化的代码如下:
最后附上我的完整代码:
os.listdir——读取文件下的所有文件。请先创建一个只有json文件的文件夹
记得先修改!!!if __name__==“__main__”后的参数
json_floder_path——改成你自己的json文件夹路径
txt_outer_path——改成你自己的输出文件夹路径
以上是本人的个人经验总结,如有错误请各位大佬批评指正!!!
- 点赞
- 收藏
- 关注作者
评论(0)