图像手动标注-labelme+yolo格式导出

devtools/2024/11/13 12:06:45/

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}")


http://www.ppmy.cn/devtools/133045.html

相关文章

React Native的生命周期

React Native 组件的生命周期分为三个阶段:Mounting(挂载)、Updating(更新) 和 Unmounting(卸载)。每个阶段都会触发不同的生命周期方法。 下面是详细的生命周期解释,并通过一个项目…

关于Dell r730xd 老服务器的阵列卡 配置系统盘RAID 1

这里写自定义目录标题 关于Dell r730xd 老服务器的阵列卡 配置系统盘RAID 1操作步骤 关于Dell r730xd 老服务器的阵列卡 配置系统盘RAID 1 操作步骤 -开机后 按 Ctrl R 进入 RAID卡 配置界面,如下:-下面图片是 服务器中硬盘都已经准备好,并…

【计网】基于TCP协议的Echo Server程序实现与多版本测试

目录 前言: 1、InitServer类的实现 1.1. 创建流式套接字 1.2. bind 绑定一个固定的网络地址和端口号 1.3.listen监听机制 1.4.完整代码 2. 循环接收接口与服务接口 2.1.accept函数讲解 讲个商场拉客的故事方便我们理解: 2.2.服务接口实现 3.服…

pnpm管理多工作区依赖

pnpm是一个支持多包仓库的一个包管理工具,那么怎么可以在项目根目录下执行pnpm install的时候,也能同步让所有的工作区都能够通安装依赖呢? 方式一,在执行pnpm install指令的时候,添加recursive参数: pnpm install --recursive 方式二,在项目的根目录下通过pnpm的配置文件p…

贪心算法day2(最长递增子序列)

目录 1.最长递增子序列 方法一:动态规划 方法二:贪心二分查找 1.最长递增子序列 链接:. - 力扣(LeetCode) 方法一:动态规划 思路:我们定义dp[i]为最长递增子序列,那么dp[j]就是…

PGMP-串串01概述

项目集管理绩效域12345战略一致性效益管理相关方争取治理生命周期商业论证BC效益识别识别项目集治理实践1.阶段:定义,交付,收尾项目集章程效益分析与规划分析项目集治理角色2.项目集活动:10个管理 1变更,2沟通,3财务&a…

CSS教程(七)- 背景

介绍 背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等。 1 背景颜色 属性名:background-color 作用:指定HTML元素的背景色。 取值:英文颜色、16进制、rgb、rgba、transparent(一般为透明&#…

MySQL中distinct与group by之间的性能进行比较

在 MySQL 中,DISTINCT 和 GROUP BY 都是用于去重或汇总数据的常用 SQL 语法。尽管它们在某些情况下能产生相同的结果,但它们的内部工作方式和性能表现可能有所不同。理解这两者的差异,对于选择正确的语法非常重要,尤其是在处理大量…