Labme软件中,将语义分割/实例分割标注的JSON文件转换为目标检测的JSON文件
程序是在CHATGPT基础上自己改的
输入的json文件是标注结果,并非COCO格式,导出的json文件同样。
程序如下
# 将采用Label中多边形工具标注的用于语义分割的原始json文件转换成 用于目标检测的用矩形框标注的原始json文件
import json
import os
def convert_semantic_to_detection(input_file, output_file):
with open(input_file, 'r') as f:
data = json.load(f)
# 构建目标检测的JSON结构
detection_data = {
'version': "5.2.0.post4",
'flags': {},
'shapes': [],
'imagePath': data['imagePath'],
'imageData': None,
'imageHeight': data['imageHeight'],
'imageWidth': data['imageWidth'],
}
for shape in data['shapes']:
# 转换多边形为矩形
label = shape['label']
points = shape['points']
x_values = [point[0] for point in points]
y_values = [point[1] for point in points]
x_min = min(x_values)
y_min = min(y_values)
x_max = max(x_values)
y_max = max(y_values)
# 添加矩形边界框到目标形状列表
detection_data['shapes'].append({
'label': label,
'points': [[x_min, y_min], [x_max, y_max]],
"group_id": None,
'description': "",
'shape_type': "rectangle",
'flags': {}
})
with open(output_file, 'w') as f:
json.dump(detection_data, f, indent=4)
print("转换完成!")
input_path = "test"
output_path = "result"
for file_name in os.listdir(input_path):
input_json_path = input_path + "/" + file_name
output_json_path = output_path + "/" + file_name
# 使用示例
convert_semantic_to_detection(input_json_path, output_json_path)
其中“test”和“result”都是文件夹