Red de conocimiento informático - Aprendizaje de código fuente - Leer cuadros de anotaciones de imágenes y archivos xml del conjunto de datos y generar archivos txt

Leer cuadros de anotaciones de imágenes y archivos xml del conjunto de datos y generar archivos txt

1. Lea la imagen y el archivo xml anotado y escriba la información de la anotación en el archivo txt. El archivo txt generado se encuentra en la carpeta txt y puede usarse directamente para entrenar algoritmos de detección de objetivos como yolo3.

2. El archivo txt contiene la ruta de la imagen, la posición y el tamaño del cuadro de anotación y la categoría de la anotación.

3. Se pueden utilizar imágenes segmentadas y etiquetadas para el reconocimiento de atributos de peatones. Las imágenes segmentadas se guardan en la carpeta de segmentación.

? 1. El conjunto de datos debe colocarse debajo de la ruta del conjunto de datos.

2. Las anotaciones almacenan archivos xml y las imágenes JPEG almacenan imágenes.

Modificación: Es necesario realizar las modificaciones apropiadas según sea necesario. Descripción a continuación:

Primero:

class_tab={

"human":1 ##Esta es una categoría, ¿puedes hacerlo? Agregue varios elementos

}

Segundo:

params={"xml_prefix":"./dataset/Annotations/", ##Esta es la fuente xml El prefijo de ruta del archivo, tenga en cuenta que debe haber "/" al final

"img_prefix":"./dataset/JPEGImages/",##Este es el prefijo de ruta del archivo fuente de la imagen Tenga en cuenta que debe haber "/" al final

"seg_prefix":"./segmentation/",##Este es el prefijo de ubicación donde se almacena la imagen después de la segmentación. Tenga en cuenta que debe haber. ser "/" al final

}

Tercero:

f = open('./txt/train.txt','a') ##Esta es la ruta al archivo de texto generado.

importar sys

#sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')

importar cv2

importar sistema operativo

desde readxml importar *

class_tab={

"humanimport sys

#sys .path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')

importar cv2

importar sistema operativo

desde importación readxml *

class_tab={

"human":1

}

params={"xml_prefix":"./ dataset/Annotations/",

"img_prefix":"./dataset/JPEGImages/",

"seg_prefix":"./segmentation/",

}

def write_line(f, img_path, boxes):

f.write("%s "%(img_path))

para el cuadro en cajas:

? f.write(str(box['cls'])+",")

? f.write(str(box['xmin']+" ,"))

? f.write(str(box['ymin']+","))

? f.write(str(box['xmax'] +","))

? f.write(str(box['ymax']))

? f.write(" ")

f.write("\n")

f.flush()

def segment(img_path, imgname, boxes):

img=cv2.imread (img_path, cv2.IMREAD_COLOR)

cnt=0

para cuadro en cuadros:

? :int(box["ymax"]), int(box["xmin"]):int(box["xmax"]),:]

? ]+imgname+"_"+str(cnt)+".jpg", seg)

? cnt=cnt+1

def main():

f = open('./txt/train.txt','a')

img_list=os.listdir(params["img_prefix"])

para il en img_list :

img_path=params["img_prefix"]+il

tokens=il.split(".")

xml_path=params["xml_prefix"]+tokens[0]+".xml"

if os.path.isfile(img_path)==Falso:

elevar ValueError("¡%s no sale!"%img_path)

else:

print("lectura:", img_path)

boxes= xml_reader(xml_path, class_tab)

write_line(f,img_path,boxes)

segment(img_path, tokens[0], boxes)

f.close( )

if __name__ == '__main__':

main()

":1

}

params={"xml_prefix":"./dataset/Annotations/",

"img_prefix":"./dataset/JPEGImages/",

"seg_prefix":". /segmentación/",

? }

def write_line(f, img_path, boxes):

f.write("%s "%(img_path) )

para cuadro en cuadros:

?write(str(box['cls'])+",")

f.write (str(box['xmin']+","))

?write(str(box['ymin']+","))

? .write(str(box['xmax']+","))

?write(str(box['ymax']))

? (" ")

f.write("\n")

f.flush()

def segmento(img_path, imgname, boxes):

img=cv2.imread(img_path, cv2.IMREAD_COLOR)

cnt=0

para cuadro en cuadros:

seg=? img[int(cuadro['ymin']):int(cuadro["ymax"]), int(cuadro["xmin"]):int(cuadro["xmax"]),:]

? cv2.imwrite(params["seg_prefix"]+imgname+"_"+str(cnt)+".jpg", seg)

? def main():

f = open('./txt/train.txt','a')

img_list=os.listdir(params["img_prefix"])

para il en img_list:

img_path=params["img_prefix"]+il

tokens=il.split(".")

xml_path =params["xml_prefix"]+tokens[0]+".xml"

if os.path.isfile(img_path)==False:

elevar ValueError("%s ¡no sale!"%img_path)

else:

print("lectura:", img_path)

boxes=xml_reader(xml_path, class_tab)

write_line(f,img_path,boxes)

segment(img_path, tokens[0], boxes)

f.close()

if __name__ == '__main__':

main()

desde xml.dom.minidom importar documento

importar xml.etree.ElementTree como ET

def xml_reader(fname, cls_tab):###, classs_merge_list,classes_merged_name):

in_file = open(fname)

tree=ET.parse(in_file)

root = tree.getroot()

boxes=[]

para el elemento en root.iter('item'):

cls = item.find('nombre').text

si cls en cls_tab:

bndbox = item.find('bndbox')

b ={

"xmin": str(int(bndbox.find('xmin').text)),

"ymin": str(int(bndbox.find(' ymin').text)),

"xmax": str(int(bndbox.find('xmax').text)),

"ymax": str(int (bndbox.find('ymax').text)),

"cls": cls_tab[cls]

}

boxes.append(b)

else:

continuar

devolver cuadros

if __name__ == '__main__':

cl?

s_tab={"human":1}

? fname="/home/ta/Downloads/liqiming_label/dataset/Annotations/sa341.xml"

? , cls_tab)

? imprimir(cuadro)