xml篇---提取VOC格式的坐标,并按照cameraID进行排序(二)

xml篇—提取VOC格式的坐标,并按照cameraID进行排序(二)

import os
import xml.etree.ElementTree as ET


def parse_xml(xml_file):
    tree = ET.parse(xml_file)
    root = tree.getroot()
    objects = {}
    for obj in root.findall('object'):
        name = obj.find('name').text
        bbox = obj.find('bndbox')
        xmin = int(bbox.find('xmin').text)
        ymin = int(bbox.find('ymin').text)
        xmax = int(bbox.find('xmax').text)
        ymax = int(bbox.find('ymax').text)
        if name not in objects:
            objects[name] = []
        objects[name].append((xmin, ymin, xmax, ymax))
    return objects


def get_camera_id(filename):
    # 从文件中提取摄像头ID
    return filename.split('-')[0]


def main():
    folder_path = '/app/yyq/dataset/profile_materials/camera_point/jiuting_picture/xml'  # 修改为你的XML文件夹路径
    xml_files = [f for f in os.listdir(folder_path) if f.endswith('.xml')]

    # 根据摄像头ID排序文件列表
    xml_files_sorted = sorted(xml_files, key=lambda x: get_camera_id(x))

    cameraid_dict = {}
    links = []

    for xml_file in xml_files_sorted:
        xml_path = os.path.join(folder_path, xml_file)
        objects = parse_xml(xml_path)
        camera_id = xml_file.split('-')[0]

        if "1" in objects:
            cameraid_dict[camera_id] = objects["1"][0] if objects["1"] else None

        if "2" in objects:
            links.append({
                "name": camera_id,
                "box": objects["2"]
            })

    print("CAMERAID_DICT = {")
    for camera_id, bbox in cameraid_dict.items():
        print(f'    "{camera_id}": {bbox},')
    print("}")

    print("\nLINKS = [")
    for link in links:
        print("    {")
        print(f'        "name": "{link["name"]}",')
        print(f'        "box": {link["box"]}')
        print("    },")
    print("]")


if __name__ == '__main__':
    main()

结果如下:

CAMERAID_DICT = {
    "3101171070000000": (700, 396, 874, 614),
    "3101171070000001": (272, 741, 1178, 1080),
}

LINKS = [
    {
        "name": "3101171070000000",
        "box": [(823, 396, 874, 432)]
    },
    {
        "name": "3101171070000001",
        "box": [(888, 739, 1180, 893), (274, 987, 425, 1076)]
    },
]

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用ResNet-50训练自己的数据集(花的种类)

1.数据集处理 具体操作 1.把不同类别的花(或者自己数据集的不同类别)放在不同的文件夹下 2.文件夹名字是花朵类别 代码预处理 # 对数据集进行处理 import os from shutil import copy import randomdef mkfile(file):if not os.path.exists(file):os…

简易计算器

前言 简易计算器,旨在实现一个简单的计算器功能。 整形,浮点型数据的加减乘除运算;数据的统计(如文件中某字符的出现频数);期望,方程运算;平均数,最小值,最大值,中位数…

每日5题Day11 - LeetCode 51 - 55

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;51. N 皇后 - 力扣&#xff08;LeetCode&#xff09; class Solution {public List<List<String>> solveNQueens(int n) {List<List<String>…

揭秘订单排队模式:社交电商新策略

随着移动互联网的蓬勃发展&#xff0c;社交电商正以其独特的魅力席卷全球。据权威机构预测&#xff0c;到2024年&#xff0c;全球社交电商市场规模有望达到惊人的2.8万亿美元。面对如此庞大的市场蛋糕&#xff0c;如何精准把握机遇&#xff0c;实现业务的跨越式增长&#xff0c…

SQL157 平均播放进度大于60%的视频类别

描述 用户-视频互动表tb_user_video_log iduidvideo_idstart_timeend_timeif_followif_likeif_retweetcomment_id110120012021-10-01 10:00:002021-10-01 10:00:30011NULL210220012021-10-01 10:00:002021-10-01 10:00:21001NULL310320012021-10-01 11:00:502021-10-01 11:01…

强大的医院绩效考核管理系统源码,支持行业内所有绩效方案,且每步核算都可自主进行方案的新建、调整。

医院绩效考核管理系统是采用B/S架构模式设计、使用JAVA语言开发、后台使用MySql数据库进行管理的一整套计算机应用软件源码。 系统和his系统进行对接&#xff0c;按照设定周期&#xff0c;从his系统获取医院科室和医生、护士、其他人员工作量&#xff0c;对没有录入信息化系统…

定时调度任务——kettle开发22

一、流查询 流查询在查询前把数据加载到内存中&#xff0c;并且只能进行等值查询。 流查询的操作包括指定数据源&#xff0c;即我们将数据进行流查询的数据源头&#xff0c;如下图所示流查询的数据源是我们的Excel输入-departments&#xff0c;然后我们还需要指定我们进行流查…

