[PYTHON] Convertir les données au format XML en données au format txt (yolov3)

Préface

Lorsque j'essaie de détecter un objet avec tensorflow en utilisant yolo, les données sont souvent au format xml et ne peuvent pas être appliquées à yolo. Alors faisons-le nous-mêmes.

Code réellement créé et utilisé

import xml.etree.ElementTree as ET
import sys , os
import glob

cate_list = ["Car","Pedestrian","Truck","Signal","Signs","Bicycle","Motorbike","Bus","SVehicle","Train"]

with open("voc_classes.txt","w") as f:
    f.write('\n'.join(cate_list))
    
def class_encord(class_name):
    cate_id = {"Car":0,"Pedestrian":1,"Truck":2,"Signal":3,"Signs":4,"Bicycle":5,"Motorbike":6,"Bus":7,"SVehicle":8,"Train":9}
    return cate_id[class_name]

def convert(data_file,list_file):
    in_file = open(data_file)
    tree = ET.parse(in_file)
    root = tree.getroot()
    for obj in root.iter("item"):
        cate = obj.find("category").text
        cate = cate.lstrip("\n").lstrip("   ")
        cate = cate.rstrip("    ").rstrip("\n")
        category_id = class_encord(cate)
        xmlbox = obj.find("box2d")
        data = [int(float(xmlbox.find("x1").text)),int(float(xmlbox.find("x2").text)),int(float(xmlbox.find("y1").text)),int(float(xmlbox.find("y2").text))]
        list_file.write(" " + ",".join([str(a) for a in data]) + "," + str(category_id))

data_file_list = glob.glob("Annotations/*.xml")

list_file = open("2007_train.txt","w")
for data_file in data_file_list:
    jpg_file = "train_" + data_file.rstrip(".xml") + ".jpg "
    list_file.write(jpg_file)
    convert(data_file,list_file)
    list_file.write("\n")
list_file.close()

Ce n'est pas généralisé, donc c'est très difficile à voir (; ^ ω ^) Je vais lister les paramètres qui peuvent être utilisés en le modifiant

Flux de code

yolo utilise txt avec l'objet, donc affichez-le.

cate_list = ["Car","Pedestrian","Truck","Signal","Signs","Bicycle","Motorbike","Bus","SVehicle","Train"]

with open("voc_classes.txt","w") as f:
    f.write('\n'.join(cate_list))

Une fonction pour encoder le nom et l'id de l'objet.

def class_encord(class_name):
    cate_id = {"Car":0,"Pedestrian":1,"Truck":2,"Signal":3,"Signs":4,"Bicycle":5,"Motorbike":6,"Bus":7,"SVehicle":8,"Train":9}
    return cate_id[class_name]

Une fonction qui convertit les données xml en un fichier txt. Ce que vous faites est aussi simple que de lire avec tml.etree.ElementTree, de récupérer et d'écrire chaque donnée.

def convert(data_file,list_file):
    in_file = open(data_file)
    tree = ET.parse(in_file)
    root = tree.getroot()
    for obj in root.iter("item"):
        cate = obj.find("category").text
        cate = cate.lstrip("\n").lstrip("   ")
        cate = cate.rstrip("    ").rstrip("\n")
        category_id = class_encord(cate)
        xmlbox = obj.find("box2d")
        data = [int(float(xmlbox.find("x1").text)),int(float(xmlbox.find("x2").text)),int(float(xmlbox.find("y1").text)),int(float(xmlbox.find("y2").text))]
        list_file.write(" " + ",".join([str(a) for a in data]) + "," + str(category_id))

Il ne reste plus qu'à le faire.

data_file_list = glob.glob("Annotations/*.xml")

list_file = open("2007_train.txt","w")
for data_file in data_file_list:
    jpg_file = "train_" + data_file.rstrip(".xml") + ".jpg "
    list_file.write(jpg_file)
    convert(data_file,list_file)
    list_file.write("\n")
list_file.close()

La détection d'objets est intéressante (^ ▽ ^) L'organisation des données est difficile.

Recommended Posts

Convertir les données au format XML en données au format txt (yolov3)
Convertir les données au format json en txt (en utilisant yolo)
Convertir le fichier XML au format Pascal VOC en fichier json au format COCO
Conversion de pdf en txt 2 [pyocr]
Comment convertir facilement le format de Markdown
Convertir le graphique matplotlib au format de fichier emf
Convertir des données Excel en JSON avec python
[MNIST] Convertir les données en PNG pour les keras
Convertir les données de la grille en données contenant des lignes (?) À l'aide de pandas
Convertissez des données FX 1 minute en données 5 minutes avec Python
Convertir un PDF joint en courrier électronique au format texte
Convertir le type de date Python au format RFC822
Convertir un document XML stocké dans une base de données XML (BaseX) au format CSV (en utilisant Python)
Convertissez les données avec la forme (nombre de données, 1) en (nombre de données,) avec numpy.
Convertir en HSV
Convertissez l'historique d'utilisation de Suica mobile au format PDF au format pandas Data Frame avec tabula-py
[Introduction à Python] Comment gérer les données au format JSON
Convertir les packages binaires pour Windows au format roue
Convertir une chaîne au format de liste caractère par caractère avec python
Je convertis les données AWS JSON en CSV comme ceci
Comment convertir des données détenues horizontalement en données détenues verticalement avec des pandas
Convertir les articles Qiita au format de publication Jekyll pour la sauvegarde
Convertir / renvoyer des objets de classe au format JSON en Python
Comment convertir des fichiers Json au format CSV ou au format EXCEL
Convertir le fichier de ressources de traduction (.po) au format XLIFF (.xlf)
Convertir 202003 en 2020-03 avec les pandas
Convertir les kanji en kana
Convertir jupyter en py
Convertir keras-yolo3 en ONNX
Convertir dict en tableau
Convertir json en Excel
Convertir les données de maillage exportées de SpriteUV2 dans un format pouvant être importé par Spine
Python / datetime> Implémentation pour convertir le format AAAAMMJJ en AAAA / MM / JJ
Script Linux pour convertir les fichiers Markdown du format JupyterLab au format Qiita
Extraire les informations de classification, etc. des données genbank au format xml
Convertissez les données d'image (png) à portée de main en une image .pbm
[Caffe] Convertit le fichier moyen du format proto binaire au format npy
Convertissez les données météorologiques au format GRIB2 qui ne peuvent pas être ouvertes avec pygrib en netCDF et visualisez-les