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)]
    },
]
相关推荐
星空椰15 小时前
Python 面向对象高级:继承与类定义详解
开发语言·python
白露与泡影15 小时前
2026大厂Java面试题大全!牛客网最新版
java·开发语言
凯瑟琳.奥古斯特16 小时前
高阶子查询题目精炼
开发语言·数据库·python·职场和发展·数据库开发
风之所往_16 小时前
Python 3.4 新特性全面总结
python
雪度娃娃16 小时前
转向现代C++——在意为改写的函数添加 override
开发语言·c++
太阳上的雨天16 小时前
任何格式的文件转Markdown
python·ai
yaoxin52112317 小时前
419. 现代 Java IO 最佳实践 - 写入文本文件
java·windows·python
喵星人工作室17 小时前
C++火影忍者1.1.2
开发语言·c++
weixin_4684668517 小时前
纳米 AI 搜索新手极速上手指南
人工智能·python·深度学习·搜索引擎·ai·语言模型·自然语言处理
凯瑟琳.奥古斯特17 小时前
数据库原理选择题精选
数据库·python·职场和发展