当前位置: 首页 > article >正文

视觉目标检测标注xml格式文件解析可视化 - python 实现

视觉目标检测任务,通常用 labelimage标注,对应的标注文件为xml。

该示例来源于开源项目:https://gitcode.com/DataBall/DataBall-detections-100s/overview

读取 xml 标注文件,并进行可视化示例如下:

#-*-coding:utf-8-*-
# date:2024-09
# Author: DataBall - Xian
# function: show yolo data of voc format anno

import cv2
import os
import numpy as np
import xml.etree.cElementTree as et
import supervision as sv

if __name__ == "__main__":

    path_data='D:/dataset/img_list/bike/'

    idx = 0
    box_annotator = sv.BoxAnnotator()

    for file in os.listdir(path_data):
        if ".jpg" in file or ".png" in file:
            print(" ->[{}] {}".format(idx,file))
            path_img = path_data + file
            path_label = path_img.replace(".jpg",".xml").replace(".png",".xml")
            if not os.access(path_label,os.F_OK): # 判断标注文件是否存在
                continue
            img = cv2.imread(path_img) # 读取图片

            tree=et.parse(path_label)
            root=tree.getroot()
            for Object in root.findall('object'):
                name=Object.find('name').text # 获取类别名字
                # 获取坐标 xyxy
                bndbox=Object.find('bndbox')
                x1= np.float32((bndbox.find('xmin').text))
                y1= np.float32((bndbox.find('ymin').text))
                x2= np.float32((bndbox.find('xmax').text))
                y2= np.float32((bndbox.find('ymax').text))

                # opencv 方式可视化
                # cv2.rectangle(img, (int(x1),int(y1)), (int(x2),int(y2)), (255,100,100), 2)
                # cv2.putText(img, "{}".format(name), (int(x1),int(y1)),\
                # cv2.FONT_HERSHEY_PLAIN, 2.5, (0, 55, 255), 6)
                # cv2.putText(img, "{}".format(name), (int(x1),int(y1)),\
                # cv2.FONT_HERSHEY_PLAIN, 2.5, (0, 255, 0), 2)

                # sv.BoxAnnotator() 方式可视化
                box_ = np.array([int(x1),int(y1), int(x2),int(y2)]).reshape(-1,4)
                det_ = sv.Detections(xyxy=box_)
                img = box_annotator.annotate(scene=img, detections=det_, labels=[name])

            cv2.namedWindow('image',0)
            cv2.imshow('image',img)
            if cv2.waitKey(30) == 27:
                break
    cv2.destroyAllWindows()

助力快速掌握数据集的信息和使用方式。


http://www.kler.cn/a/373200.html

相关文章:

  • 10.30学习
  • Flutter常用三方库
  • 书生实战营第四期-第三关 Git+InternStudio
  • 100种算法【Python版】第20篇——Aldous-Broder算法
  • ssm基于ssm框架的滁艺咖啡在线销售系统+vue
  • 《贪婪算法实战:寻找最短无序连续子数组的深度解析与实现》
  • 【数据结构】五分钟自测主干知识(十二)
  • 两步GMM计算权重矩阵
  • HTML5新增属性
  • 蓝桥杯练习笔记(十九-质数筛)
  • Github 2024-10-27 php开源项目日报 Top10
  • 【verilog】模十计数器
  • 电商直播带货乱象频出,食品经销商如何规避高额损失?
  • Word 每次打开时都会弹出“要还原的文件”对话框
  • iframe视频宽度高度自适应( pc+移动都可以用,jq写法 )
  • Unity控制物体透明度的改变
  • Matplotlib 网格线
  • PostgreSQL 删除角色
  • 面向对象高级-static
  • 为什么选择 Spring data hadoop
  • 蓝牙BLE开发——红米手机无法搜索蓝牙设备?
  • 编程小白如何成为大神?大学新生的最佳入门攻略
  • QT 12.自定义信号、信号emit、信号参数注册_ev
  • 【Python · Pytorch】人工神经网络 ANN(中)
  • Agile敏捷方法
  • 内存马浅析