Я использую xml для описания ограничивающих рамок и намереваюсь отфильтровать некоторые элементы XML-файлов. Типичный XML может выглядеть так:
<annotation>
<folder>original2</folder>
<filename>beach146.jpg</filename>
<path>/home/train/original/beach146.jpg</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>800</width>
<height>533</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>person</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>314</xmin>
<ymin>315</ymin>
<xmax>559</xmax>
<ymax>400</ymax>
</bndbox>
</object>
<object>
<name>boat</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>580</xmin>
<ymin>193</ymin>
<xmax>602</xmax>
<ymax>205</ymax>
</bndbox>
</object>
</annotation>
Я применяю некоторые проверки координат bbox и при необходимости удаляю object
, содержащий соответствующий bbox.
Я получал доступ к координатам, используя что-то вроде:
xmin = int(obj.find('bndbox').find('xmax').text)
но это кажется неловким и уродливым, поэтому я переключился на:
xmin = int(obj[4][0].text)
что немного лучше. obj
взято из objs = tree.findall('object')
, поэтому его можно даже оптимизировать, применяя те же индексы к корню, как:
print(root[7][4][0].tag, root[7][4][0].text)
xmin 580
Мой вопрос заключается в том, является ли система индексации согласованной и будет ли работать должным образом в каждом XML-файле. Это означает, что он вернет элементы в том порядке, в котором они записаны в файле, например. Предполагается, что мои xml-файлы имеют одинаковый порядок элементов. В другом случае следует проверить obj[4][0].tag
, чтобы убедиться, что я работаю с ожидаемым элементом.