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