手机远程协助,3个方法,开启沟通新篇章

已经不仅仅是一个通讯工具&#xff0c;更是一个多功能的魔法棒。它轻轻一挥&#xff0c;就能让我们跨越千山万水&#xff0c;与亲朋好友、合作伙伴进行亲密无间的交流。今天&#xff0c;就让我们一起探讨如何利用手机远程协助的三大法宝&#xff0c;开启沟通的新篇章&#xff0…

二叉树——堆的实现

一.前言 前面我们讲解了二叉树的概念以及二叉树的存储结构&#xff1a;https://blog.csdn.net/yiqingaa/article/details/139224974?spm1001.2014.3001.5502 今天我们主要讲讲二叉树的存储结构&#xff0c;以及堆的实现。 二.正文 1.二叉树的顺序结构及实现 1.1二叉树的顺序…

手动操作很麻烦?试试这个自动加好友神器吧!

你是不是也觉得手动逐一输入号码或是微信号&#xff0c;再搜索添加很麻烦&#xff1f;试试这个自动加好友神器——个微管理系统&#xff0c;帮助你省去繁琐的手工操作&#xff0c;节省时间和精力。 首先&#xff0c;在系统上登录微信号&#xff0c;无论你有多少个微信号&#…

服务器重装系统与磁盘操作

诱因&#xff1a;服务器原来装的EXSI&#xff0c;现在要重装一个ubuntu server&#xff0c;出现了下面一些问题&#xff0c;在此记录一下。 目录 1、过程中出现的问题&#xff08;2024.5.26&#xff09;1.1 问题1&#xff1a;如何磨掉原来的ESXI&#xff1f;1.2 问题2&#xf…

【Typescript】通过变量的值即可获取变量的类型【typeof 变量】

注意&#xff1a;只要变量的类型准确,则typeof获取变量的类型就不会错 enum Test {a "a0",b "b0" }// 这里的a是一个变量的值 let a: Test.a "a0" as Test.a// 这里的typeof a是一个类型【Test.a】 let x: typeof a Test.a

玩转香橙派 AIpro,高性能AI开发板评测与项目案例分享

公司最近刚忙完一个项目&#xff0c;闲暇之余&#xff0c;看着手里的树莓派、stm32、Esp32又有些手痒了&#xff0c;准备再搞点小项目出来&#xff0c;但一直没有什么好想法。 说来也巧&#xff0c;恰好收到了CSDN官方的OrangePi AIpro测评活动&#xff0c;平时一直都在用树莓…

matplotlib---气泡图

气泡图简介&#xff1a; 气泡图&#xff08;Bubble Chart&#xff09;是一种数据可视化图形&#xff0c;主要用于展示多个数据点之间的关系。 气泡图通过气泡的大小&#xff0c;位置和颜色可以展示数据之间的关系。在气泡图中&#xff0c;横轴和纵轴通常表示数据的两个维度&a…

NoSQL Redis配置与优化

一、关系数据库与非关系型数据库 1. 关系型数据库&#xff1a; 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上&#xff0c;一般面向于记录。 SQL 语句&#xff08;标准数据查询语言&#xff09;就是一种基于关系型…

3d火灾救援模拟仿真培训软件复用性强

消防VR安全逃生体验系统是深圳VR公司华锐视点引入了前沿的VR虚拟现实、web3d开发和多媒体交互技术&#xff0c;为用户打造了一个逼真的火灾现场应急逃生模拟演练环境。 相比传统的消防逃生模拟演练&#xff0c;消防VR安全逃生体验系统包含知识讲解和模拟实训演练&#xff0c;体…

(2024,基于熵的激活函数动态优化,具有边界条件的最差激活函数,修正正则化 ReLU)寻找更优激活函数

A Method on Searching Better Activation Functions 公众号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 3. 动机 4. 方法论 4.1 问题设定 4.1.1 贝叶斯错误率和信息熵 4.1.2 激活…

物业

用户报修 审核专员可以操作&#xff08;前端&#xff09;&#x1f197; 工程部可以看到不可以操作&#xff08;前端&#xff09;&#x1f197; 项目经理可以看到不可以操作&#xff08;前端&#xff09;&#x1f197; 经理可以看到不可以操作&#xff08;前端&#xff09;&…

Kivy 项目51斩百词 6 播放读音

为了给小喇叭图像绑定点击事件&#xff0c;实现当用户点击按钮时&#xff0c;触发该事件对应的回调方法。 在方法内对于不同的系统Kivy使用不同的播放语音方法&#xff0c; 对于Windows系统 使用SoundLoader播放语音&#xff0c; 对于其他的Unix系统 使用Pyjnjus播放…