代码参考:https://blog.csdn.net/Sharonnn_/article/details/124365542
创建自己的数据集时,不打算分割名为"thread"的对象,因此要删除thread对象的标签。但是在labelme软件中,右侧的label list类别是不能改动的,也就是说在labelme中删除标签得一张一张的删除,很浪费时间。换一种思路:对.json文件中的"shapes"中"label"为要删除标注对应的shape进行删除,那么就能够通过操作.json文件,完成批量删除标签,处理速度很快。
原文
中一张图片中同一类物体有多个时,效果不好,不能把标签全部删除。本文把for循环改成了倒序循环再删除标签,可以解决同类多物体删除问题。
# !/usr/bin/env python
# -*- encoding: utf-8 -*-
import os
import json
# 这里写你自己的存放照片和json文件的路径
json_dir = 'D:\DeepLearningExercises\matlab_files\image1234\json_files/'
json_files = os.listdir(json_dir)
# 这里写你要删除的标签名
delete_name = "thread"
for json_file in json_files:
json_file_ext = os.path.splitext(json_file)
if json_file_ext[1] == '.json':
# 判断是否为json文件
jsonfile = json_dir + '\\' + json_file
with open(jsonfile, 'r', encoding='utf-8') as jf:
info = json.load(jf)
# for i, label in enumerate(info['shapes']):
for i in range(len(info['shapes'])-1,0,-1):
if info['shapes'][i]['label'] == delete_name:
# 找到位置进行删除
del info['shapes'][i]
# 使用新字典替换修改后的字典
json_dict = info
# 将替换后的内容写入原文件
with open(jsonfile, 'w') as new_jf:
json.dump(json_dict, new_jf)
print('delete label over!')
python代码批量修改Labelme标注的json文件:删除标签代码参考:https://blog.csdn.net/Sharonnn_/article/details/124365542创建自己的数据集时,不打算分割名"thread"的对象,因此要删除thread对象的标签。但是在labelme软件中,右侧的label list类别是不能改动的,那么解决方案就是对.json文件中的"shapes"中"label"为要删除标注对应的shape全部删除,此方法能够批量操作.json文件,处理速度很快
将 labelme 标注的数据转换为 PASCAL VOC 格式和 MS COCO 格式的数据集,便于直接利用支持这两种格式的框架进行训练
1、将 lebelme 标注得到的 JSON 文件放在一个文件夹内。举个例子,命名为 labelme_jsons_dir。
2、准备好一份 text 文本,里面包含数据集的分类标签。举个例子,命名为 label_names.txt。可以参考下项目里的 test/label_names.txt。
3、如果有转换标签的需求(比如中文标签转为英文),准备一个文本,包含转换的规则,举个例子,命名为label_dict.txt。可以参考下项目里的 test/label_dict.txt 。
关于labelme自定义数据集 标签删除的操作
labelme自定义的数据集在图像标注过程中,如果生成了一个错误标注的图像块时,右击相应的图像label是无法删除的,如图1:
图1(看右侧Polygon Labels框中)
此时,需要点击图中左列的Edit Polygons,如图2:
选中右侧Polygon Labels中需要删除的label,点击左侧的Edit Polygons,然后点击标注图片中对应需要删除的标签块。如图3:
右击,就会出现删除按钮,点击即可删除,如图4、5:
2、创建labelme环境 :conda create -n labelme python=3.6
3、进入labelme环境:conda activate labelme
如需卸载环境:conda remove -n labelme --all
4、安装相应库:pyqt、pillow、labelme
5、打开labelme:当前环境下直接输入labelme
6、标注数据集生成对应的json文件
7、将json转换成png格式
(1)单张转换:
News: 最近开始论文实验,需要重新整理一下数据集,顺便整理一下这个代码仓库。
仓库中的脚本用于将Labelme标注的数据转换为PASCAL VOC格式或MS COCO格式的标准数据集,便于直接利用现有的训练框架进行训练。
使用须知: 脚本写的其实并不复杂,有基础的同学可以过一下脚本的流程,确保在自己使用的标注数据或数据集上能正常使用,有需要调整的地方也可以自己调整下,可以省掉一些Debug的无用功夫。
举例说明:
数据集不同,计算BBOX左上角和右下角的Points下标也不一定相同,需要确认下。
标注工具和常见的两种数据集格式
Labelme是我用的标注工具,对图像进行多种类型的标注,可以直接得到json文件。GitHub地址如下:
PASCAL-VOC和MS-COCO是两个大型的开源数据集,其数据集的标注形式成为了通用的标注方式,常见的视觉模型的训练
# 遍历指定目录下的文件
for filename in os.listdir(directory):
if filename.endswith(".json"): # 查找以.json结尾的文件
json_file = os.path.join(directory, filename)
image_file = json_file.replace(".json", ".jpg") # 将.json替换为.jpg
if os.path.isfile(image_file): # 检查对应的图片文件是否存在
new_json_name = os.path.join(directory, "new_" + filename)
new_image_name = os.path.join(directory, "new_" + os.path.basename(image_file))
# 重命名json文件和图片文件
os.rename(json_file, new_json_name)
os.rename(image_file, new_image_name)
print(f"重命名成功:{new_json_name}, {new_image_name}")
else:
print(f"找不到对应的图片文件:{image_file}")
# 指定包含labelme标注文件的目录
directory = "path/to/labelme/files"
rename_files(directory)
你需要将代码中的`"path/to/labelme/files"`替换为包含标注文件的实际目录路径。运行代码后,它会遍历目录中的所有.json文件,然后查找相应的.jpg文件并将它们重命名为"new_文件名"。重命名后的文件名可以根据需要进行修改。
希望这可以帮到你!如果有任何问题,请随时问我。