python实现labelme样本自动标注 前言 说明

公司前段时间做一个项目,需要用到语义分割,样本很多,但是都没有标注,也没有让标注公司弄,只好自己标注,平均两分半一张,一天标200多张人都要疯了,而且项目进度也比较着急。所以自己实现了一个基于labelme的自动标注模块,在了解正文之前,请先看下一段的说明,选择性绕道,以免耽误个人宝贵的时间。

说明

一、模块适用场景应满足以下条件:
1、 样本的标签数量、标签类别不变的场景(但也可以基于图像处理做标签检测,有标签出现时,可以实现自动标注,这就要看具体场景了)
2、 标签形态,大小,无明显变化,只存在相对位置的平移和旋转
3、 可利用图像处理技术,匹配到样本中一个或多个固定的位置(且该位置相对于样本的像素位置不变)
二、实现模块需要具备的相应技能:
1、 了解json文件的结构;
2、 了解图片的I/O操作及相应的类型转换;
3、 了解基础的图像处理技术,能实现图像突出特征点或区域的检测;
4、 python基础
三、模块效果:
1、模块标注准确率在90%以上,只需要调整小部分样本即可;
2、效果图如下(第一张为未标注状态)
python实现labelme样本自动标注
前言
说明

正文

一、 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