Skip to content

A solution for those using labelme for instance segmentation labeling task at first but turn to labelbee for faster speed. labeling.With labelme2labelbee-json,json fie of labelme project can be easily convet to labelbee's!

License

Notifications You must be signed in to change notification settings

Woshidawenxi/labelme2labelbee-json

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

labelme2labelbee(josn)转换脚本

一、为何要写这个转换脚本?

1.1 labelme

labelme是使用python写的基于QT的跨平台图像标注工具,可用来标注分类、检测、分割、关键点常见的视觉任务,被广大的CV研究者、学生和自由开发者所使用着。 但labelme是基于PyQt编写的,性能有限。labelme在实例分割场景下,当关键点过多时,会出现严重的卡顿,影响标注性能。 Labeme:https://github.com/wkentaro/labelme

1.2 labelbee

labelbee是商汤科技开源的计算机视觉领域的 AI 算法框架OpenMMLab团队推出的开源标注工具。 LabelBee标注工具发源于对商业应用场景的一系列算法标注需求,具备拉框、标签、标点、线条、多边形、文本等常用标注工具,可广泛适用于目标检测、分类、分割、关键点、折线、OCR等算法场景。可以JavaScript SDK的方式灵活的“一键”嵌入到业务系统。也可以直接安装开源的客户端版本,解压开箱即用。Labelbee基于JavaScript标注工具,面对更多关键点的实例分割标注问题有更好的性能和更流畅的交互体验,减少了卡顿提高了标注工作效率。 Labelme:https://github.com/open-mmlab/labelbee/

存储结构:
image


labelme的数据由一个.json文件(名称为:图片名+.json)和图片组成。
image


labelbee的数据由一个.json文件(名称为:图片名+后缀+.json)和图片组成。

二、如何将labelme的json转为labelbee的json文件?

2.1 分析数据结构


labelme和labelbee数据结构组成如下:
labelme的json是一个字典结构
key1:version和key2:flags对于我们的转换并无直接帮助,直接舍弃。 所有的实例分割的多边形以列表的形式储存在shape✔️这个key3对应的值中。列表中每个元素都代表一个多边形,多边形的信息以字典的形式存储在列表中。每个多边形的字典中包裹label、pionts、group_id、shape_type、flags共5个key,对应的值分别代表:label的名称;多边形中的所有关键点的坐标以先x后y的形式存储在一个列表中,来表征一个坐标[x,y],所有的坐标以标注的顺序存在一个关键点集的列表中;group_id无法映射到labelbee的json中;shape_type用语表述任务类型本脚本用于处理实例分割任务,故都是polygon;flags无法映射到labelbee的json中。
key4:imagePath对应原图的地址
key5:imageData对应原图的地址
key6:imageHeight:图片的高度✔️
key7:imageWidth:图片的宽度✔️
image

labelbee的json是一个字典结构。
key1:width为图片宽度(转换自labelme-imageWidth)✔️
key2:height为图片高度(转换自labelme-imageHeight)✔️
key3:vaild对应一个布尔值初始为True,表示该标签生效(这个在映射过程中硬编码为True,后续可以通过交互修改)。
key4:rotate对应旋转角度,一般为0(这个在映射过程中硬编码为0,后续可以通过交互修改)。
key5:step_1对应一个字典,这个字典内部包括dataSourceStep,对应于、toolName对应于任务类型(因为用于实例分割,所以硬编码为:"polygonTool");result对应的一个列表,不同序数对应于不同的多边形。 id'(str)8位包括大小写字母,也可以包括部分数字,此处根据规则随记生成一串id;sourcelD一般为空,此处硬编码为空;valid对应一个布尔值,该多边形生效为 True,不生效为False,本脚本硬编码为True;textAttribute,一般为空,此处硬编码为空;pointList对应值为多个字典,每个字典有x、y两个键对应的值为关键点的x、y坐标值(转换自labelme-shapes);attribute,一般为空,此处硬编码为空;order对应的值是顺序,以1开始,此处根据顺序生成数字的序数。
image

三、环境配置


Python 3.8
labelme 5.0.5
labelbee 0.1.2

四 操作

4.1 labelme标注


在cmd输出labelme,启动labelme,点击Open选择一张图片。选择CreatePolygons在图片上点击通过绘制多边形全选目标,并以一种labelname命名这个mask。
image


保存后,图片路径里面可以看到图片和json文件
image

4.2 脚本转化


在该路径下创建.py的脚本,粘贴本文脚本进入。
image


填写image name,运行脚本。
image


得到一个使用labelbee的json数据文件。
image

4.3 重新将json载入labelbee


进入labelbee,点击New project,创建一个新的标注项目。选择Single Step创建一个单步骤项目。
image
image
image


设定开启Attribute,添加多个类型,点击OK创建完成。
image


选择新创建的Project。
image


启动之后发现多个多边形已经存在,只是对应的类型未设定。
image


通过右键选中多边形,右侧勾选类型,完成整个数据的转换过程。
image

About

A solution for those using labelme for instance segmentation labeling task at first but turn to labelbee for faster speed. labeling.With labelme2labelbee-json,json fie of labelme project can be easily convet to labelbee's!

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages