LabelMe到VOC/COCO:快速转换指南

引言

LabelMe输出的JSON格式虽然灵活,却不总是兼容现有的深度学习框架和数据集标准,如VOC和COCO格式。本文通过简单使用label官方示例代码,来将LabelMe的JSON文件转换为VOC或COCO格式。

安装使用LabelMe
  • 安装

首先需要Conda环境,未安装的需自行搜索安装方法。
具体步骤参考官方文档,也可以参考我这里。

conda create --name=labelme python=3

激活labelme虚拟环境。 

conda activate labelme

 安装labelme(ps:这里使用清华源install)

pip install labelme -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 使用

输入labelme启动。

labelme
使用体验(ai辅助标注,可跳过)

界面左上角点击“打开目录”,打开需要标注的图片文件夹。

 右键图片,选择“创建AI蒙版”

此时点击命令行窗口可以看到正在下载,等待下载完成。

LabelMe JSON解析
  •  具体标注流程不做展示。标注好的文件夹如图,一个图片一个json文件。

  • JSON文件结构概览。
{
    "version": "5.0.1",                  // LabelMe软件的版本号
    "flags": {},                        // 用户定义的标志或注释
    "shapes": [                         // 图像中所有标注的集合
        {
            "label": "car",             // 标注对象的类别标签
            "points": [[10, 20], [30, 40]], // 多边形顶点坐标,对于矩形是两对角点
            "group_id": null,           // 可选的组ID,用于关联多个形状
            "shape_type": "rectangle",  // 形状类型:rectangle, polygon, points, line, etc.
            "flags": {}                 // 形状特定的标志
        },
        // 更多的形状...
    ],
    "imagePath": "path/to/image.jpg",   // 原始图像的相对路径
    "imageData": null,                  // 图像的Base64编码,如果图像文件较大,通常为空
    "imageHeight": 480,                 // 图像的高度
    "imageWidth": 640                   // 图像的宽度
}
JSON到VOC/COCO转换
  • 使用labelme自带示例的py代码转换。

Labelme Github地址icon-default.png?t=N7T8https://github.com/labelmeai/labelme

 拉取代码到本地,在命令行中挂载到examples的instance_segmentation目录。(注意conda环境是labelme)

  • labels文件编写

新建txt文件(标签文件,名称随意),把自己的标签名称加在后面。

__ignore__
_background_
你的标签
你的标签
你的标签

比如我这里就是如图。

labelme转换voc,命令行运行。

python .\labelme2voc.py 你的数据文件目录 生成voc的文件目录 --labels 标签txt文件路径
# python .\labelme2voc.py data_annotated_safehat data_dataset_safehat_voc --labels labels_safehat.txt

 labelme转换coco,命令行运行。

python .\labelme2coco.py 你的数据文件目录 生成coco的文件目录 --labels 标签txt文件路径
# python .\labelme2coco.py data_annotated_safehat data_dataset_safehat_coco --labels labels_safehat.txt

 点开输出的目录就可以看到结果了

结束。

要将labelme标注的数据转换VOC格式,您可以按照以下步骤进行操作: 1. 安装labelme和lxml库: ``` pip install labelme lxml ``` 2. 将labelme标注的数据保存为JSON文件。 3. 创建一个Python脚本,将JSON文件转换VOC格式。以下是一个示例脚本: ```python import os import json from lxml import etree def labelme_to_voc(json_path, output_dir): with open(json_path, 'r') as f: data = json.load(f) # 创建VOC格式的XML文件 annotation = etree.Element("annotation") # 添加文件名 filename = etree.Element("filename") filename.text = os.path.basename(data['imagePath']) annotation.append(filename) # 添加图像大小 size = etree.Element("size") width = etree.Element("width") height = etree.Element("height") depth = etree.Element("depth") width.text = str(data['imageWidth']) height.text = str(data['imageHeight']) depth.text = "3" # 如果是RGB图像,设置为3,如果是灰度图像,设置为1 size.append(width) size.append(height) size.append(depth) annotation.append(size) # 添加目标信息 for shape in data['shapes']: obj = etree.Element("object") name = etree.Element("name") name.text = shape['label'] obj.append(name) polygon = etree.Element("polygon") for point in shape['points']: x, y = point point = etree.Element("point") point_x = etree.Element("x") point_x.text = str(x) point_y = etree.Element("y") point_y.text = str(y) point.append(point_x) point.append(point_y) polygon.append(point) obj.append(polygon) annotation.append(obj) xml_str = etree.tostring(annotation, pretty_print=True) xml_path = os.path.join(output_dir, os.path.splitext(os.path.basename(json_path))[0] + ".xml") with open(xml_path, 'wb') as xml_file: xml_file.write(xml_str) # 指定labelme标注数据的JSON文件路径 json_path = 'path/to/labelme.json' # 指定输出VOC格式的XML文件的目录 output_dir = 'path/to/output_dir' # 转换VOC格式 labelme_to_voc(json_path, output_dir) ``` 在上述示例脚本中,您需要替换`json_path`和`output_dir`为您的实际路径。运行脚本后,将会在指定的输出目录生成对应的VOC格式的XML文件。 请注意,此示例脚本假设labelme标注的数据中只包含一个目标,并且目标是多边形。如果您的数据有其他特殊情况,可能需要根据实际情况进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值