labelme目标检测标注笔记

文章介绍了如何在AnacondaPrompt中使用Labelme工具进行图像标注,标注后的内容需要进行转换以适应YOLOv5的训练。通过提供的Python脚本,可以将Labelme的JSON标注转换为YOLO格式,包括读取JSON文件,计算训练和验证数据的比例,以及将标注信息和图像数据写入到对应的train和valid目录中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Anaconda Prompt终端打开,输入代码pip install labelme
在这里插入图片描述
安装成功之后,输入labelme,打开标注应用
在这里插入图片描述

在这里插入图片描述
选择要标注的文件夹
在这里插入图片描述
在这里插入图片描述
选择标注好文件保存的位置
在这里插入图片描述
标注好以后自动保存
在这里插入图片描述
开始标注
在这里插入图片描述
右键点击图片,弹出下图
第一个表示创建矩形框
如果不选择右键,直接在图中点击画图,就可以选择不规则图像

在这里插入图片描述

表示修改已经标注的框图
在这里插入图片描述

在这里插入图片描述
表示继续标注该文件夹下的下一张图片
在这里插入图片描述
在这里插入图片描述
标注完之后的文件格式
里面的数值分别表示所选的点point在该图片下的位置
在这里插入图片描述

在这里插入图片描述

cx和cy表示该框在这个图片中中心点位置坐标
w和h表示该框的宽和高
注意该文件数值不能直接用于yolov5的训练学习,需要进行转换归一化处理(下图博主地址:树莓派-yolo目标检测-数据的采集与标注
在这里插入图片描述
格式转换
在这里插入图片描述

在这里插入图片描述

dic_labels= {'led':0,
            'buzzer':1,
            'teeth':2,
             'path_json':'labs',
             'ratio':0.9}

0.9表示
90%为训练数据
10%为验证数据

import os
import json
import random
import base64
import shutil
import argparse
from pathlib import Path
from glob import glob
from dic_lab import dic_labels

def generate_labels(dic_labs):
    path_input_json = dic_labels['path_json']
    ratio = dic_labs['ratio']
    for index, labelme_annotation_path in enumerate(glob(f'{path_input_json}/*.json')):

        # 读取文件名
        image_id = os.path.basename(labelme_annotation_path).rstrip('.json')
        
        # 计算是train 还是 valid
        train_or_valid = 'train' if random.random() < ratio else 'valid'

        # 读取labelme格式的json文件
        labelme_annotation_file = open(labelme_annotation_path, 'r')
        labelme_annotation = json.load(labelme_annotation_file)

        # yolo 格式的 lables
        yolo_annotation_path = os.path.join(train_or_valid, 'labels',image_id + '.txt')
        yolo_annotation_file = open(yolo_annotation_path, 'w')
        
        # yolo 格式的图像保存
        yolo_image = base64.decodebytes(labelme_annotation['imageData'].encode())
        yolo_image_path = os.path.join(train_or_valid, 'images', image_id + '.jpg')
        
        yolo_image_file = open(yolo_image_path, 'wb')
        yolo_image_file.write(yolo_image)
        yolo_image_file.close()
     

        # 获取位置信息
        for shape in labelme_annotation['shapes']:
            if shape['shape_type'] != 'rectangle':
                print(
                    f'Invalid type `{shape["shape_type"]}` in annotation `annotation_path`')
                continue
           

            points = shape['points']
            scale_width = 1.0 / labelme_annotation['imageWidth']
            scale_height = 1.0 / labelme_annotation['imageHeight']
            width = (points[1][0] - points[0][0]) * scale_width
            height = (points[1][1] - points[0][1]) * scale_height
            x = ((points[1][0] + points[0][0]) / 2) * scale_width
            y = ((points[1][1] + points[0][1]) / 2) * scale_height
            object_class = dic_labels[shape['label']]
            yolo_annotation_file.write(f'{object_class} {x} {y} {width} {height}\n')
        yolo_annotation_file.close()
        print("creat lab %d : %s"%(index,image_id))


if __name__ == "__main__":
    os.makedirs(os.path.join("train",'images'),exist_ok=True)
    os.makedirs(os.path.join("train",'labels'),exist_ok=True)
    os.makedirs(os.path.join("valid",'images'),exist_ok=True)
    os.makedirs(os.path.join("valid",'labels'),exist_ok=True)
    generate_labels(dic_labels)



### LabelMe 数据标注练习题与教程 #### 使用LabelMe进行遥感影像数据的多边形区域标注及分类标注练习 对于希望深入理解和实践LabelMe这一强大图像标注工具的学习者而言,掌握其操作流程至关重要。通过实际案例可以更好地了解如何应用该软件完成复杂的任务。 在《数据标注工程》第七章学习笔记及作业中提到,为了熟悉LabelMe的操作方法,建议使用遥感影像数据来进行多边形区域标注及分类标注练习[^1]。这不仅有助于提高对不同地理环境的理解能力,同时也能够增强处理复杂形状物体的能力。 以下是具体的练习指南: 1. **安装并配置LabelMe** 首先需要确保已经正确安装Python开发环境,并按照官方文档指导完成LabelMe库及相关依赖项的安装工作。可以通过命令行执行`pip install labelme`来快速安装最新版本。 2. **准备待标注的数据集** 收集一系列高质量的遥感影像作为素材,这些图片应该覆盖多种地形地貌特征以便于后续分析。可以从公开资源网站获取免费授权使用的卫星照片或其他形式的空间观测资料。 3. **启动LabelMe界面** 打开终端窗口输入`labelme`指令即可进入图形化用户界面GUI模式下的编辑器,在这里可以根据需求调整参数选项满足个性化定制的要求。 4. **创建新项目文件夹结构** 在本地磁盘指定位置新建一个用于保存所有成果物的工作空间目录树,通常情况下会包含如下几个子文件夹: - `images/`: 存放原始未经任何修改过的源图; - `annotations/`: 记录每张图片对应的JSON格式描述信息; - `labels.txt`: 定义类别标签名称列表; 5. **加载目标图像至编辑区** 利用菜单栏中的“Open”按钮浏览选取一张或多张要处理的照片导入当前视窗内显示出来供下一步骤操作前查看确认无误后再继续往下走。 6. **绘制边界轮廓线** 进入绘图状态后利用鼠标左键点击拖拽的方式沿着感兴趣对象边缘勾勒出闭合路径形成一个多边形选区范围圈定住它所代表的实际物理实体比如建筑物、道路网路节点等重要地标性建筑群落。 7. **设定属性标签** 对每一个已建立好的几何体赋予相应的语义解释说明文字即为其分配特定含义所属类别的标识符从而实现智能化识别解析的目的达到预期效果最大化程度上的精准度表现水平之上更进一步提升整体工作效率质量标准等级层次方面做出贡献。 8. **导出结果为JSON格式** 当全部完成后记得及时保存进度防止意外丢失造成不必要的麻烦困扰问题发生时难以挽回损失惨重的局面出现所以务必养成良好的习惯做法就是经常性的备份存档以防万一情况的发生带来不便之处影响正常工作的顺利开展推进实施计划安排表单内的各项事务活动事项清单里涉及到的内容条目逐一落实到位不留死角盲区空白地带未被触及探索发现挖掘潜力无限可能存在的价值所在领域范围内寻求突破创新发展的机遇挑战面前勇往直前不惧困难险阻阻碍前进的步伐节奏频率加快速度效率更高更快更强更好最佳状态呈现给世人眼前一亮惊艳四座令人赞叹不已拍手叫绝的好评如潮涌动而来络绎不绝持续不断绵延千里之外传遍大江南北各个角落旮旯之间流传开来成为一段佳话美谈千古流芳百世留名载入史册永垂不朽! 9. **验证准确性** 将生成的结果与其他权威渠道发布的同类产品对比检验是否存在偏差错误之处若有则需返回修正直至完全一致为止方可认为达到了合格的标准要求。 ```json { "version": "4.5.6", "flags": {}, "shapes": [ { "label": "building", "points": [[10, 10], [100, 10], [100, 100], [10, 100]], "group_id": null, "shape_type": "polygon", "flags": {} } ], "imagePath": "example.jpg", "imageData": null, "imageHeight": 200, "imageWidth": 200 } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值