yolov2检测网数据集标注_labelme使用_json2txt格式转换

news2025/1/23 6:21:05

yolov2检测网数据集标注_labelme使用_json2txt格式转换

  • 一、安装Anaconda
  • 二、创建labelme虚拟环境
  • 三、使用labelme标注健康非健康猫狗数据
    • 3.1 打开数据集所在文件夹
    • 3.2 进行标注数据集
    • 3.3 json2txt
    • 3.4 按文件目录和训练测试数据集重分配
  • 四、数据喂给服务器网络
  • 参考链接

一、安装Anaconda

下载anaconda:https://www.anaconda.com/download/

选择自己电脑相应的版本即可,具体的安装过程可自行百度。

二、创建labelme虚拟环境

打开Anaconda Prompt,或者将anaconda添加到系统环境cmd命令打开也可,可参考链接1。

conda create --name=labelme python=3.6

conda activate labelme

pip install pyqt5
![请添加图片描述](https://img-blog.csdnimg.cn/684a1bcd66f641bb80aad9e05584550a.png)

pip install labelme

在该环境下输入labelme,具体的使用方法可以参考链接2
请添加图片描述

三、使用labelme标注健康非健康猫狗数据

labelme的标注快捷键:
W——新建标注框
A——上一张
D——下一张
ctrl+D——复制标签(选中需要复制的标签,ctrl+D,新复制的标签重叠在原标签上,拉出来就好了)
ctrl+S——保存
ctrl+滑动鼠标——放大缩小

3.1 打开数据集所在文件夹

3.2 进行标注数据集

标签对应:
    0 healthy_cat 300张
    1 unhealthy_cat 300张
    2 healthy_dog 300张 
    3 unhealthy_dog 300张
按照训练集:验证集:测试集 = 8:1:1


点击Create Polygons —> 鼠标放在图片上,按右键选create rectangle (一定需要是矩形,按两个点矩形不能旋转,一定就要正矩形

因为健康非健康猫狗的区分特征主要是身体毛色等信息,所以我们需要标注整体动物个体,如上图所示。

说明:label按照上面所提的标签进行标注,Group ID可以不用填写。


为了实现标注后自动保存:点击左上角的File,找到Save Automatically并点击上,做完标注后后自动生成json文件,保存在放图片的文件夹下面,成功生成后,右下角小框会打勾。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OHyDVZWo-1691505768382)(02_标注健康与非健康猫狗数据.assets/image-20230507155220958.png)]
可以在file list中点下一张图片,也可以左边点next image,为了更快标注,使用快捷键A(上一张) 或 D(下一张) 进行切换图片进行标注。

3.3 json2txt

因为我们使用的是yolo检测框架,其训练环境为darknet,我们需要将前面得到的json标注文件转换为训练框架能够识别的格式,具体格式要求如下所示:

darknet标注信息的数据格式如下:
Class id    center_x    center_y    w    h
对数据格式解释如下:
Class id:表示标注框的类别,从0开始计算,当前只要手部1类检测物体,故Class id全为0;
center_x:表示归一化后的手部框中心点坐标的X值。归一化坐标 = 实际坐标 / 整个图片宽
center_y:表示归一化后的手部框中心点坐标的Y值。归一化坐标 = 实际坐标 / 整个图片高
w:表示归一化后的手部框的宽。归一化长度 = 实际长度 / 整个图片宽
h:表示归一化后的手部框的高。归一化长度 = 实际长度 /整个图片高

在这里插入图片描述

下面是labelme的json格式转换为darknet所需的txt格式程序:

import os
import json
import numpy as np
from PIL import Image

def json2txt(path_json,path_txt,path_image):
    img = Image.open(path_image)
    w = img.width       #图片的宽
    h = img.height      #图片的高
    with open(path_json,'r', encoding='gb18030') as path_json:
        jsonx=json.load(path_json)
        with open(path_txt,'w+') as ftxt:
            for shape in jsonx['shapes']:
                xy=np.array(shape['points'])
                seq = []
                #print(xy[1][1])  #xy[1]表示第二个点的坐标,xy[1][1]表示第四个值,即第二点的y坐标
                center_x = (xy[0][0] + xy[1][0])/2/w  #归一化后的中心点坐标的X值
                center_y = (xy[0][1] + xy[1][1])/2/h  #归一化后的中心点坐标的Y值
                pet_w = abs(xy[0][0] - xy[1][0])/w #归一化后的宽
                pet_h = abs(xy[0][1] - xy[1][1])/h  # 归一化后的高
                # for m,n in xy:
                #     seq.append(str(m)+" "+str(n))
                #info = '0' + center_x + center_y + pet_w + pet_h
                # 0健康猫 1非健康猫 2健康狗 3非健康狗
                ftxt.writelines( '2 %.5f %.5f %.5f %.5f' % (center_x, center_y, pet_w, pet_h) + "\n") #
                # ftxt.writelines(" ".join(seq)+"\n")  #\n换行
                #join(),str = "-";举例:seq = ("a", "b", "c"); # 字符串序列 print str.join( seq );  结果:a-b-c

