简介:LabelMe是一款广泛使用的图像标注工具,主要用于计算机视觉领域的数据准备。它可以帮助用户轻松地在图像上标注目标对象,并生成可用于训练机器学习模型的数据集。LabelMe支持多种类型的标注,包括边界框(bounding boxes)、多边形(polygons)、点等。
1.安装
- 激活已有python环境后,使用pip安装 labelme:
pip install labelme -i https://pypi.tuna.tsinghua.edu.cn/simple
- 安装labelme 依赖的其他 Python库,如 PyQt5、Pillow、numpy
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple ......
2.使用教程
- 安装完成后,键入labelme自动打开操作界面
- 点击打开目录选中自己的数据集后,点击编辑进行标注
(对于关键点任务,选择创建控制点即可)
- 点击保存为json文件 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。
-
该json文件描述该图像中有两个被标注的对象,一个汽车和一个人,框选在一个矩形区域内,并且提供了这些矩形的左上角和右下角坐标。
- 将json文件转项目所需格式 以yolo系列项目为例,yolo所需txt文件格式如下:
-
json转yolo代码如下:
import json import os # 为了提高计算效率和简化模型处理,用数字表示类别 label_translate_dict = { "car": "0", "person": "1" } # 框xyxy的坐标转换为xywh,因为yolo读取的时xywh坐标 def xyxy2xywh(size, box): # (xmin,ymin)左上角,(xmax,ymax)右下角 dw = 1. / size[0] # 1/w dh = 1. / size[1] # 1/h x = (box[0] + box[2]) / 2 * dw y = (box[1] + box[3]) / 2 * dh w = (box[2] - box[0]) * dw h = (box[3] - box[1]) * dh return [x, y, w, h] # 返回的都是标准化后的值 def json2yolo(path, save_path): txt_name = os.path.basename(path) # 返回path最后文件名 txt_name = txt_name.replace('.json', '.txt') with open(path, 'r') as f: data = json.load(f) # 读取到这个文件所有内容,并返回字典dict格式 h = data['imageHeight'] w = data['imageWidth'] res = [] # 创建用于写入的列表 for item in data['shapes']: # (打开json文件就可以明白) label = item['label'] points = item['points'] if len(points) == 2: # json的框 xmin = min(points[0][0], points[1][0]) ymin = min(points[0][1], points[1][1]) xmax = max(points[0][0], points[1][0]) ymax = max(points[0][1], points[1][1]) box = [float(xmin), float(ymin), float(xmax), float(ymax)] # 将x1, y1, x2, y2转换成yolo所需要的x, y, w, h格式 bbox = xyxy2xywh((w, h), box) if label in label_translate_dict: class_id = label_translate_dict[label] res.append(f"{class_id} {' '.join(str(x) for x in bbox)}") else: print(f"Warning: Label '{label}' not found in label_translate_dict") # 写入目标文件中,格式为 id x y w h with open(os.path.join(save_path, txt_name), 'w') as out_file: for line in res: out_file.write(line + '\n') out_file.close() if __name__ == '__main__': # json格式数据路径 path = r"C:\Users\22857\Desktop\教培\data\json" # 转换成txt的json文件,替换成自己的 save_path = r'C:\Users\22857\Desktop\教培\data\txt' # txt保存根目录,替换成自己的 json_names = os.listdir(path) for json_name in json_names: json2yolo(os.path.join(path, json_name), save_path) # json转换yolo格式的坐标
转后格式如下: