ターゲット検出xmlファイル変換ライン

機能

この関数は、行によって、XMLデータラインにプログラムデータを変換することです。

概略的なXML:

<annotation>
	<folder></folder>
	<filename>0.jpg</filename>
	<path>D:\tttt\任务\东\0.jpg</path>
	<source>
		<database>Unknown</database>
	</source>
	<size>
		<width>720</width>
		<height>1280</height>
		<depth>3</depth>
	</size>
	<segmented>0</segmented>
	<object>
		<name>car</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>122</xmin>
			<ymin>264</ymin>
			<xmax>335</xmax>
			<ymax>532</ymax>
		</bndbox>
	</object>
	<object>
		<name>car</name>
		<pose>Unspecified</pose>
		<truncated>1</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>547</xmin>
			<ymin>599</ymin>
			<xmax>720</xmax>
			<ymax>910</ymax>
		</bndbox>
	</object>
	<object>
		<name>car</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>453</xmin>
			<ymin>317</ymin>
			<xmax>586</xmax>
			<ymax>501</ymax>
		</bndbox>
	</object>
	<object>
		<name>car</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>443</xmin>
			<ymin>97</ymin>
			<xmax>592</xmax>
			<ymax>281</ymax>
		</bndbox>
	</object>
</annotation>

変換を模式的結果:

imgs/0.jpg 122,264,335,532,6 547,599,720,910,6 453,317,586,501,6 443,97,592,281,6
imgs/100.jpg 165,295,314,532,6 433,160,649,540,6
imgs/1000.jpg 135,278,345,556,6 355,666,653,1066,6 575,242,694,375,6 575,148,685,238,6

コード:

import xml.etree.ElementTree as ET
import os

classes = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"]


inAddr = 'imgs/'
anno_in_Addr = 'annotations/%s'
anno_out_Addr = 'train.txt'

jpg_addrs_generator = os.walk(inAddr)
_,_,jpg_addrs = next(jpg_addrs_generator)

outfile = open(anno_out_Addr, 'w')

for jpg_addr in jpg_addrs:
    xml_addr = jpg_addr.replace('.jpg','.xml')
    xml_addr = anno_in_Addr%(xml_addr)
    print(jpg_addr,xml_addr)
    writeStr = inAddr+jpg_addr
    tree=ET.parse(xml_addr)
    root = tree.getroot()
    for obj in root.iter('object'):
        difficult = obj.find('difficult').text
        cls = obj.find('name').text
        if cls not in classes or int(difficult)==1:
            continue
        cls_id = classes.index(cls)
        xmlbox = obj.find('bndbox')
        b = (int(xmlbox.find('xmin').text), int(xmlbox.find('ymin').text), int(xmlbox.find('xmax').text), int(xmlbox.find('ymax').text))
        boxStr = " %d,%d,%d,%d,%d"%(b[0],b[1],b[2],b[3],cls_id)
        writeStr += boxStr
    #print(writeStr)
    writeStr = writeStr + '\n'
    outfile.write(writeStr)
outfile.close()
公開された36元の記事 ウォンの賞賛0 ビュー20000 +

おすすめ

転載: blog.csdn.net/weixin_38102912/article/details/100671567