dir_json = 'C:/Users/tanhui/Desktop/code/cat_dog_dataset/user_json/3_unhealthy_dogs/'   #json路径
dir_txt = 'C:/Users/tanhui/Desktop/code/cat_dog_dataset/user_txt/3_unhealthy_dogs/'  #存取的txt路径
dir_image = 'C:/Users/tanhui/Desktop/code/cat_dog_dataset/user_jpg/3_unhealthy_dogs/'  #图片的路径

if not os.path.exists(dir_txt):
    os.makedirs(dir_txt)
list_json = os.listdir(dir_json)
list_image = os.listdir(dir_image)

for cnt,json_name in enumerate(list_json):
    path_json = dir_json + json_name
    path_image = dir_image + list_image[cnt]  #image_name=list_image[cnt]
    print('cnt=%d,name=%s,image=%s' % (cnt, json_name, list_image[cnt]))
    path_txt = dir_txt + json_name.replace('.json','.txt')
    json2txt(path_json, path_txt, path_image)

3.4 按文件目录和训练测试数据集重分配

如图是训练集和测试集文件夹结构:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U2pF7IRo-1691505768383)(02_标注健康与非健康猫狗数据.assets/image-20230507200455460.png)]
JPEGImages放的是原始图像,labels放的是json2txt后的darknet标注格式信息,list存放的是原始图像的全局路径(放在服务器上的路径)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kD31t2b7-1691505768383)(02_标注健康与非健康猫狗数据.assets/image-20230507200842076.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WZkaya1B-1691505768383)(02_标注健康与非健康猫狗数据.assets/image-20230507200858973.png)]在这里插入图片描述
接下来给出写入原始图像路径到list中的程序:

import os

# 指定图片所在路径
img_dir = r"cat_dog_dataset\training_dataset\JPEGImages"

# 自定义输出文件路径和文件名
output_file = r"cat_dog_dataset\training_dataset\list\cat_dog_train.txt"

# 自定义写入txt文件的内容
txt_path = "/home/nicta100-s12/ai/cat_dog_detect/training_dataset/JPEGImages" #服务器绝对路径

# 写入文件
with open(output_file, "w") as f:
    # 循环遍历所在路径下所有文件
    for filename in os.listdir(img_dir):
        filepath = os.path.join(img_dir, filename)
        path = os.path.join(txt_path, filename)
        path = path.replace("\\", "/") # 将路径中的反斜杠替换为正斜杠
        # 判断是否为图片文件
        if os.path.isfile(filepath) and (filepath.endswith(".jpg") or filepath.endswith(".png")):
            # 将图片路径写入输出文件中
            f.write(path + "\n")

四、数据喂给服务器网络

# test_dataset为测试数据
# training_dataset为训练数据
# JPEGImages目录下是需要进行训练的数据集图片
# labels目录下的txt是JPEGImages目录下对应图片所标注的labels
# list目录下的hand_train.txt文件中保存的是JPEGImages目录下所有图片的绝对路径。
# 注意:所有的txt文件都必须是linux格式的,可以使用 dos2unix 工具进行文件格式的转换
# 使用方法: dos2unix filename   (如果还不知道如何使用,可上网咨询度娘)

注意:所有的txt文件都必须是linux格式的(包括了标签txt),可以使用 dos2unix 工具进行文件格式的转换,
使用方法: dos2unix filename (如果还不知道如何使用,可上网咨询度娘)
sudo apt-get install dos2unix  # 如果服务器没有dos2unix这个软件的话,执行这条命令,先进行安装

dos2unix hand_test.txt         # 修改某个文件的文件格式

dos2unix  *                    # 修改该目录下的所有文件的文件格式

DOS2UNIX 安装与使用简介 (gnss.help)

参考链接

  1. Anaconda3安装深度学习标记工具labelme

  2. 数据标注软件labelme详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/850764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

容器安装Nginx

文章目录 容器安装nginx下载安装容器1、安装docker容器2、安装nginx3、容器运行nginx结果 容器安装nginx 下载安装容器 1、安装docker容器 yum makecache fast # 更新yum缓存 yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.…

Rookit系列一 【隐藏网络端口】【支持Win7 x32/x64 ~ Win10 x32/x64】

文章目录 Rookit系列一 【隐藏网络端口】【支持Win7 x32/x64 ~ Win10 x32/x64】前言探究隐藏网络端口netstat分析隐藏网络端口的原理关键数据结构隐藏网络端口源码 效果演示 Rookit系列一 【隐藏网络端口】【支持Win7 x32/x64 ~ Win10 x32/x64】 前言 Rookit是个老生常谈的话…

微服务服务拆分和远程调用

一、服务架构比较 单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统 分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目&#x…

鉴源实验室丨汽车网络安全运营

作者 | 苏少博 上海控安可信软件创新研究院汽车网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 概 述 1.1 背景 随着车辆技术的不断进步和智能化水平的提升,车辆行业正经历着快速的变革和技术进步。智能化…

