半自动辅助制作数据集【实例分割】

news2024/11/23 12:48:59

利用yoloV8的实例分割模型,半自动辅助制作数据集


引言:【主要步骤】

步骤1:无人机航拍,收集基础图片
步骤2:将收集到的图片,全部用yoloV8-seg.pt模型进行实例分割【预测之前,将配置文件default.yaml的save_txt:设置为True】
步骤3:将txt标注文件转换为JSON格式
步骤4:打开labelme开始修改再加工标注

  • 步骤1:【比如,如下规格】
    图片特征数据:车辆、人,等等
    图片拍摄变量:无人机高度、相机水平方向、相机俯仰角度
    (a)固定高度、水平方向,调整俯仰角
    (b)固定水平方向、俯仰角,调整高度
    (c)固定俯仰角、高度,调整水平方向

  • 步骤2:【预测代码及配置】
    default.yaml【save_txt:设置为True】 default.yaml
    使用脚本预测:my_predict.py【source参数:存放图片的目录路径】
    在这里插入图片描述
    得到的预测结果会存放在run文件夹下
    在这里插入图片描述

  • 步骤3:【将txt文件转换为JSON文件】
    利用我在Cityscapes数据集转换为COCO数据集的文章中写的方法,改一下坐标为缩放前的即可:

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

def convert_txt_to_labelme_json(txt_path, image_path, output_dir, image_fmt='.jpg'):
    # txt 转labelme json
    txts = glob.glob(os.path.join(txt_path, "*.txt"))
    for txt in txts:
        labelme_json = {
            'version': '4.5.7',
            'flags': {},
            'shapes': [],
            'imagePath': None,
            'imageData': None,
            'imageHeight': None,
            'imageWidth': None,
        }
        txt_name = os.path.basename(txt)
        image_name = txt_name.split(".")[0] + image_fmt
        labelme_json['imagePath'] = image_name
        image_name = os.path.join(image_path, image_name)
        if not os.path.exists(image_name):
            raise Exception('txt 文件={},找不到对应的图像={}'.format(txt, image_name))
        image = cv2.imdecode(np.fromfile(image_name, dtype=np.uint8), cv2.IMREAD_COLOR)
        h, w = image.shape[:2]
        labelme_json['imageHeight'] = h
        labelme_json['imageWidth'] = w
        with open(txt, 'r') as t:
            lines = t.readlines()
            for line in lines:
                content = line.split(' ')
                label = content[0]
                tem_label=str(label)
                #   0: car #车
                #   1: street  #街道、路
                #   2: person #人
                #   3: lawn #草坪
                #   4: construction #建筑
                #   5: tree #树,树林
                mapLabel={
                    "0":"car",
                    "1":"street",
                    "2":"person",
                    "3":"lawn",
                    "4":"construction",
                    "5":"tree"
                }
                shape = {
                    'label': mapLabel.get(str(label)),
                    'flags': {},
                    'points': []
                }
                for i in range(len(content)):
                    if 2 * i + 1 >= len(content):
                        break
                    else:
                        try:
                            shape['points'].append([float(content[2 * i + 1])*w, float(content[2 * i + 2])*h])
                        except Exception as e:
                            print(e)

                labelme_json['shapes'].append(shape)
            json_name = txt_name.split('.')[0] + '.json'
            json_name_path = os.path.join(output_dir, json_name)
            fd = open(json_name_path, 'w')
            json.dump(labelme_json, fd, indent=4)
            fd.close()
            print("save json={}".format(json_name_path))


if __name__=="__main__":
    in_imgs_dir = 'D:\\yoloProject\\ultralytics-registry\\test_11\\imgs'
    in_label_txt_dir = 'D:\\yoloProject\\ultralytics-registry\\test_11\\labels'
    out_labelme_json_dir = 'D:\\yoloProject\\ultralytics-registry\\test_11\\jsons'

    if not os.path.exists(out_labelme_json_dir):
        os.mkdir(out_labelme_json_dir)
    convert_txt_to_labelme_json(in_label_txt_dir,in_imgs_dir,out_labelme_json_dir,image_fmt='.png')

