55、记录标注的关键点和目标检测数据集,进行目标检测标注文件和关键点文件分离以及yolov5.txt标注格式转xml数据集

2023-05-16

基本思想:手中存在一份关键点检测模型,因为客户把检测框和目标关键点框都标注在一起了,所以进行一下剥离

代码一:从关标注数据集剥离目标检测

# -*- coding: utf-8 -*-
import cv2
import json
import io
import os
import glob
from xml.dom.minidom import Document

path = r'F:\trash\test'
destPath = r"F:\trash\test"




m_folder = ""
print('m_folder=', m_folder)
m_database = 'Unknown'
print('m_database=', m_database)
m_depth = 3
print('m_depth=', m_depth)
m_segmented = 0
print('m_segmented=', m_segmented)

m_pose = 'Unspecified'
print('m_pose=', m_pose)
m_truncated = 0
print('m_truncated=', m_truncated)
m_difficult = 0
print('m_difficult=', m_difficult)
m_segmented = 0
print('m_segmented=', m_segmented)

path_list = glob.glob(path+"\*.json")
for name in enumerate(path_list):
    m_path = name[1]
    print("m_path=",m_path)
    dir = os.path.dirname(m_path)
    name__,__=os.path.split(name[1])
    ff,ext=os.path.splitext(__)
    print('dir=', dir)

    file_json = io.open(m_path, 'r', encoding='utf-8')
    json_data = file_json.read()
    data = json.loads(json_data)
    m_filename = ff+".jpg"
    print('m_filename=', m_filename)
    m_path = os.path.join(dir, m_filename)
    #print('m_path=', m_path)
    m_width = data['imageWidth']
    #print('m_width=', m_width)
    m_height = data['imageHeight']
    #print('m_height=', m_height)
    object_name = os.path.splitext(m_filename)[0]
    new_object_name = object_name + '.xml'
    img_name = object_name + ".jpg"

    #print(new_object_name)
    doc = Document()  # 创建DOM文档对象
    DOCUMENT = doc.createElement('annotation')  # 创建根元素

    folder = doc.createElement('folder')
    folder_text = doc.createTextNode(m_folder)
    folder.appendChild(folder_text)
    DOCUMENT.appendChild(folder)
    doc.appendChild(DOCUMENT)

    filename = doc.createElement('filename')
    filename_text = doc.createTextNode(m_filename)
    filename.appendChild(filename_text)
    DOCUMENT.appendChild(filename)
    doc.appendChild(DOCUMENT)

    path = doc.createElement('path')
    path_text = doc.createTextNode(m_filename)
    path.appendChild(path_text)
    DOCUMENT.appendChild(path)
    doc.appendChild(DOCUMENT)

    source = doc.createElement('source')
    database = doc.createElement('database')
    database_text = doc.createTextNode(m_database)  # 元素内容写入
    database.appendChild(database_text)
    source.appendChild(database)
    DOCUMENT.appendChild(source)
    doc.appendChild(DOCUMENT)

    size = doc.createElement('size')
    width = doc.createElement('width')
    width_text = doc.createTextNode(str(m_width))  # 元素内容写入
    width.appendChild(width_text)
    size.appendChild(width)

    height = doc.createElement('height')
    height_text = doc.createTextNode(str(m_height))
    height.appendChild(height_text)
    size.appendChild(height)

    depth = doc.createElement('depth')
    depth_text = doc.createTextNode(str(m_depth))
    depth.appendChild(depth_text)
    size.appendChild(depth)

    DOCUMENT.appendChild(size)

    segmented = doc.createElement('segmented')
    segmented_text = doc.createTextNode(str(m_segmented))
    segmented.appendChild(segmented_text)
    DOCUMENT.appendChild(segmented)
    doc.appendChild(DOCUMENT)
    for i in range(len(data['shapes'])):
        if data['shapes'][i]['shape_type'] !="rectangle":
            continue
        m_xmin_0 = data['shapes'][i]['points'][0][0]
        #print('m_xmin_0=', m_xmin_0)
        m_ymin_0 = data['shapes'][i]['points'][0][1]
        #print('m_ymin_0=', m_ymin_0)
        m_xmax_0 = data['shapes'][i]['points'][1][0]
        #print('m_xmax_0=', m_xmax_0)
        m_ymax_0 = data['shapes'][i]['points'][1][1]
        #print('m_ymax_0=', m_ymax_0)
        m_name_0 ="tilapia"# data['shapes'][i]['label']
        #print('m_name_0=', m_name_0)
        object = doc.createElement('object')
        name = doc.createElement('name')
        name_text = doc.createTextNode(m_name_0)
        name.appendChild(name_text)
        object.appendChild(name)

        pose = doc.createElement('pose')
        pose_text = doc.createTextNode(m_pose)
        pose.appendChild(pose_text)
        object.appendChild(pose)

        truncated = doc.createElement('truncated')
        truncated_text = doc.createTextNode(str(m_truncated))
        truncated.appendChild(truncated_text)
        object.appendChild(truncated)

        difficult = doc.createElement('difficult')
        difficult_text = doc.createTextNode(str(m_difficult))
        difficult.appendChild(difficult_text)
        object.appendChild(difficult)

        bndbox = doc.createElement('bndbox')
        xmin = doc.createElement('xmin')
        xmin_text = doc.createTextNode(str(int(m_xmin_0)))
        xmin.appendChild(xmin_text)
        bndbox.appendChild(xmin)

        ymin = doc.createElement('ymin')
        ymin_text = doc.createTextNode(str(int(m_ymin_0)))
        ymin.appendChild(ymin_text)
        bndbox.appendChild(ymin)

        xmax = doc.createElement('xmax')
        xmax_text = doc.createTextNode(str(int(m_xmax_0)))
        xmax.appendChild(xmax_text)
        bndbox.appendChild(xmax)

        ymax = doc.createElement('ymax')
        ymax_text = doc.createTextNode(str(int(m_ymax_0)))
        ymax.appendChild(ymax_text)
        bndbox.appendChild(ymax)
        object.appendChild(bndbox)

        DOCUMENT.appendChild(object)
    new_path_filename = os.path.join(destPath, new_object_name)
    print('new_path_filename=', new_path_filename)
    f = open(new_path_filename, 'w')

    doc.writexml(f, indent='\t', newl='\n', addindent='\t', encoding='utf-8')
    f.close()



