Ultralytics YOLO27: Entre na lista de espera.
Licenciar o YOLO
Voltar ao glossário da Ultralytics

XML

XML é um formato de texto que aninha etiquetas personalizadas numa árvore de dados estruturados. A sua sintaxe, esquemas, anotações PASCAL VOC e comparação com JSON e YAML.

XML (Linguagem de Marcação Extensível) é um formato de texto para dados estruturados, no qual etiquetas personalizadas se aninham umas dentro das outras para formar uma árvore, como um elemento <size> que contém <width> e <height>. O World Wide Web Consortium publicou o XML 1.0 como Recomendação em fevereiro de 1998, enquanto subconjunto simplificado de SGML (Linguagem de Marcação Generalizada Padrão) para intercâmbio de documentos e dados na Web. Ao contrário do HTML, o XML não tem etiquetas predefinidas: cada aplicação define as suas próprias etiquetas para indicar o significado dos dados, razão pela qual tantos formatos de ficheiro se baseiam nele, desde gráficos SVG e feeds RSS a documentos do Microsoft Office. Na aprendizagem automática e na visão computacional, o XML surge sobretudo em ficheiros de anotação, ficheiros de modelos e sistemas de saúde e empresariais que fornecem dados de treino.

Sintaxe e validação de XML#

Um documento XML tem exatamente um elemento raiz. Os elementos podem conter texto, elementos subordinados e atributos escritos na etiqueta de abertura, como em <box label="car" xtl="10">, e os espaços de nomes declarados com xmlns mantêm separadas as etiquetas de vocabulários diferentes. Um documento que respeite as regras de sintaxe, com todas as etiquetas fechadas, elementos corretamente aninhados e valores de atributos entre aspas, é bem formado, e os analisadores têm de parar no primeiro erro de boa formação. Um documento também é válido quando corresponde a um esquema, escrito como uma Definição de Tipo de Documento (DTD) ou um Esquema XML (XSD), que enumera os elementos permitidos, a respetiva ordem e os tipos de dados. Expressões XPath como size/width selecionam nós da árvore, e folhas de estilo XSLT transformam um vocabulário XML noutro.

XML na visão computacional e na aprendizagem automática#

O desafio PASCAL VOC, realizado entre 2005 e 2012, tornou o XML o formato clássico de anotação para a deteção de objetos. Cada imagem tem um ficheiro XML com o nome e as dimensões do ficheiro e um elemento <object> por objeto, que contém o nome da classe, as flags truncated e difficult, e um elemento <bndbox> cujos cantos em píxeis xmin, ymin, xmax e ymax definem a caixa delimitadora. A ferramenta de anotação LabelImg guarda este formato por predefinição, por isso muitos conjuntos de dados ainda o incluem e precisam de conversão durante o pré-processamento dos dados. A exportação CVAT for images 1.1 do CVAT armazena todas as anotações de uma tarefa num único ficheiro XML, com caixas escritas como atributos, por exemplo xtl, ytl, xbr e ybr.

XML também descreve modelos e registros. A Representação Intermediária do OpenVINO da Intel armazena as camadas e conexões de uma rede em um arquivo .xml e seus pesos em um arquivo .bin correspondente; os detectores de rosto em cascata Haar pré-treinados do OpenCV são distribuídos em XML. Os registros de saúde HL7 FHIR, que projetos de IA clínica combinam com imagens para análise de imagens médicas, podem ser trocados como XML ou JSON; arquivos do Word e Excel são arquivos ZIP de partes XML que sistemas de IA leem.

Este exemplo analisa uma anotação VOC com o ElementTree integrado no Python e converte cada caixa no centro, largura e altura normalizados do formato de etiquetas YOLO:

import xml.etree.ElementTree as ET

# A PASCAL VOC annotation: one XML file per image, one <object> per box
voc = """
<annotation>
  <filename>000017.jpg</filename>
  <size><width>480</width><height>364</height><depth>3</depth></size>
  <object><name>person</name><difficult>0</difficult>
    <bndbox><xmin>185</xmin><ymin>62</ymin><xmax>279</xmax><ymax>199</ymax></bndbox></object>
  <object><name>horse</name><difficult>0</difficult>
    <bndbox><xmin>90</xmin><ymin>78</ymin><xmax>403</xmax><ymax>336</ymax></bndbox></object>
</annotation>
"""
root = ET.fromstring(voc)
w, h = int(root.find("size/width").text), int(root.find("size/height").text)

# Convert corner pixels to YOLO's normalized center x, center y, width, height
for obj in root.iter("object"):
    box = obj.find("bndbox")
    x1, y1, x2, y2 = (float(box.find(k).text) for k in ("xmin", "ymin", "xmax", "ymax"))
    cx, cy = ((x1 + x2) / 2 - 1) / w, ((y1 + y2) / 2 - 1) / h  # VOC pixel indices start at 1
    print(obj.find("name").text, f"{cx:.3f} {cy:.3f} {(x2 - x1) / w:.3f} {(y2 - y1) / h:.3f}")

