[PYTHON] Convertir le fichier XML au format Pascal VOC en fichier json au format COCO

Convertir le fichier XML au format Pascal VOC en fichier json au format COCO

La plupart du code est Convert-Pascal-VOC-to-COCO (github) Je le détourne.

Pour des raisons personnelles, j'ai dû utiliser un jeu de données au format COCO pour apprendre la détection d'objets. Cependant, les données d'apprentissage créées jusqu'à présent par l'outil d'annotation ne peuvent pas être utilisées immédiatement dans le fichier xml au format Pascal VOC. Il y a peu d'informations lors de la conversion d'un jeu de données au format Pascal VOC en un jeu de données au format COCO.

Peut-être que je n'ai tout simplement pas été retrouvé. ..

Code Python

Convertit tous les fichiers xml sous le répertoire ./annotation/ et les génère dans un fichier json (train.json).

Le nom de la catégorie est raquette, joueur ,,, mais veuillez le réécrire en fonction des données.

XML2JSON.py


import os
import glob
import xml.etree.ElementTree as ET
import xmltodict
import json
from xml.dom import minidom
from collections import OrderedDict

def XML2JSON(xmlFiles):
    attrDict = dict()
    attrDict["categories"]=[{"supercategory":"none","id":1,"name":"racket"},
                    {"supercategory":"none","id":2,"name":"player"},
                    {"supercategory":"none","id":3,"name":"tennisball"},
                    {"supercategory":"none","id":4,"name":"umpire"},
                {"supercategory":"none","id":5,"name":"ballperson"},
                {"supercategory":"none","id":6,"name":"camera"},
                {"supercategory":"none","id":7,"name":"player"},
                {"supercategory":"none","id":8,"name":"tv"},
                {"supercategory":"none","id":9,"name":"smartphone"}
                  ]
    images = list()
    annotations = list()
    image_id = 0
    for file in xmlFiles:    
        image_id = image_id + 1      
        annotation_path=file
        image = dict()
        doc = xmltodict.parse(open(annotation_path).read(), force_list=('object'))
        image['file_name'] = str(doc['annotation']['filename'])
        image['height'] = int(doc['annotation']['size']['height'])
        image['width'] = int(doc['annotation']['size']['width'])
        image['id'] = image_id
        print ("File Name: {} and image_id {}".format(file, image_id))
        images.append(image)
        id1 = 1
        if 'object' in doc['annotation']:
            for obj in doc['annotation']['object']:
                for value in attrDict["categories"]:
                    annotation = dict()          
                    if str(obj['name']) == value["name"]:
                        annotation["iscrowd"] = 0
                        annotation["image_id"] = image_id
                        x1 = int(obj["bndbox"]["xmin"])  - 1
                        y1 = int(obj["bndbox"]["ymin"]) - 1
                        x2 = int(obj["bndbox"]["xmax"]) - x1
                        y2 = int(obj["bndbox"]["ymax"]) - y1                         
                        annotation["bbox"] = [x1, y1, x2, y2]
                        annotation["area"] = float(x2 * y2)
                        annotation["category_id"] = value["id"]
                        annotation["ignore"] = 0
                        annotation["id"] = id1
                        annotation["segmentation"] = [[x1,y1,x1,(y1 + y2), (x1 + x2), (y1 + y2), (x1 + x2), y1]]
                        id1 +=1
                        annotations.append(annotation)

            else:
                print("File: {} doesn't have any object".format(file))

        else:
            print("File: {} not found".format(file))
            

    attrDict["images"] = images    
    attrDict["annotations"] = annotations
    attrDict["type"] = "instances"

    jsonString = json.dumps(attrDict)
    with open("train.json", "w") as f:
        f.write(jsonString)


path="./annotations/"
trainXMLFiles=glob.glob(os.path.join(path, '*.xml'))
XML2JSON(trainXMLFiles)

Recommended Posts

Convertir le fichier XML au format Pascal VOC en fichier json au format COCO
Comment convertir des fichiers Json au format CSV ou au format EXCEL
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)
Mauvais message pour utiliser "animeface-2009" en Python et implémentation de la fonction pour générer un fichier XML au format PASCAL VOC
Convertir json en Excel
Comment convertir un fichier JSON en fichier CSV avec Python Pandas
Convertir / renvoyer des objets de classe au format JSON en Python
Analyser le fichier JSON en objet
Convertir le fichier genbank en fichier gff
[Caffe] Convertit le fichier moyen du format proto binaire au format npy
Convertir l'objet Statut Tweepy en JSON
Convertir un document XML stocké dans une base de données XML (BaseX) au format CSV (en utilisant Python)
[Python] Comment convertir un fichier db en csv
Comment convertir facilement le format de Markdown
Script pour générer un répertoire à partir d'un fichier json
Comment convertir Python en fichier exe
[Python] Convertit les délimiteurs de fichier csv en délimiteurs de tabulation
Convertir (compresser) une chaîne de caractères JSON formatée en JSON 1 ligne
Convertir un fichier psd en png en Python
Convertir des données Excel en JSON avec python
Convertir un tableau (struct) en json avec golang
Convertir le type de date Python au format RFC822
convertir la playlist youtube en fichier au format m3u local pour smplayer (par outil jouet)
[Tensorflowjs_converter] Comment convertir le modèle Tensorflow au format Tensorflow.js
Comment créer un fichier JSON en Python
Convertir un fichier svg en png / ico avec Python
[Introduction à Python] Comment gérer les données au format JSON
Convertissez plusieurs fichiers jpg en un seul fichier PDF
Convertir les packages binaires pour Windows au format roue
Convertir une chaîne au format de liste caractère par caractère avec python