yolov5 8系列 labelme数据标注 并生成训练数据集

news2024/11/17 3:38:42

yolov5 8系列 labelme数据标注 数据集生成终极教程

  • 一.数据集准备
  • 二.转换为yolo 数据集

一.数据集准备

  1. 创建一个data 文件夹
  2. 在data文件夹下创建一个images 文件夹
  3. 将所有图片数据放入images文件夹下

使用labelme标注数据

  1. python环境下使用 pip install labelme 安装labelme
  2. 在cmd 中使用命令 labelme 命令打开软件
  3. 进行标注
  4. 将标注文件和原图都放在images文件夹

标注完成后 images 文件夹下 存在原图和标注的json 文件

在这里插入图片描述

二.转换为yolo 数据集

在data文件夹下,根据labelme标签创建一个classes.txt 的类别文件
然后运行makedataset.py,直接生成labels 标签和train,val txt文件

import json
import cv2
import numpy as np
import glob
import os

def split_by_ratio(arr, *ratios):
    """
    按比例拆分数组
    :param arr:
    :param ratios: 该参数的个数即为子数组的个数 eg: 0.5,0.5即为拆分两个各占50%的子数组
    :return:
    """
    arr = np.random.permutation(arr)
    ind = np.add.accumulate(np.array(ratios) * len(arr)).astype(int)
    return [x.tolist() for x in np.split(arr, ind)][:len(ratios)]

#读取中文路径
def cv_imread(file_path):
    cv_img = cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)
    return cv_img

if __name__=="__main__":
    # 文件列表
    json_list = glob.glob("images/*.json")
    np.random.shuffle(json_list)
    trains,vals = split_by_ratio(json_list,0.9,0.1)

    # 训练文件夹
    if not os.path.exists("labels"):
        os.makedirs("labels")

    # 类别
    class_names = []
    for i, line in enumerate(open("classes.txt", encoding='utf-8').readlines()):
        class_name = line.strip()
        class_names.append(class_name)
    
    i = 0
    
    with open('train.txt', 'w') as f:
        for t in trains:
            basename = t.split("/")[-1].split("\\")[-1].split(".")[0]
            # 读取json文件
            data = ""
            with open(t, 'r', encoding='utf-8') as ft:
                data = json.load(ft)
                
            with open("labels/"+basename + ".txt", 'w') as fa:
                for shape in data['shapes']:
                    assert shape['label'] in class_names, f"Error: {shape['label']} not found in {class_names}"
                    class_id  = class_names.index(shape['label'])
                    width = data["imageWidth"]
                    height = data["imageHeight"]
                    x1, y1 = shape['points'][0]
                    x2, y2 = shape['points'][1]
                    x_center = (x1 + x2) / 2 / width
                    y_center = (y1 + y2) / 2 / height
                    width = abs(x2 - x1) / width
                    height = abs(y2 - y1) / height

                    fa.write(f"{class_id} {x_center} {y_center} {width} {height}\n")

            # yololabels
            out_txt_file = "data/images/" +basename + ".jpg\n"
            f.write(out_txt_file)


    with open('val.txt', 'w') as f:
        for t in vals:
            basename = t.split("/")[-1].split("\\")[-1].split(".")[0]
            # 读取json文件
            data = ""
            with open(t, 'r', encoding='utf-8') as ft:
                data = json.load(ft)
                
            with open("labels/"+basename+ ".txt", 'w') as fa:
                for shape in data['shapes']:
                    assert shape['label'] in class_names, f"Error: {shape['label']} not found in {class_names}"
                    class_id  = class_names.index(shape['label'])

                    x1, y1 = shape['points'][0]
                    x2, y2 = shape['points'][1]
                    x_center = (x1 + x2) / 2 / width
                    y_center = (y1 + y2) / 2 / height
                    width = abs(x2 - x1) / width
                    height = abs(y2 - y1) / height

                    fa.write(f"{class_id} {x_center} {y_center} {width} {height}\n")

            # yololabels
            out_txt_file = "data/images/" + basename+ ".jpg\n"
            f.write(out_txt_file)

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

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

相关文章

边缘计算盒子要怎么选?

选择边缘计算盒子需要考虑以下几个因素: 性能需求:边缘计算盒子的性能应该与您的应用需求相匹配。如果需要处理大量数据或者部署多种复杂ai算法,那么就需要选择更高性能的盒子。 IVP06A边缘计算盒子是基于RV1126设计的一款支持深度智能边缘…

Makefile基础教程(条件判断语句)

文章目录 前言一、条件判断语句概念讲解1.ifeq 和 ifneq2.ifdef 和 ifndef3.ifeq 的比较操作符 二、条件判断语句的使用三、条件判断语句使用的注意事项四、条件判断语句只在预处理阶段有效总结 前言 本篇文章开始讲解Makefile中的条件判断语句,在各种编程语言中都…

远程桌面连接可以传文件么?

远程桌面连接是一种远程管理计算机的方式。它允许用户通过网络远程控制其他计算机。远程桌面连接可以用于各种目的,例如从远程地方访问办公室电脑、支持远程用户、教育、游戏等等。但是,在使用远程桌面连接时,用户可能会遇到一些问题&#xf…

8. 类的静态成员

一、对象的生产期 生存期:对象从诞生到结束的这段时间生存期分为静态生存期和动态生存期 1.1 静态生存期 对象的生存期与程序的运行期相同,则称它具有静态生存期在文件作用域中声明的对象都是具有静态生存期的若在函数内部的局部作用域中声明具有静态…

配置Windows终端像Linux终端一样直接执行Python脚本

配置Windows终端像Linux终端一样直接执行Python脚本 1. 将Python加入环境变量2. 将Python后缀加入环境变量PATHEXT中3. 修改Python脚本的默认打开方式4. *将Python脚本命令加入环境变量*5. 测试 在Linux系统中,在Python脚本的开头指定Python解释器路径,即…