txt数据集格式转xml

# -*- coding: utf-8 -*-
import glob
import json
import io
import os
import cv2
from xml.dom.minidom import Document

path = '/home/ubuntu/Downloads/RetinaFace/images'
destPath = "/home/ubuntu/Downloads/RetinaFace/images"


m_folder = os.path.basename(path)
print('m_folder=', m_folder)
m_database = 'Unknown'
print('m_database=', m_database)
m_depth = 3
print('m_depth=', m_depth)
m_segmented = 0
print('m_segmented=', m_segmented)

m_pose = 'Unspecified'
print('m_pose=', m_pose)
m_truncated = 0
print('m_truncated=', m_truncated)
m_difficult = 0
print('m_difficult=', m_difficult)
m_segmented = 0
print('m_segmented=', m_segmented)

path_list = glob.glob(path+"/*.txt")
for name in path_list:
    m_path,name_ = os.path.split(name)
    name_p, ext_ = os.path.splitext(name_)
    img_jpg=".".join([name_p,"jpg"])
    image_src=cv2.imread(os.path.join(m_path,img_jpg))
    m_width,m_height,_=image_src.shape[0],image_src.shape[1],image_src.shape[2]
    m_filename = img_jpg
    print('m_path=', m_path)
    print('m_height=', m_height)
    object_name = os.path.splitext(m_filename)[0]
    new_object_name = object_name + '.xml'
    img_name = object_name + ".jpg"

    print(new_object_name)
    doc = Document()  # 创建DOM文档对象
    DOCUMENT = doc.createElement('annotation')  # 创建根元素

    folder = doc.createElement('folder')
    folder_text = doc.createTextNode(m_folder)
    folder.appendChild(folder_text)
    DOCUMENT.appendChild(folder)
    doc.appendChild(DOCUMENT)

    filename = doc.createElement('filename')
    filename_text = doc.createTextNode(m_filename)
    filename.appendChild(filename_text)
    DOCUMENT.appendChild(filename)
    doc.appendChild(DOCUMENT)

    path = doc.createElement('path')
    path_text = doc.createTextNode(m_filename)
    path.appendChild(path_text)
    DOCUMENT.appendChild(path)
    doc.appendChild(DOCUMENT)

    source = doc.createElement('source')
    database = doc.createElement('database')
    database_text = doc.createTextNode(m_database)  # 元素内容写入
    database.appendChild(database_text)
    source.appendChild(database)
    DOCUMENT.appendChild(source)
    doc.appendChild(DOCUMENT)

    size = doc.createElement('size')
    width = doc.createElement('width')
    width_text = doc.createTextNode(str(m_width))  # 元素内容写入
    width.appendChild(width_text)
    size.appendChild(width)

    height = doc.createElement('height')
    height_text = doc.createTextNode(str(m_height))
    height.appendChild(height_text)
    size.appendChild(height)

    depth = doc.createElement('depth')
    depth_text = doc.createTextNode(str(m_depth))
    depth.appendChild(depth_text)
    size.appendChild(depth)

    DOCUMENT.appendChild(size)

    segmented = doc.createElement('segmented')
    segmented_text = doc.createTextNode(str(m_segmented))
    segmented.appendChild(segmented_text)
    DOCUMENT.appendChild(segmented)
    doc.appendChild(DOCUMENT)
    with open(name ,encoding='utf-8') as f:
        lines = f.readlines()
        for j, line in enumerate(lines):
            class_id, x, y, w, h = line.strip().split(' ')
            class_id, x, y, w, h = int(class_id), float(x), float(y), float(w), float(h)  # 将字符串类型转为可计算的int和float类型

            m_xmin_0 = (x - w / 2) * m_width  # 坐标转换
            m_ymin_0 = (y - h / 2) * m_height
            m_xmax_0 = (x + w / 2) * m_width
            m_ymax_0 = (y + h / 2) * m_height

            print('m_ymax_0=', m_ymax_0)
            m_name_0 = str(class_id)
            print('m_name_0=', m_name_0)
            object = doc.createElement('object')
            name = doc.createElement('name')
            name_text = doc.createTextNode(m_name_0)
            name.appendChild(name_text)
            object.appendChild(name)

            pose = doc.createElement('pose')
            pose_text = doc.createTextNode(m_pose)
            pose.appendChild(pose_text)
            object.appendChild(pose)

            truncated = doc.createElement('truncated')
            truncated_text = doc.createTextNode(str(m_truncated))
            truncated.appendChild(truncated_text)
            object.appendChild(truncated)

            difficult = doc.createElement('difficult')
            difficult_text = doc.createTextNode(str(m_difficult))
            difficult.appendChild(difficult_text)
            object.appendChild(difficult)

            bndbox = doc.createElement('bndbox')
            xmin = doc.createElement('xmin')
            xmin_text = doc.createTextNode(str(int(m_xmin_0)))
            xmin.appendChild(xmin_text)
            bndbox.appendChild(xmin)

            ymin = doc.createElement('ymin')
            ymin_text = doc.createTextNode(str(int(m_ymin_0)))
            ymin.appendChild(ymin_text)
            bndbox.appendChild(ymin)

            xmax = doc.createElement('xmax')
            xmax_text = doc.createTextNode(str(int(m_xmax_0)))
            xmax.appendChild(xmax_text)
            bndbox.appendChild(xmax)

            ymax = doc.createElement('ymax')
            ymax_text = doc.createTextNode(str(int(m_ymax_0)))
            ymax.appendChild(ymax_text)
            bndbox.appendChild(ymax)
            object.appendChild(bndbox)

            DOCUMENT.appendChild(object)
    new_path_filename = os.path.join(destPath, new_object_name)
    print('new_path_filename=', new_path_filename)
    f = open(new_path_filename, 'w')

    doc.writexml(f, indent='\t', newl='\n', addindent='\t', encoding='utf-8')
    f.close()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