C/C++内存管理:解析分配、释放与优化

目录 引言 一、栈与堆内存 1.1 栈内存 1.2 堆内存 1.3 示例 C示例 C示例 二 、C语言内存管理方式 2.1 malloc函数 介绍 用法示例 原理剖析 2.2 calloc函数 介绍 用法示例 原理剖析 2.3 realloc函数 介绍 解释 作用 用法示例 原理剖析 2.4 free函数 介…

tidevice+appium在windows系统实施iOS自动化

之前使用iOS手机做UI自动化都是在Mac电脑上进行的,但是比较麻烦,后来看到由阿里开源的tidevice工具可以实现在windows上启动WDA,就准备试一下,记录一下过程。 tidevice的具体介绍可以参考一下这篇文章:tidevice 开源&…

上传图片视频

分布式文件系统MinIo MinIO提供多个语言版本SDK的支持,下边找到java版本的文档: 地址:https://docs.min.io/docs/java-client-quickstart-guide.html MinIO测试(上传、删除、下载) public class MinioTest {MinioC…

JavaScript中的交互的方式alert,prompt,confirm的用法

一.alert的用法 1.alert 它会显示一条信息,弹出的这个带有信息的小窗口被称为模态窗。“modal” 意味着用户不能与页面的其他部分(例如点击其他按钮等)进行交互,直到他们处理完窗口。在上面示例这种情况下 —— 直到用户点击“确定”按钮。 …

【二叉树】105. 从前序与中序遍历序列构造二叉树

链接: 105. 从前序与中序遍历序列构造二叉树 先序 能够确定谁是根 中序 知道根之后,能够确定左子树和右子树的范围 例子 根据先序的性质(根左右),能够确定根,我们就能够从总序中找出根节点(rooti所在…

OpenLayers实战,OpenLayers画线测量距离和画多边形测量区域面积

专栏目录: OpenLayers实战进阶专栏目录 前言 本章使用OpenLayers实现画线测量距离和画多边形测量区域面积这两个功能。 本章代码就是通过OpenLayers的图形绘制功能,通过监听绘制事件获取绘制的图形,并进行计算,就可以得到长度和面积。日常开发中比较常用,所以不废话,立…

Maven构建项目失败 Non-resolvable import POM

Maven构建项目失败 Non-resolvable import POM Non-resolvable import POM: XXX:pom:4.2.0 was not found in https://repo.maven.apache.org/maven2 during a previous attempt.项目结构定位错误解决问题打包碰到另外的问题Failed to execute goal org.springframework.boot:s…

GCC编译过程:预处理->编译->汇编->链接

目录 引言 概括介绍 一、预处理 二、编译 三、汇编 四、链接 总结 引言 当使用集成开发环境(IDE)进行C语言编程时,点击"编译"按钮后,整个C程序从源代码到可执行文件的生成过程会自动完成。IDE会在后台为我们执行C…

CAD练习——绘制冲压件三视图

首先还是先设置咱们的绘图模板: 这是图层划分: 文字样式设置: 标注样式: 从主视图开始,首先绘制如下图形 用到的快捷指令: L:直线 O:偏移 TR:修剪 效果:…

实现跨域的几种方式

原理 前后端的分离导致了跨域的产生 跨域的三要素:协议 域名 端口 三者有一个不同即产生跨域 例如: http://www.csdn.com https://www.csdn.com 由于协议不同,端口不同而产生跨域 注:http的默认端口80,https的默…

【C++】多态的底层原理(虚函数表)

文章目录 前言一、虚函数表二、派生类中虚函数表1.原理2.例子: 三、虚函数的存放位置四 、单继承中的虚函数表五、多继承中的虚函数表六、问答题 前言 一、虚函数表 通过观察测试我们发现b对象是8bytes,除了_b成员,还多一个__vfptr放在对象的…

湖南科技学院图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》

湖南科技学院图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》

JDBC(常用类与接口、实现数据库的增删查改)

目录 1.Connection接口常用方法 2.DriverMange类 3.Statement接口 4.实现表的数据更新(增、改、删) 5.实现数据查找(ResultSet接口) 6.PreparedStatement 数据更新 1.Connection接口常用方法 用来与数据库连接的对象&#xff…

66 # form 数据格式化

实现一个 http 服务器 客户端会发送请求 GET POST 要处理不同的请求体的类型 表单格式(formData a1&b2),可以直接通信不会出现跨域问题JSON ("{"kaimo":"313"}")文件格式 &#x…

刚刚更新win11,记事本消失怎么处理?你需要注意些什么?

记录window11的bug hello,我是小索奇 昨天索奇从window10更新到了window11,由于版本不兼容卸载了虚拟机,这是第一个令脑壳大的,算了,还是更新吧,了解了解win11的生态,后期重新装虚拟机 第一个可…

uniapp scroll-view 隐藏滚动条

/*清除滚动条 - 适配安卓*/::-webkit-scrollbar {width: 0;height: 0;color: transparent;}/*清除滚动条 - 适配IOS*/::-webkit-scrollbar {display: none;}