当前位置: 首页 > article >正文

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

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.kler.cn/a/385588.html

相关文章:

  • CAN总线数据帧格式详细介绍
  • C字符串 | 字符串处理函数 | 使用 | 原理 | 实现
  • IntelliJ IDEA的快捷键
  • 全面解析 Python typing模块与静态类型注解:从基础到高级
  • vue.js组件和传值以及微信小程序组件和传值
  • Prompt Engineering 提示工程
  • 开源模型应用落地-glm模型小试-glm-4-9b-chat-压力测试(六)
  • 自动化测试工具Ranorex Studio(二十六)-对象库设置对话框
  • Python实战:调用淘宝API以抓取商品页面数据
  • 易考八股文之docker常用命令
  • 【Flutter 内嵌 android 原生 View以及相互跳转】
  • ELK实现前台单显示ip/host等日志信息
  • 向日葵远程桌面Visual Studio白屏
  • 如何在Typora中使用copilot
  • HarmonyOS NEXT应用元服务开发Intents Kit(意图框架服务)本地搜索方案概述
  • 【已解决】Windows11 24H2 (家庭版)无法访问无密码SMB共享的问题;
  • 您与此网站之间建立的连接不安全解决方法
  • Node.js——fs模块-文件删除
  • # VMwareWorkstation虚拟机,如何下载安装 VMware Tools
  • Service Worker 缓存未更新的原因与解决方案
  • 使用 C# `Stopwatch` 实现函数 `Test01`的运行时间计算
  • 无人车之路径规划篇
  • R language 关于二维平面直角坐标系的制作
  • SQL server 列转行
  • 面试题:Spring(一)
  • 密码忘记了,如何取消excel编辑限制?