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

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

python 复制代码
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()

结果如下:

python 复制代码
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)]
    },
]
相关推荐
_376271531 分钟前
怎样查询不同表的字段差异 information_schema结构对比
jvm·数据库·python
weixin_444012934 分钟前
宝塔面板如何实现网站重定向_配置301永久跳转与域名更换
jvm·数据库·python
m0_733565464 分钟前
CSS如何高效命名样式类_掌握BEM规范提升语义化程度
jvm·数据库·python
woxihuan1234566 分钟前
CSS如何引入自适应图标_利用svg外链配合css控制颜色
jvm·数据库·python
2401_880071407 分钟前
如何正确合并多个 Word 文档(.docx)并保留格式与分页
jvm·数据库·python
wang3zc9 分钟前
MySQL行锁升级为表锁的原因是什么_分析非索引字段查询影响
jvm·数据库·python
2403_8832610910 分钟前
CSS如何制作简单的加载转圈动画_使用keyframe与animation
jvm·数据库·python
m0_7406532210 分钟前
c++ 逆向工程ida pro c++如何使用ida pro插件和脚本
jvm·数据库·python
2401_8844541510 分钟前
golang如何编写Markdown转HTML工具_golang Markdown转HTML工具编写详解
jvm·数据库·python
AI人工智能+电脑小能手11 分钟前
【大白话说Java面试题 第45题】【JVM篇】第5题:JVM中,对象何时会进入老年代?
java·开发语言·jvm·后端·面试