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

使用Labelme标注数据

1. 下载labelme

下载地址: https://github.com/labelmeai/labelme/releases/download/v5.5.0/Labelme.exe

2.  打开目录

打开要标注的图片所在的目录,为了对应后面的代码,这里把路径假设为:  d:\imgs

3. 设置选项

  • 1. 菜单栏 => 文件 => 自动保存
  • 2. 菜单栏 => 文件 => 取消勾选 "同时保存图像数据"
  • 3. 菜单栏 => 编辑 => 保留最后的标注

4. 标注数据

这里使用矩形框标注,根据自己的情况选择即可.有个ai标注可以尝试一下

标注数据时,创建矩形框后,鼠标依然处于创建状态,这个时候可以右键或者工具类,选择"编辑多边形"即可退出创建状态.

5. 转换标注数据位yolo格式

把上面打开的目录(d:\imgs)中的所有图片和json文件,一个图片标准对应一个json文件,全部复制到程序所在目录下的imgs目录下,然后运行下面的代码即可.

运行代码后在程序所在的目录生成 train valid 目录,把这两个目录复制到yolo根目录训练即可

import os
import json
import random
from glob import glob
from PIL import Image# 这里改为自己标注数据用到的标签
# className为标注数据时标签名
# ratio设置0.8表示80%数据用于训练,20%数据用于验证
dic_labels = {'classname': 0,'ratio': 0.8}def generate_labels(dic_labs):ratio = dic_labs['ratio']for index, labelme_annotation_path in enumerate(glob(f'imgs/*.json')):# 读取labelme格式的json文件with open(labelme_annotation_path, 'r') as labelme_annotation_file:labelme_annotation = json.load(labelme_annotation_file)# 获取图像的路径和文件名(不含扩展名)image_path = os.path.join('imgs', labelme_annotation['imagePath'])image_id, image_ext = os.path.splitext(os.path.basename(image_path))# 计算是train 还是 validtrain_or_valid = 'train' if random.random() < ratio else 'valid'# 从本地图像文件读取图像并保存到相应的目录with Image.open(image_path) as img:img.save(os.path.join(train_or_valid, 'images', f'{image_id}{image_ext}'))# yolo 格式的 labelsyolo_annotation_path = os.path.join(train_or_valid, 'labels', f'{image_id}.txt')with open(yolo_annotation_path, 'w') as yolo_annotation_file:# 获取位置信息for shape in labelme_annotation['shapes']:if shape['shape_type'] != 'rectangle':print(f'Invalid type `{shape["shape_type"]}` in annotation `{labelme_annotation_path}`')continuepoints = shape['points']scale_width = 1.0 / labelme_annotation['imageWidth']scale_height = 1.0 / labelme_annotation['imageHeight']width = (points[1][0] - points[0][0]) * scale_widthheight = (points[1][1] - points[0][1]) * scale_heightx = ((points[1][0] + points[0][0]) / 2) * scale_widthy = ((points[1][1] + points[0][1]) / 2) * scale_heightobject_class = dic_labels[shape['label']]yolo_annotation_file.write(f'{object_class} {x} {y} {width} {height}\n')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)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++面向对象单例模式禁止拷贝、禁止赋值操作(=delete)
  • Qt 通过QSS设置两个QWidget的叠加
  • HarmonyOS Next 系列之列表下拉刷新和触底加载更多数据实现(十一)
  • 会员注册表单包括先写基础信息,地址选择,上传文件,填写身份证号等功能JavaScript+HTML
  • LeetCode125. 验证回文串
  • android kotlin集成WorkManager实现定时获取数据
  • Linux软件编程学习第十三天
  • Redis远程字典服务器(4)—— string类型详解
  • 周记-2024年第32周8.5~8.11:北京出差,拒绝羞怯
  • 《大语言模型:原理与工程实践》大模型入门必读书籍,PDF版整理好了
  • Linux线程基础学习记录
  • 仅12%程序员担心被AI取代 62%开发者在使用AI工具
  • 贝莱德与摩根大通的最新季度持仓分析
  • 一个能减少重绘的属性?分享 1 段优质 CSS 代码片段!
  • html+css+js网页设计 作业歌帝梵官网首页1个页面6个js效果
  • 收藏网友的 源程序下载网
  • angular组件开发
  • ES6 学习笔记(一)let,const和解构赋值
  • Java基本数据类型之Number
  • Linux各目录及每个目录的详细介绍
  • Linux中的硬链接与软链接
  • Netty源码解析1-Buffer
  • React-redux的原理以及使用
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • 从0到1:PostCSS 插件开发最佳实践
  • 精彩代码 vue.js
  • 坑!为什么View.startAnimation不起作用?
  • 理解在java “”i=i++;”所发生的事情
  • 入门级的git使用指北
  • 听说你叫Java(二)–Servlet请求
  • 详解NodeJs流之一
  • 最近的计划
  • AI算硅基生命吗,为什么?
  • ​决定德拉瓦州地区版图的关键历史事件
  • #13 yum、编译安装与sed命令的使用
  • #pragma multi_compile #pragma shader_feature
  • #图像处理
  • (1)Jupyter Notebook 下载及安装
  • (day6) 319. 灯泡开关
  • (Oracle)SQL优化技巧(一):分页查询
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (二)JAVA使用POI操作excel
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (四)JPA - JQPL 实现增删改查
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (转)创业家杂志:UCWEB天使第一步
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .Net Remoting常用部署结构