[PYTHON] Konvertieren Sie die XML-Datei im Pascal-VOC-Format in die JSON-Datei im COCO-Format

Konvertieren Sie die XML-Datei im Pascal-VOC-Format in die JSON-Datei im COCO-Format

Der größte Teil des Codes lautet Convert-Pascal-VOC-to-COCO (Github) Ich lenke es ab.

Aus persönlichen Gründen musste ich einen Datensatz im COCO-Format verwenden, um die Objekterkennung zu erlernen. Die bisher vom Annotation Tool erstellten Trainingsdaten können jedoch nicht sofort in der XML-Datei im Pascal VOC-Format verwendet werden. Beim Konvertieren eines Datasets im Pascal-VOC-Format in ein Dataset im COCO-Format liegen nur wenige Informationen vor.

Vielleicht wurde ich einfach nicht gefunden. ..

Python-Code

Konvertiert alle XML-Dateien im Verzeichnis ./annotation/ und gibt sie in einer JSON-Datei (train.json) aus.

Der Name der Kategorie ist Racket, Player ,,, aber bitte schreiben Sie es entsprechend den Daten neu.

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

Konvertieren Sie die XML-Datei im Pascal-VOC-Format in die JSON-Datei im COCO-Format
So konvertieren Sie Json-Dateien in das CSV- oder EXCEL-Format
Konvertieren Sie Daten im XML-Format in Daten im TXT-Format (yolov3)
Konvertieren Sie Daten im JSON-Format in txt (mit yolo)
Schlechter Beitrag zur Verwendung von "animeface-2009" in Python und Implementierung der Funktion zur Ausgabe in eine XML-Datei im PASCAL VOC-Format
Konvertieren Sie json in Excel
So konvertieren Sie eine JSON-Datei mit Python Pandas in eine CSV-Datei
Konvertieren / Zurückgeben von Klassenobjekten in das JSON-Format in Python
Analysieren Sie die JSON-Datei zum Objekt
Konvertieren Sie die Genbank-Datei in die GFF-Datei
[Caffe] Konvertiert die mittlere Datei vom binären Proto-Format in das npy-Format
Konvertieren Sie das Tweepy Status-Objekt in JSON
In der XML-Datenbank (BaseX) gespeichertes XML-Dokument in das CSV-Format konvertieren (mit Python)
[Python] So konvertieren Sie eine Datenbankdatei in CSV
So konvertieren Sie das Format einfach aus Markdown
Skript zum Generieren eines Verzeichnisses aus einer JSON-Datei
So konvertieren Sie Python in eine exe-Datei
[Python] Konvertieren Sie CSV-Dateibegrenzer in Tabulatortrennzeichen
Konvertieren (komprimieren) formatierte JSON-Zeichenfolge in einzeiliges JSON
Konvertieren Sie die psd-Datei in Python in png
Konvertieren Sie Excel-Daten mit Python in JSON
Konvertieren Sie ein Array (struct) mit golang in json
Konvertieren Sie den Python-Datumstyp in das RFC822-Format
Konvertieren Sie die YouTube-Wiedergabeliste in eine lokale Datei im m3u-Format für den Smplayer (per Toy Tool).
[Tensorflowjs_converter] So konvertieren Sie das Tensorflow-Modell in das Format Tensorflow.js
So erstellen Sie eine JSON-Datei in Python
Konvertieren Sie die SVG-Datei mit Python in png / ico
[Einführung in Python] Umgang mit Daten im JSON-Format
Konvertieren Sie mehrere JPG-Dateien in eine PDF-Datei
Konvertieren Sie Binärpakete für Windows in das Radformat
Konvertieren Sie die Zeichenfolge mit Python in ein zeichenweises Listenformat