Labelme JSON格式详解:标注文件结构与字段说明

Labelme JSON格式详解:标注文件结构与字段说明

【免费下载链接】labelme Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation). 【免费下载链接】labelme 项目地址: https://gitcode.com/gh_mirrors/la/labelme

你是否在使用Labelme进行图像标注时,面对生成的JSON文件感到困惑?不知道各个字段代表什么含义?本文将带你深入了解Labelme JSON标注文件的结构与字段说明,帮助你更好地理解和使用标注数据。读完本文,你将能够清晰解读Labelme生成的JSON文件,了解每个字段的作用,为后续的模型训练和数据处理打下坚实基础。

标注文件基本结构

Labelme生成的JSON标注文件采用标准的JSON格式,主要包含版本信息、标注形状、图像路径、图像数据等关键部分。通过对examples/tutorial/apc2016_obj3.json文件的分析,我们可以清晰地看到其整体结构。

一个完整的Labelme JSON标注文件通常包含以下几个主要字段:

  • version:标注文件版本号
  • flags:全局标志信息
  • shapes:标注形状列表,包含所有标注对象的详细信息
  • imagePath:原始图像路径
  • imageData:图像的Base64编码数据(可选)
  • imageHeight:图像高度
  • imageWidth:图像宽度

核心字段详细说明

version字段

version字段用于标识Labelme标注文件的版本信息,如examples/tutorial/apc2016_obj3.json中的版本为"4.0.0"。不同版本的Labelme可能会对JSON格式进行调整,因此版本信息对于确保数据兼容性非常重要。

flags字段

flags字段是一个全局标志字典,用于存储与整个图像相关的标记信息。在examples/tutorial/apc2016_obj3.json中该字段为空,实际使用中可以根据需要添加自定义标记,如图像质量评估结果、是否需要复查等。

shapes字段

shapes字段是Labelme JSON文件的核心部分,它是一个数组,每个元素代表一个标注对象的详细信息。以examples/tutorial/apc2016_obj3.json中的第一个形状为例:

{
  "label": "shelf",
  "points": [
    [7.942307692307736, 80.76150251617551],
    [171.94230769230774, 714.7615025161755],
    [968.9423076923077, 733.7615025161755],
    [1181.9423076923076, 110.76150251617551]
  ],
  "group_id": null,
  "shape_type": "polygon",
  "flags": {}
}

每个形状对象包含以下关键子字段:

label字段

label字段用于指定标注对象的类别名称,如上述示例中的"shelf"、"highland_6539_self_stick_notes"等。标签名称应与项目中的标签定义保持一致,项目中的标签定义可参考examples/instance_segmentation/labels.txt

points字段

points字段是一个二维数组,存储标注形状的坐标点信息。不同的shape_type对应不同的坐标点组织方式:

  • 多边形(polygon):一系列连续的(x, y)坐标点,如examples/tutorial/apc2016_obj3.json中的"shelf"对象
  • 矩形(rectangle):两个对角点坐标
  • 圆形(circle):圆心坐标和半径点坐标
  • 线段(line):起点和终点坐标
  • 点(point):单个坐标点
shape_type字段

shape_type字段指定标注形状的类型,Labelme支持多种形状类型,包括"polygon"、"rectangle"、"circle"、"line"、"point"等。不同的标注工具会生成不同类型的形状,如examples/primitives/primitives.json中展示了多种基本形状的标注示例。

group_id字段

group_id字段用于将多个相关的标注形状分组,相同组ID的形状被视为一个整体。在examples/tutorial/apc2016_obj3.json中该字段均为null,表示所有形状都是独立的。

flags字段

shape对象中的flags字段用于存储与该形状相关的特定标记,可根据实际需求添加自定义标记,如是否为关键对象、是否被遮挡等。

imagePath字段

imagePath字段存储原始图像的文件路径,如examples/tutorial/apc2016_obj3.json中的"apc2016_obj3.json"。需要注意的是,该路径可以是相对路径或绝对路径,建议使用相对路径以保证项目的可移植性。

图像尺寸字段

imageHeightimageWidth字段分别存储图像的高度和宽度信息,这些信息对于后续的坐标转换和可视化非常重要。如果JSON文件中没有这两个字段,可以通过读取原始图像获取尺寸信息,相关工具函数可参考labelme/utils/image.py

标注文件生成与解析

标注文件生成

Labelme的标注文件生成逻辑主要在labelme/_label_file.py中实现。当用户在Labelme界面中完成标注并保存时,系统会将标注信息按照上述JSON格式进行组织并写入文件。

标注文件解析

Labelme提供了多种工具用于解析和转换标注文件,如:

这些转换工具在模型训练前的数据准备阶段非常有用,可以根据不同框架的需求将Labelme标注转换为相应的数据集格式。

实际应用示例

目标检测标注

在目标检测任务中,通常使用矩形框(rectangle)进行标注。examples/bbox_detection/data_annotated/2011_000003.json是一个典型的目标检测标注文件示例,其中每个形状的shape_type为"rectangle",points字段包含矩形的两个对角点坐标。

实例分割标注

实例分割任务需要对目标的精确轮廓进行标注,通常使用多边形(polygon)工具。examples/instance_segmentation/data_annotated/2011_000003.json展示了实例分割的标注方式,每个对象的轮廓由一系列连续的多边形顶点坐标定义。

视频序列标注

Labelme还支持对视频序列进行标注,examples/video_annotation/data_annotated/目录下包含一系列视频帧的标注文件。视频标注与单图像标注的JSON格式相同,但需要注意保持不同帧之间标注的一致性,以便进行时序分析。

标注文件可视化

Labelme提供了标注结果可视化功能,可以将JSON标注文件与原始图像叠加显示。可视化相关的代码主要在labelme/widgets/canvas.py中实现。此外,也可以使用命令行工具可视化标注结果:

labelme_draw_json examples/tutorial/apc2016_obj3.json

可视化结果会显示所有标注形状及其标签,如examples/tutorial/apc2016_obj3/label_viz.png所示,这对于检查标注质量和标注一致性非常有帮助。

总结

Labelme JSON标注文件是连接标注过程和模型训练的重要桥梁,理解其结构和字段含义对于正确使用标注数据至关重要。本文详细介绍了Labelme JSON文件的各个字段,包括versionflagsshapesimagePath等,并结合examples/tutorial/apc2016_obj3.json等实例进行了解析。

掌握Labelme JSON格式不仅有助于正确解读标注数据,还能帮助用户根据实际需求扩展标注功能,如自定义标记、批量处理标注文件等。Labelme提供了丰富的工具和示例代码,如各类格式转换脚本和可视化工具,可以大大提高数据处理效率。

更多关于Labelme的使用技巧和高级功能,请参考项目的README.mdexamples/tutorial/README.md

【免费下载链接】labelme Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation). 【免费下载链接】labelme 项目地址: https://gitcode.com/gh_mirrors/la/labelme

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值