Terry部落简介

通过一个简单的服务,整理使用的技术 服务简介 Terry部落,基于目前主流 Java Web 技术栈(SpringBoot MyBatis-plus MySQL Redis Kafka Elasticsearch shiro …)实现的个人博客服务。包含登陆、注册、文章发布、资源发布、鉴…

ACM - 数学 - 提高(还没学多少)

ACM - 数学 练习题 一、数论1、分解质因数 :AcWing 197. 阶乘分解2、求约数个数(1)AcWing 1294. 樱花 (求 n!约数个数之和)(2)AcWing 198. 反素数 (求 1 ~ N 中约数最多的…

human-NeRF 代码运行环境完全打包(根据照片视频生成三维模型)

包含模型和可以直接运行的数据的代码环境(window环境,linux应该也可以运行),下载链接放在文章最后,不需要你自己再去下载任何的代码和模型了。 下载后输入三行命令在命令行界面即可将代码跑起来: pip insta…

C++14:AVL树

由于二叉搜索树在某些特定的情况下会退化成单叉树,为了解决这个问题,保证二叉搜索树能在绝大多数情况下保持高速搜索,G.M. Adelson-Velsky和E.M. Landis这两位俄国数学家提出了AVL树的概念,也就是高度平衡的搜索二叉树。 AVL树平衡大体逻辑&…

ACM - 数据结构 - 基础(数组模拟链表 / 栈 / 队列 + 字典树 + 并查集 + 堆 + 哈希)

数据结构 一、线性表1、单链表模板题:AcWing 826. 单链表 2、双链表模板题 AcWing 827. 双链表 3、栈数组模拟栈模板 AcWing 828. 模拟栈逆波兰简版模板例题1、逆波兰表达式:HDU 1237 简单计算器(写得有点复杂) 4、队列数组模拟队…

接口自动化测试可以使用的几个常用的框架

接口自动化测试可以使用以下几个常用的框架: 1、pytest pytest是一个用于Python编写单元测试和功能测试的框架。它提供了简洁的语法、灵活的扩展性和丰富的插件,可以帮助开发人员高效地编写测试用例,并快速定位和解决问题。 以下是pytest的…

数据结构刷题(三十一):1049. 最后一块石头的重量 II、完全背包理论、518零钱兑换II

一、1049. 最后一块石头的重量 II 1.思路:01背包问题,其中dp[j]表示容量为j的背包,最多可以背最大重量为dp[j]。 2.注意:递推公式dp[j] max(dp[j], dp[j - stones[i]] stones[i]);本题中的重量就是价值,所以第二个…

边缘计算盒子适合用于哪些场景?

边缘计算盒子适用于在智慧工地、智慧工厂、智慧园区和智慧城管等场景中可以实现多种算法功能,以下是一些应用和实现算法功能: 智慧工地:实时视频监控与分析:边缘计算盒子可以处理实时监控视频流,进行人员和车辆识别、…

OpenPCDet系列 | 5.PointPillars模型前向传播完整流程

文章目录 前向传播流程1. 模型初始化2. 模型训练前向传播前向传播流程 这里以PointPillars模型为例,在PointPillars模型中主要划分了以下4个主要的模块,以下某块首先会在build_network中进行初始化,然后在具体前向传播时通过forward函数进行。下面进行区分。 PointPillars…

新颖拓扑指纹助力虚拟筛选:ToDD革新计算机辅助药物发现之路

编译 | 于洲 今天我们介绍由Novartis集团的Novartis与德克萨斯大学达拉斯分校的Baris Coskunuzer为第一作者发表在NeurIPS 2022会议上的工作,文章介绍了一种新的虚拟筛选方法——ToDD模型,该方法使用了多参数持久性同调(MP)来生成…

wx.request get请求重定向问题

微信小程序wx.request请求,重定向问题。 背景 在开发微信小程序项目的时候,使用wx.request请求一个公共接口,结果请求被重定向多次之后,返回失败,而且没有 code 码,只有一个 errMsg: request:fail。 Netw…

OpenShift - 使用 Ansible Automation Platform 纳管 OpenShift Virtualization 虚机

《OpenShift / RHEL / DevSecOps 汇总目录》 说明:本文已经在支持 OpenShift 4.12 的 OpenShift 环境中验证 本文所用到的运行环境和配置方法请先参照以下 blog 准备: 《OpenShift 4 - 安装部署 Ansible Automation Platform 4.x 控制台》《OpenShift …

React 组件

文章目录 React 组件复合组件 React 组件 本节将讨论如何使用组件使得我们的应用更容易来管理。 接下来我们封装一个输出 “Hello World&#xff01;” 的组件&#xff0c;组件名为 HelloMessage&#xff1a; React 实例 <!DOCTYPE html> <html> <head> &…

css中的grid高频布局

1.需求 1.一个父级容器内有n个子元素; 2.每个子元素最小宽度是100px&#xff1b; 3.每个子元素最大宽度根据屏幕宽度自适应&#xff1b; 4.每个子元素的宽度保持同宽&#xff1b; 5.每个元素之间有间隔&#xff0c;每一行的两边不留间隙&#xff0c;每一列的上下不留间隙&…

2.V853支持WIFI和有线网卡

100ASK-V853-PRO开发板支持WIFI和有线网卡 0.前言 ​ 通过上一章节&#xff0c;我们已经成功下载Tina SDK包&#xff0c;完成编译并烧写Tina Linux系统&#xff0c;接下来展示100ASK_V853-PRO开发部如何通过WIFI和有线网卡进行上网。 全志Linux Tina-SDK开发完全手册&#x…