Interfaz de función para analizar el archivo de anotación del conjunto de datos VOC xml

Analice el archivo xml del conjunto de datos VOC y devuelva una cadena directamente, usando espacios para separar la información entre diferentes objetivos. La
categoría se devuelve por el nombre de destino utilizado. Al usarlo, debe convertir la categoría de destino
y prestar atención a el juicio de valor de retorno. Si el valor de retorno está vacío, significa que no hay información de destino.
La función decodeVocAnnotationToStr se puede usar directamente. La entrada es una ruta xml en formato voc, y se emite la información de clase y bbox de todos los objetivos. Para
obtener más información sobre el análisis de archivos xml, consulte el enlace

import os
import xml.etree.ElementTree as ET


def decodeVocAnnotationToStr(voc_xml_path) -> str:
    """
    voc数据集格式的文件解析,将一个文件解析成一个字符串,
    字符串的格式是:x1,y1,x2,y2,class x1,y1,x2,y2,class ...
    使用空格间隔不同对象
    注意:返回的类别不是整型,而是字符串的类别名称
    注意判断返回值是否为 空,如果是空说明没有目标,是一张背景图
    :param voc_xml_path:
    :return:
    """
    assert voc_xml_path.endswith(".xml"), "voc_xml_path must endswith .xml"

    xml_file = open(voc_xml_path, 'r', encoding='utf-8')
    # 打开xml文件,并返回根节点
    root = ET.ElementTree().parse(xml_file)

    # 定义一个列表,专门保存目标
    information = []

    # 查找root节点下所有目标信息
    for obj in root.iter('object'):
        # 目标的名称
        name = obj.find('name').text
        # 目标的bbox坐标,一般voc是保存的corner格式的bbox
        box = obj.find('bndbox')
        xmin = box.find('xmin').text
        ymin = box.find('ymin').text
        xmax = box.find('xmax').text
        ymax = box.find('ymax').text

        # 添加一个目标的信息
        information.append(f"{
      
      xmin},{
      
      ymin},{
      
      xmax},{
      
      ymax},{
      
      name}")

    xml_file.close()
    return " ".join(information)


if __name__ == '__main__':
    # 测试
    path = r"Z:\Datasets\VOC\VOCdevkit\VOC2012\Annotations"
    for file in os.listdir(path)[:100]:
        print(decodeVocAnnotationToStr(os.path.join(path, file)))

Supongo que te gusta

Origin blog.csdn.net/weixin_50727642/article/details/127709819
Recomendado
Clasificación