python实现labelme样本自动标注

摘要:
因此,我实现了一个基于labelme的自动标注模块。在理解课文之前,请阅读下一段的说明,并绕道而行,以免浪费宝贵的时间。

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"

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇layui扩展组件zTreeSelectM,下拉树多选UTF-8编码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python札记 -- 文件压缩

在日常工作当中免不了要对文件进行压缩,Python标准库里也提供了实现压缩功能的模块。 一、简单的例子 首先了解一下压缩单个文件在Python中怎么实现。竹风建了个测试文件夹zip_text,里面有test.apk和zip_model_test.py两个文件。如下图所示: 目标是将test.apk打包成test.zip。编写如下代码: 1 #!/usr/b...

python 反射

import timesss##反射:根据字符串的形式去对象(模块)中操作其成员(查找/获取/删除/添加)#根据用户输入内容,导入模块(字符串形式导入模块) inp = input("请输入模块名:") res = __import__(inp) uu = res.md5("123456") print(uu) #字符串方式去模块中查找函数,并执行# g...

python数组操作

python中的数组其实就是list,但它更像是java的arraylist,而且功能比arraylist更强大。因为python的list其实是个对象,所以对于他的操作和删除比较有讲究。 创建列表sample_list = ['a',1,('a','b')]Python 列表操作sample_list = ['a','b',0,1,3]得到列表中的某一个...

Python高级语法之:一篇文章了解yield与Generator生成器

Python高级语法中,由一个yield关键词生成的generator生成器,是精髓中的精髓。它虽然比装饰器、魔法方法更难懂,但是它强大到我们难以想象的地步:小到简单的for loop循环,大到代替多线程做服务器的高并发处理,都可以基于yield来实现。 理解yield:代替return的yield 简单来说,yield是代替return的另一种方案:...

老王Python-进阶篇4-面向对象第三节

一: 写一个网页数据操作类。完成下面的功能: 提示:需要用到urllib模块 get_httpcode()获取网页的状态码,返回结果例如:200,301,404等 类型为int get_htmlcontent() 获取网页的内容。返回类型:str get_linknum()计算网页的链接数目。 1 class get_web_data(): 2...

Element-ui tabs标签标题添加自定义图标

关键点:slot="label" <el-tab-pane name="5" label="组合关系"> <span slot="label"> <span class="span-box"> <span>{{ item.label }}</span>...