Imprime person 0.481 0.356 0.196 0.376 e horse 0.511 0.566 0.652 0.709: as mesmas duas caixas, expressas como frações do tamanho da imagem, prontas para serem escritas como linhas de rótulos após os respetivos índices de classe. O ficheiro do conjunto de dados VOC.yaml da Ultralytics executa esta conversão automaticamente na primeira utilização, transferindo os conjuntos VOC 2007 e 2012, analisando todas as anotações XML com ElementTree, ignorando os objetos marcados como difficult e escrevendo rótulos YOLO .txt para 16 551 imagens de treino e 4 952 imagens de validação.

XML versus JSON versus YAML#

  • JSON: Objetos, matrizes, cadeias de caracteres, números e valores booleanos, com sintaxe mais leve que XML e mapeamento direto para dicionários Python e objetos JavaScript. APIs web e as anotações do conjunto de dados COCO usam esse formato.
  • YAML: Utiliza indentação em vez de etiquetas de fecho, permite comentários e, desde o YAML 1.2, aceita qualquer documento JSON. Por isso, é popular para ficheiros de configuração editados manualmente, como os ficheiros de conjuntos de dados e modelos YOLO.
  • XML: Mais verboso, com esquemas, espaços de nomes, atributos e conteúdo misto — isto é, texto com marcação integrada —, o que o torna adequado para documentos e organismos de normalização que exigem validação rigorosa.

Analisar XML não fiável#

A funcionalidade de entidades do XML permite que um documento defina texto reutilizável, e os atacantes abusam dela. No ataque «billion laughs», cerca de dez definições de entidades aninhadas, cada uma a referenciar dez vezes a anterior, expandem um ficheiro de algumas centenas de bytes para gigabytes de texto. Um ataque de entidade externa XML (XXE) declara uma entidade que aponta para um ficheiro local ou URL interno, levando um analisador vulnerável a ler segredos para o documento ou a enviar pedidos a partir do interior da rede. O xml.etree.ElementTree do Python não expande entidades externas e gera um erro de análise quando encontra uma; o respetivo analisador Expat resiste a ataques «billion laughs» desde a versão 2.4.1. O pacote defusedxml vai mais longe e gera EntitiesForbidden para qualquer declaração de entidade, interna ou externa.

Explore as soluções

Visão computacional no desporto

Visão computacional no desporto

Descubra como o Ultralytics YOLO impulsiona a visão computacional no esporte com rastreamento de jogadores e bolas, análise de desempenho, insights para treinadores e reabilitação de atletas.
Saiba mais
Visão computacional para imagens aéreas

Visão computacional para imagens aéreas

Transforma imagens de drones e aéreas em informações em tempo real para a agricultura, a aquacultura, a conservação e a análise geoespacial com Ultralytics YOLO.
Saiba mais
Visão computacional no setor aeroespacial

Visão computacional no setor aeroespacial

Aplica visão computacional na indústria aeroespacial com Ultralytics YOLO para inspecionar aeronaves, detetar objetos estranhos na pista (FOD), apoiar operações aeroportuárias em terra e detetar defeitos em materiais compósitos.
Saiba mais
Visão computacional na segurança

Visão computacional na segurança

Protege todas as instalações com os modelos Ultralytics YOLO. A IA visual permite monitorizar perímetros, detetar ameaças, reconhecer matrículas e melhorar a segurança no local de trabalho.
Saiba mais
Visão computacional na robótica

Visão computacional na robótica

Potencia máquinas mais inteligentes com os modelos Ultralytics YOLO. A IA visual na robótica permite navegação autónoma, perceção, rastreamento de objetos e controlo em tempo real.
Saiba mais
Visão computacional na logística

Visão computacional na logística

Otimize a logística com os modelos Ultralytics YOLO. A IA de visão permite inspecionar pacotes, fazer triagem, rastrear veículos e monitorar a segurança em tempo real nos armazéns.
Saiba mais
Visão computacional no varejo

Visão computacional no varejo

Reinvente o varejo com os modelos Ultralytics YOLO. A IA de visão permite rastrear o estoque, monitorar prateleiras, gerenciar filas e obter insights mais inteligentes sobre clientes.
Saiba mais
Visão computacional na área da saúde

Visão computacional na área da saúde

Desenvolva soluções de saúde com os modelos Ultralytics YOLO. A IA de visão na área da saúde permite obter imagens médicas mais rapidamente, diagnósticos mais inteligentes e monitoramento de pacientes.
Saiba mais
Visão computacional na manufatura

Visão computacional na manufatura

Otimize a manufatura com modelos Ultralytics YOLO. A IA visual impulsiona o controle de qualidade, a detecção de defeitos, a conformidade com o uso de EPI e a automação da linha de montagem.
Saiba mais
Visão computacional no setor automotivo

Visão computacional no setor automotivo

Aplique visão computacional no setor automotivo com modelos Ultralytics YOLO. A IA visual aumenta a segurança viária, aprimora a assistência ao condutor e viabiliza a automação de veículos para estradas mais inteligentes.
Saiba mais
Visão computacional na agricultura

Visão computacional na agricultura

Leve a IA de visão à agricultura inteligente com os modelos Ultralytics YOLO. Aprimore o monitoramento de plantações, o rastreamento de animais e a agricultura de precisão para obter safras maiores e mais inteligentes.
Saiba mais

Vamos construir juntos o futuro da IA!

Comece sua jornada rumo ao futuro do aprendizado de máquina