转换前:
在这里插入图片描述
转换后得到:
在这里插入图片描述

  • 步骤4【将生成的JSON文件和原图片文件放到同一个文件夹下,然后lableme打开目录】
    在这里插入图片描述

在这里插入图片描述

  • 步骤5【开始修改标注失误的多边形、删除标注错误的多边形】
    在这里插入图片描述
    自此,接着我这篇文章:
    【YOLOv8—seg实例分割(制作数据集,训练模型,预测结果)】
    【https://blog.csdn.net/weixin_43624549/article/details/139532142】

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

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

相关文章

图——图的应用02最短路径(Dijkstra算法与Floyd算法详解),拓扑排序及关键路径

前面介绍了图的应用——01最小生成树章节,大家可以通过下面的链接学习: 图——图的应用01最小生成树(Prim算法与Kruskal算法详解) 今天就讲一下图的其他应用——最短路径,拓扑排序及关键路径。 目录 一&#xff0c…

解决Qt6 OpenCV项目编译出现错误undefined reference to symbol ‘cv::cvtColor,无法解析的符号

在一次Qt6 OpenCV项目编译的过程中,出现错误undefined reference to symbol cv::cvtColor,无法解析的符号,问题是查看INCLUDEPATH和LIBS,都已经添加正确。 而且这个函数也可以在头文件中索引到。到底是什么问题呢? 清…

公司政务办理流程分享(北京)

社保增减员: 参保登记——增减员业务这么办_北京市人力资源和社会保障局_社会保险 https://rsj.beijing.gov.cn/yltc/202310/t20231025_3287007.html 公积金增减员: https://dwwsyw.gjj.beijing.gov.cn/

【从零开始实现stm32无刷电机FOC】【实践】【5/6 stm32 adc外设的高级用法】

目录 采样时刻触发采样同步采样 点击查看本文开源的完整FOC工程 本节介绍的adc外设高级用法用于电机电流控制。 从前面几节可知,电机力矩来自于转子的q轴受磁力,而磁场强度与电流成正比,也就是说电机力矩与q轴电流成正相关,控制了…

which 命令在Linux中是一个快速查找可执行文件位置的工具

文章目录 0、概念1、which --help2、which命令解释 0、概念 which命令用于查找命令的可执行文件的路径which 命令在 Linux 中用于查找可执行命令的完整路径。当你在 shell 中输入一个命令时,shell 会在环境变量 $PATH 定义的目录列表中查找这个命令。which 命令可以…

数据结构——单链表详解(超详细)(2)

前言: 上一篇文章小编简单的介绍了单链表的概念和一些函数的实现,不过为了保证文章的简洁,小编把它分成了两篇来写,这一篇小编紧接上一篇文章继续写单链表函数功能的实现: 目录: 1.单链表剩余函数的编写 1.…

Spring Security Oauth2源码分析

Spring Security Oauth2源码分析 前言一:客户端OAuth2授权请求的入口1、DefaultOAuth2AuthorizationRequestResolver类OAuth2AuthorizationRequest类authorizationRequestUri 的构建机制redirectUri 3、OAuth2AuthorizationRequestRedirectFilter类 二:O…

hiphop音乐风格分类有几种 怎么使用FL Studio制作Hip Hop音乐 hiphop音乐制作教程

Hip Hop音乐是一类新潮的音乐风格,融合了许多不同的文化元素和音乐表达方式。嘻哈(hip hop)诞生于美国贫民区街头的一种文化形式,一般的说法认为它诞生于美国纽约布朗克斯。嘻哈首先在纽约市北部布朗克斯市区的非裔及拉丁裔青年之…

kali进行host碰撞实验

