python实现labelme样本自动标注
前言
公司前段时间做一个项目,需要用到语义分割,样本很多,但是都没有标注,也没有让标注公司弄,只好自己标注,平均两分半一张,一天标200多张人都要疯了,而且项目进度也比较着急。所以自己实现了一个基于labelme的自动标注模块,在了解正文之前,请先看下一段的说明,选择性绕道,以免耽误个人宝贵的时间。
说明
一、模块适用场景应满足以下条件:
1、 样本的标签数量、标签类别不变的场景(但也可以基于图像处理做标签检测,有标签出现时,可以实现自动标注,这就要看具体场景了)
2、 标签形态,大小,无明显变化,只存在相对位置的平移和旋转
3、 可利用图像处理技术,匹配到样本中一个或多个固定的位置(且该位置相对于样本的像素位置不变)
二、实现模块需要具备的相应技能:
1、 了解json文件的结构;
2、 了解图片的I/O操作及相应的类型转换;
3、 了解基础的图像处理技术,能实现图像突出特征点或区域的检测;
4、 python基础
三、模块效果:
1、模块标注准确率在90%以上,只需要调整小部分样本即可;
2、效果图如下(第一张为未标注状态)
:
正文
一、 json文件简介及相关API:
json结构简介:
{ "imageHeight": 178,#图片的高(rows) "imageData": "/9j/4AAQSkZJRgABAQA.............gAooooA//2Q==",#图片编码成的str类型数据,可以再次解码成图片 "flags": {},#分类样本标注时用到,是样本的类别(整个图片属于什么类别) "version": "4.2.10", "imageWidth": 1236,#图片宽(cols) "imagePath": "001194.jpg",#图片的名称 "shapes": [#shepe里面以字典的形式存放标注的标签个数(类别个数) { "shape_type": "polygon",#标注形式,默认为多边形,还可以有矩形等其他形状 "flags": {},#分类标签 "label": "2",#这个框所属的类别 "points": [#围成框的所有点,标注时第一个点存放在这里index为0的位置。 [ 172.89719626168224,#第一个点的宽(cols) 39.77881619937695#第一个点的高(rows) ], [ 141.1214953271028, 53.17445482866043 ], ...... [ 144.23676012461058, 86.81931464174455 ] ], "group_id": null#组别 }, { "shape_type": "polygon", "flags": {}, "label": "0", "points": [ [ 170.09345794392522, 47.255451713395644 ], ...... [ 186.91588785046727, 74.3582554517134 ] ], "group_id": null }, { "shape_type": "polygon", "flags": {}, "label": "1", "points": [ [ 184.11214953271028, 36.35202492211838 ], ...... [ 185.0467289719626, 55.97819314641744 ] ], "group_id": null }, { "shape_type": "polygon", "flags": {}, "label": "0", "points": [ [ 1063.2398753894083, 37.90965732087227 ], ...... [ 1080.9968847352025, 64.0778816199377 ] ], "group_id": null }, { "shape_type": "polygon", "flags": {}, "label": "3", "points": [ [ 1061.0591900311526, 30.121495327102807 ], ...... [ 1092.2118380062304, 79.96573208722741 ] ], "group_id": null }