[记录]Json文件转txt,不规则标签

在尝试使用yolov5的分割功能的时候遇到了需要将自己弄的分割标签json文件转化为txt文件的问题。之前使用的转换代码只能转换规则的标签(如矩形框标签),看了很多博主写的转换代码大多数都是只能转换规则的标签,好不容易找到一个博主写的代码可以转换不规则标签了但是又没有对标签进行归一化,使得转换后的文件依旧不可用。不经意间翻到了一个博主用yolov8分割自己的数据集的记录,在他的记录中有一段可以转换不规则标签的python代码。代码如下:

# 处理labelme多边形矩阵的标注  json转化txt,提取点
import json
import os
 
 
name2id = {'chip': 0}    #  修改你的类别并且赋与index
 
 
def decode_json(json_floder_path, txt_outer_path, json_name):
    txt_name = txt_outer_path + json_name[:-5] + '.txt'
    with open(txt_name, 'a') as f:
        json_path = os.path.join(json_floder_path, json_name)
        data = json.load(open(json_path, 'r', encoding='gb2312', errors='ignore'))
        img_w = data['imageWidth']
        img_h = data['imageHeight']
        isshape_type = data['shapes'][0]['shape_type']
        print(isshape_type)
        dw = 1. / (img_w)
        dh = 1. / (img_h)
        for i in data['shapes']:
            label_name = i['label']
            if (i['shape_type'] == 'polygon'):
                point = []
                for lk in range(len(i['points'])):
                    x = float(i['points'][lk][0])
                    y = float(i['points'][lk][1])
                    point_x = x * dw
                    point_y = y * dh
                    point.append(point_x)
                    point.append(point_y)
                f.write(str(name2id[label_name]) + " " + " ".join([str(a) for a in point]) + '\n')
        f.close()
 
 
if __name__ == "__main__":
    json_floder_path = r'F:\Workprojects\front_corner_drop\train_data\json'  # 存放json的文件夹的绝对路径
    txt_outer_path = r'F:\Workprojects\front_corner_drop\labels\segment'  # 存放txt的文件夹绝对路径
    json_names = os.listdir(json_floder_path)
    flagcount = 0
    for json_name in json_names:
        decode_json(json_floder_path, txt_outer_path, json_name)
        flagcount += 1
 
    print('-----------转化完毕------------')

该段代码就可以完美的实现将不规则标签的json文件转换为txt文件。当然,规则的标签也是可以进行转换的。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: labelme json文件换为txt的步骤如下: 1. 打开labelme软件,选择要换的json文件,点击“Open”打开文件。 2. 在labelme软件中,选择“File”菜单下的“Export”选项,选择“Export to COCO format”选项。 3. 在弹出的对话框中,选择“Export to TXT format”选项,点击“Export”按钮。 4. 选择要保存的文件夹和文件名,点击“Save”按钮,即可将json文件换为txt文件。 注意:换后的txt文件中,每一行代表一个目标物体的信息,包括目标物体的类别、坐标等信息。 ### 回答2: LabelMe是一个用于标注图像、视频和音频数据的工具,它是一个开源项目,支持多种数据格式,包括JSON(JavaScript Object Notation)格式。JSON是一种轻量级的数据交换格式,用于表示简单的数据结构和对象,因此,很多数据处理程序都可以方便地读取和解析JSON文件。 LabelMe生成的JSON文件包含了标注图像的所有信息,包括图像的名称、尺寸、标注的对象名称和位置等信息。为了方便后续处理,有时候需要将JSON文件换成其他格式,如TXT(文本)格式。这可以通过一些编程语言中的JSON库实现,如Pythonjson模块。 JSONTXT的基本步骤如下: 1. 导入json模块和需要的库。 ``` import json import os ``` 2. 打开JSON文件并解析。 ``` with open('example.json', 'r') as f: data = json.load(f) ``` 3. 遍历JSON文件中的每个标注对象。 ``` for obj in data['objects']: ``` 4. 获取每个标注对象的位置和名称等信息。 ``` label = obj['label'] polygon = obj['polygon'] xmin = min([x[0] for x in polygon]) ymin = min([x[1] for x in polygon]) xmax = max([x[0] for x in polygon]) ymax = max([x[1] for x in polygon]) ``` 5. 将获取到的信息写入TXT文件。 ``` annotation = label + ' ' + str(xmin) + ' ' + str(ymin) + ' ' + str(xmax) + ' ' + str(ymax) with open('example.txt', 'a') as f: f.write(annotation + '\n') ``` 通过以上步骤,可以将LabelMe生成的JSON文件换成TXT格式,方便后续处理和分析。需要注意的是,换的具体形式和细节可能因应用场景而异,需要根据实际需要进行调整。 ### 回答3: Labelme是一个开源的标注工具,可以用于图像标注。它可以生成JSON格式的标注文件,其中包含图像的标注信息。在一些需要使用标注信息的任务中,需要将JSON文件换为其他格式,如TXT文件JSON文件换为TXT文件需要遵循以下步骤: 1. 解析JSON文件 使用Python语言中的json库,可以轻松地将JSON文件中的信息解析出来。使用类似下面的代码段可以读取JSON文件并解析其中的信息: ```python import json with open('labelme.json', 'r') as f: data = json.load(f) annotations = data['annotations'] ``` 其中,data是解析出来的JSON数据,annotations是包含标注信息的数据。 2. 处理标注信息 从JSON文件中解析出来的标注信息通常是一个列表,其中每个元素都是一个字典,包含标注框的位置和类别等信息。 需要将这些信息换为所需的格式。例如,下面的代码段演示了如何将标注信息换为YOLO格式的TXT文件: ```python with open('annotation.txt', 'w') as f: for annotation in annotations: x, y, w, h = annotation['bbox'] class_id = annotation['category_id'] width, height = data['imageSize'] normalized_x = x / width normalized_y = y / height normalized_w = w / width normalized_h = h / height f.write(f'{class_id} {normalized_x} {normalized_y} {normalized_w} {normalized_h}\n') ``` 该代码段将标注框的位置和类别信息换为YOLO格式的TXT文件。其中,x、y、w、h是标注框的位置信息,class_id是标注的类别编号。width和height是图像的尺寸信息,用于将标注框的位置信息归一化为0~1之间的值。 3. 保存换后的TXT文件 将标注信息换为所需格式的TXT文件后,需要将其保存到磁盘中。可以使用Python中的文件操作函数将TXT文件写入磁盘中,如下所示: ```python with open('annotation.txt', 'w') as f: f.write(txt) ``` 以上是将Labelme格式的JSON文件换为TXT文件的步骤。需要注意的是,在进行换时应保证所需格式的正确性,并根据具体任务调整换流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱改网络的法式小面包

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

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

抵扣说明:

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

余额充值