目录 在kali上安装docker,完成环境搭建,进行host碰撞实验 更新软件包列表 下载阿里云的镜像源 添加 GPG 密钥并添加更新源 安装 Docker 安装成功检验 开启docker 检查docker状态 拉取镜像 在kali访问ip(加端口) 下载压缩…

京东超级18活动入口!京东超级18活动怎么玩?

京东推出新活动,低价的持续性项目“京东超级18”。 活动入口: 京东超级18,领60元大额补贴! 口令直达:14:/京东超级18¥NF5fuBPWIIaHRiMr¥,↗鯨○Dσσδng。 手机京东搜索&#xf…

Claude 3.5 Sonnet模型发布,对比ChatGPT4o孰强孰弱

Anthropic 这家生而为打击 OpenAI 安全问题的公司,正式发布了Claude 3.5 Sonnet模型! 用官网的话就是: 今天,我们推出了 Claude 3.5 Sonnet,这是我们即将推出的 Claude 3.5 型号系列中的第一个版本。Claude 3.5 Sonne…

vscode 打开远程bug vscode Failed to parse remote port from server output

vscode 打开远程bug vscode Failed to parse remote port from server output 原因如图: 解决:

02 Git环境搭建

第2章:Git环境搭建 一、Git下载和安装 ​ 官网:Git (git-scm.com) 一)安装主程序 ​ 准备安装包,双击安装 ​ 开始安装 ​ 选择安装位置 ​ 选择需要安装的组件(默认) ​ 选择文件夹菜单 ​ 选择编辑器&…

Word参考文献交叉引用

前言 Word自带交叉引用功能,可在正文位置引用文档内自动编号的段落,同时创建超链接,适用于参考文献的引用。使用此方法对参考文献进行引用后,当参考文献的编号发生变化时,只需要更新域即可与正文中的引用相对应。下文…

sysbench测试CPU

版本:sysbench1.1 简介 sysbench 对 CPU 测试的原理是通过创建多个线程,并让它们执行计算密集型任务来测试 CPU 性能。它会记录每个线程执行任务所需的时间,并计算出整个测试过程的平均值、最小值和最大值,甚至输出直方图展示延迟…

SpringBoot下的定时魔法:揭秘@Scheduled注解的无限可能

在这个快节奏的时代,自动化与定时任务成为了提升效率的不二法门。而在Java的Spring Boot框架中,Scheduled注解就像是一位精通时间魔法的巫师,悄无声息地让你的应用按部就班地执行着各种定时任务。今天,就让我们一起揭开它的神秘面…

【Qt 常用控件】带你进一步了解常用控件

文章目录 1. Push Button2. Radio Button3. Check Box4. 显示类控件5. 输入类控件 QLineEdit5.1 正则表达式5.2 验证器 - 验证手机号5.3 验证两次密码是否一致5.3 明文的显示密码 1. Push Button 🐧给按钮设置图标 🐧 注意:设置快捷键需要在…

【运维资料大全】运维全套资料整理(word原件完整版)

信息安全类、运维类资料整合: 1. 等保测评模板 2. 安全检查表(IDS,Linux,数据库,Tomcat,防火墙等) 3. 服务器安全巡检表 4. 网络定向攻击风险分析表 5. 应用系统常规检测表 6. 企业漏洞管理50个…

Web开发:卡片翻转效果(HTML、CSS)

目录 一、实现效果 二、完整代码 三、实现过程 1、页面结构 2、初始样式 3、翻转效果 4、图片大小问题 一、实现效果 如下图所示,当鼠标移入某个盒子,就反转这个盒子,并显示其背面的内容——卡片翻转效果; 卡片翻转效果 二…

【HarmonyOS】HarmonyOS NEXT学习日记:二、ArkTs语法

【HarmonyOS】HarmonyOS NEXT学习日记:二、ArkTs语法 众所周知TS是JS的超集,而ArkTs则可以理解为是Ts的超集。他们的基础都基于JS,所以学习之前最好就JS基础。我的学习重点也是放在ArkTs和JS的不同点上。 文章主要跟着官方文档学习,跳过了一…