conda环境
运行以下命令来激活你的虚拟环境:
conda activate labelme
如果你没有创建 labelme
环境,首先需要创建一个环境并安装 labelme
:
conda create -n labelme python=3.8
conda activate labelme
conda install -c conda-forge labelme
安装 Qt 相关依赖
conda install pyqt
激活环境后,在同一个命令行窗口中运行以下命令来启动 labelme
:
labelme
这条命令将会启动 labelme
图形界面,你可以开始加载图片并进行标注。
LabelMe
提供了几种常见的标注方式:
- 矩形框(RectBox):点击并拖动来标注矩形框,适用于目标检测任务。
- 多边形(Polygon):点击每个点来创建一个多边形,适用于不规则形状的目标。
- 线(Line):标注直线,用于某些特定任务。
- 点(Point):标注单个点,通常用于关键点检测任务。
保存标注
每次标注完成后,可以点击 “Save” 按钮来保存你的标注。LabelMe
会将标注保存为 JSON 格式文件,文件内容包含标注框的位置、类别以及图片的其他信息。
- 保存后的文件通常会以
.json
扩展名结尾。例如:image1.json
。
利用python将json文件关键信息导出为yolo格式便于使用
import json
import os# 类别映射:定义 JSON 文件中的类别名称到 YOLO 编号的映射
class_mapping = {"egret": 0,"cattle_egret": 1,"heron": 2,"magpie": 3
}# 数据集文件夹路径
base_folder = "E:/shixi/other_images/other_images" # 替换为你的数据集根目录# 遍历每个类别文件夹
for class_name in ["egret", "cattle_egret", "heron", "magpie"]:class_folder = os.path.join(base_folder, class_name)# 遍历类别文件夹中的每个 JSON 文件for file in os.listdir(class_folder):# 查找 .json 文件if file.endswith(".json"):json_path = os.path.join(class_folder, file)print(f"Processing JSON file: {json_path}")# 打开 JSON 文件with open(json_path, "r") as f:data = json.load(f)# 获取图像文件名前缀image_name = file.replace(".json", "")txt_filename = f"{image_name}.txt"txt_path = os.path.join(class_folder, txt_filename)# YOLO 格式的标注内容yolo_lines = []# 遍历 JSON 文件中的标注信息for shape in data["shapes"]:label = shape["label"]if label in class_mapping:class_id = class_mapping[label]# 获取边界框的坐标points = shape["points"]x_min = min(points[0][0], points[1][0])y_min = min(points[0][1], points[1][1])x_max = max(points[0][0], points[1][0])y_max = max(points[0][1], points[1][1])# 计算 YOLO 格式的中心点和宽高x_center = (x_min + x_max) / 2 / data["imageWidth"]y_center = (y_min + y_max) / 2 / data["imageHeight"]width = (x_max - x_min) / data["imageWidth"]height = (y_max - y_min) / data["imageHeight"]# 添加到 YOLO 格式的标注行yolo_lines.append(f"{class_id} {x_center} {y_center} {width} {height}\n")# 将 YOLO 格式的内容写入 .txt 文件with open(txt_path, "w") as f:f.writelines(yolo_lines)print(f"Converted {json_path} to {txt_path}")