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

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.6conda activate labelmepip 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 Imagedef 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-cdir_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_namepath_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.mzph.cn/news/28371.shtml

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

相关文章

Clion开发STM32之HAL库SPI封装(基础库)

前言 引用参考: Clion开发STM32之HAL库GPIO宏定义封装(最新版) 头文件 /******************************************************************************** Copyright (c) [scl]。保留所有权利。* 本文仅供个人学习和研究使用,禁止用于商业用途。******…

92 | Python 设计模式 —— 工厂模式

文章目录 什么是工厂模式?工厂模式的优点工厂模式的实现方式简单工厂模式(Simple Factory Pattern)抽象工厂模式(Abstract Factory Pattern)Python工厂模式示例1. 简单工厂模式2. 抽象工厂模式总结什么是工厂模式? 在软件设计中,工厂模式是一种创建型设计模式,它提供了…

网络安全---正则回溯

目录 一、题目引入 二、举出回溯例子进行分析 第一步: 正则往前匹配 第二步:匹配到头 第三步:往回匹配 第四步:直到分号结束 (匹配上) 原因: 三、进入正题一(分析题型&#x…

【人工智能概述】python妙用 __str__()

【人工智能概述】python妙用 str() 文章目录 【人工智能概述】python妙用 __str__()一.python内置函数__str__() 一.python内置函数__str__() 通过自定义__str__()函数可以打印对象中相关的内容。 class Person(object):def __init__(self, name tom, age 10):self.name n…

MongoDB创建用户 、数据库、索引等基础操作

MongoDB的权限认证是相对来说比较复杂的,不同的库创建后需要创建用户来管理。 本机中的MongoDB是docker 启动的,所以先进入docker的镜像中 docker exec -it mongodb bash 这样就进入到了镜像MongoDB中,然后输入命令连接MongoDB数据库 注…

有效管理IT问题的5个原则

问题管理就是发现未知的、隐藏的问题,这是根本原因, 这是您 IT 帮助台无穷无尽的工单来源。当您实施有效的 问题管理,您的 IT 团队可以超越消防模式,专注于战略 IT 目标。以下是可以帮助您实现一流问题管理的五个原则:…

网络安全 Day30-运维安全项目-堡垒机部署

运维安全项目-堡垒机部署 1. 运维安全项目-架构概述2. 运维安全项目之堡垒机2.1 堡垒机概述2.2 堡垒机选型2.3 环境准备2.4 部署Teleport堡垒机2.4.1 下载与部署2.4.2 启动2.4.3 浏览器访问teleport2.4.4 进行配置2.4.5 安装teleport客户端 2.5 teleport连接服务器 1. 运维安全…

二叉树的前中后序遍历(Leetcode 94144145)

题目 ​​​​​​144. 二叉树的前序遍历 145. 二叉树的后序遍历 94. 二叉树的中序遍历 代码 分为三种方法1&#xff09;递归遍历&#xff1b;2&#xff09;迭代遍历&#xff1b;3&#xff09;统一迭代遍历 递归遍历 public List<Integer> preorderTraversal(TreeNod…

中介者模式(Mediator)

中介者模式是一种行为设计模式&#xff0c;可以减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互&#xff0c;迫使它们通过一个封装了对象间交互行为的中介者对象来进行合作&#xff0c;从而使对象间耦合松散&#xff0c;并可独立地改变它们之间的交互。中介者…

开源语言模型的历史和重要性;Edge浏览器将推出Bing AI重写文本功能

&#x1f989; AI新闻 &#x1f680; 微软即将推出桌面版Microsoft Edge浏览器的Bing AI重写文本功能 摘要&#xff1a;微软最近在桌面版Microsoft Edge浏览器中引入了一个新功能&#xff0c;允许用户使用Bing AI重写文本。用户可以选择不同的语气、格式和长度&#xff0c;然…

SpringMVC的架构有什么优势?——异常处理与文件上传(五)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

oracle不小心将表update修改了如何回滚

oracle提供了一种闪回的方法&#xff0c;可以将某个时间的数据给还原回来 SELECT* FROMT_DIS_EVENT_RELATION_TYPE AS OF TIMESTAMP TO_TIMESTAMP (2023-08-08 15:31:00,yyyy-mm-dd hh24:mi:ss); T_DIS_EVENT_RELATION_TYPE 是误操作&#xff0c;需要闪回的表 2023-08-08 15…

java面试---字符串相关内容

字符串 1. 什么是Java中的字符串池&#xff08;String Pool&#xff09;&#xff1f;2. String、StringBuilder和StringBuffer之间的区别是什么&#xff1f;3. 如何比较两个字符串的内容是否相等&#xff1f;4、equals和的区别5. String类有哪些常用的方法&#xff1f; 1. 什么…

Android T 窗口层级相关的类(更新中)

窗口在App端是以PhoneWindow的形式存在&#xff0c;承载了一个Activity的View层级结构。这里我们探讨一下WMS端窗口的形式。 窗口容器类 —— WindowContainer类 /*** Defines common functionality for classes that can hold windows directly or through their* children …

(十二)大数据实战——hadoop集群之HDFS高可用自动故障转移

前言 本节内容主要介绍一下hadoop集群下实现HDFS高可用的自动故障转移&#xff0c;HDFS高可用的自动故障转移主要通过zookeeper实现故障的监控和主节点的切换。自动故障转移为 HDFS 部署增加了两个新组件&#xff1a;ZooKeeper 和 ZKFailoverController &#xff08;ZKFC&…

SolidUI社区-通用Prompt技巧

背景 随着文本生成图像的语言模型兴起&#xff0c;SolidUI想帮人们快速构建可视化工具&#xff0c;可视化内容包括2D,3D,3D场景&#xff0c;从而快速构三维数据演示场景。SolidUI 是一个创新的项目&#xff0c;旨在将自然语言处理&#xff08;NLP&#xff09;与计算机图形学相…

Spring Boot统一处理功能——拦截器

1.用户登录权限校验 ⽤户登录权限的发展从之前每个⽅法中⾃⼰验证⽤户登录权限&#xff0c;到现在统⼀的⽤户登录验证处理&#xff0c;它是⼀个逐渐完善和逐渐优化的过程。 1.1最初用户登录 我们先来回顾⼀下最初⽤户登录验证的实现⽅法&#xff1a; RestController RequestMap…

W6100-EVB-PICO作为TCP Client 进行数据回环测试(五)

前言 上一章我们用W6100-EVB-PICO开发板通过DNS解析www.baidu.com&#xff08;百度域名&#xff09;成功得到其IP地址&#xff0c;那么本章我们将用我们的开发板作为客户端去连接服务器&#xff0c;并做数据回环测试&#xff1a;收到服务器发送的数据&#xff0c;并回传给服务器…

uniapp使用命令创建页面

package.js下创建命令 "scripts": {"add": "node ./auto/addPage.ts" } package.js同级目录创建auto/addPage.ts addPage.ts代码如下 const fs require(fs) const path require(path) const targetPath process.argv[2];// 要创建的目录地…

JavaWeb学习|JSP相关内容

1.什么是JSP Java Server Pages: Java服务器端页面&#xff0c;也和Servlet一样&#xff0c;用于动态Web技术! 最大的特点: 。写JSP就像在写HTML 。区别: 。HTML只给用户提供静态的数据 。JSP页面中可以嵌入JAVA代码&#xff0c;为用户提供动态数据 JSP最终也会被转换成为一…