Leer cuadros de anotaciones de imágenes y archivos xml del conjunto de datos y generar archivos txt
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) p>
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 p>
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)