55、记录标注的关键点和目标检测数据集,进行目标检测标注文件和关键点文件分离以及yolov5.txt标注格式转xml数据集 的相关文章

  • C# XML 反序列化。将节点中的所有内部文本读取到字符串属性中

    我目前正在尝试修改我的类 以便我的模型上的文本属性包含某个节点的所有内部文本 text node 给我带来问题的 xml 示例是
  • xml 拉解析器资产 xml

    如何使用拉解析器解析资产文件夹中的本地 XML 文件 我无法让拉解析器工作 它总是抛出 io 异常 我想我无法获取文件的路径或连接到该文件 mixm 我正在尝试各种方法来从 资产 和 资源 加载本地文件 但要按要求回答您的问题 因为其他人似
  • Xslt 到 xsl-fo 转换

    我想将 xslt 转换为 xsl fo 但我不太确定我能做到这一点 我尝试将 XML 列表转换为 xsl fo 列表 谁能告诉我在哪里可以找到我在谷歌上搜索了很长时间没有很多这样的例子 我的XML是这样的 p TEXT p ul li It
  • Android 键盘清单未显示在设置中

    我正在制作我的第一个 Android 应用程序 我需要它作为键盘服务 据我所知 清单看起来不错 并且我有一个文件 WifiJoy java 在 com zwad3 wifijoy 包中 以及所有其他文件
  • 如何使用scrapy抓取xml url

    你好 我正在使用 scrapy 来抓取 xml url 假设下面是我的 Spider py 代码 class TestSpider BaseSpider name test allowed domains www example com s
  • c#Registry to XML无效字符问题

    我在尝试从注册表创建 XML 文件时遇到问题 在我的笔记本电脑 W7 64b 上它工作正常 生成了 xml 文件 但在另一台计算机 Xp 32b 上抛出异常 System ArgumentException 十六进制值 0x00 是无效字符
  • 允许 .NET WebApi 忽略 DOCTYPE 声明

    我正在尝试通过 WebApi 方法将 XML 反序列化为对象 我有以下课程 XmlRoot IsNullable false public class MyObject XmlElement Name public string Name
  • & 在 xml 文件中算作一个还是多个字符?

    我正在使用的 XML 模式具有特定的字符串字符长度 所以我可能有一个类似的字符串 Jim Mary 在 C 中是 10 个字符 但是当它写入 xml 时 它会变成 Jim amp Mary 如果 XML 模式规定字符串最多只能有 10 个字
  • 文本视图不显示全文

    我正在使用 TableLayout 和 TableRow 创建一个简单的布局 其中包含两个 TextView 这是代码的一部分
  • 为 XSD 中的元素指定命名空间

    我有一个 XML 需要为其生成 XSD 我的 XML 如下 实例
  • Eclipse 在处理 xml(传入或传出)时挂起。此时CPU+磁盘尖峰

    我每天必须处理许多 XML 这极大地打断了我的工作流程 我尝试降级到 Indigo 但所有附加组件都被删除 打开xml时出现问题 切换到 xml 切换出一个 xml 甚至切换到另一个 xml 到底发生了什么事情让 XML 如此烦人 我可以禁
  • 将巨大的模式编译成Java

    有两个主要工具提供了将 XSD 模式编译为 Java 的方法 xmlbeans 和 JAXB 问题是 XSD 模式确实很大 30MB 的 XML 文件 大部分模式在我的项目中没有使用 所以我可以注释掉大部分代码 但这不是一个好的解决方案 目
  • 有人可以推荐一个免费的 xslt 工具吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • VBA XML V6.0 如何让它等待页面加载?

    我一直在努力寻找答案 但似乎找不到任何有用的东西 基本上 我是从一个网站上拉取的 当您在该页面上时 该网站会加载更多项目 我希望我的代码在加载完成后提取最终数据 但不知道如何让 XML httprequest 等待 Edited Sub p
  • XML 创建 - 错误:带有替代方案的重载方法构造函数 UnprefixedAttribute

    scala gt val count 7 count Int 7 将其放入 XML 属性中会出现错误 scala gt val x
  • 在 Java 中创建 XML 文件的最佳方法是什么?

    我们目前使用 dom4j 来创建 XML 文件 不过 我猜现在有更好的东西了 如果我们使用的是 Java 1 6 或更高版本 那么在编写 XML 文件时最好使用什么类 运行速度最快 使用简单 我不需要构建一个 DOM 然后编写整个 DOM
  • 使用 GWT 读取非常大的本地 XML 文件

    我正在使用 GWT 构建我的第一个 Java 应用程序 它必须从一个非常大的 XML 文件中读取数据 当我尝试发送对文件中信息的请求时遇到问题 并且我不太确定它是否与文件的大小或我的语义有关 在我的程序中 我有以下内容 static fin
  • CakePHP Xml 实用程序库触发 DOMDocument 警告

    我正在使用 CakePHP 在视图中生成 XMLXML核心库 http book cakephp org 2 0 en core utility libraries xml html xml Xml build data array ret
  • 如何在 Spring 属性中进行算术运算?

  • 如何在Android中解析xml类型的HTTPResponse

    我有一个 Android 应用程序 我使用 POST 方法来获取响应 这是我的代码 HttpResponse httpResponse httpclient execute httppost HttpEntity resEntity htt

随机推荐