Skip to main content

Polygon Pascal VOC Writer

A simple python module to generate Pascal VOC XML image annotation files.
Currently only supports bounding-boxes and polygons.

Improved upon AndrewCarterUK's Pascal VOC Writer.


Installation

$ pip install polygon-pascalvoc-writer

Importing:

from polygon_pascalvoc_writer import VocWriter

Table of Contents


Example Execution

For a single image

back to Contents

Write annotation for myImage.png (width: 100, height: 150) :

from polygon_pascalvoc_writer import VocWriter

images_dir = "dir/images/"
annotations_dir = "dir/annotations/"
image_name = "myImage.png"
writer = VocWriter(images_dir, annotations_dir, image_name)

# Rectangular bounding box
box_name = "myLabelBox"
xmin, ymin, xmax, ymax = 1, 2, 3, 4
writer.addBndBox(box_name, xmin, ymin, xmax, ymax)

# 1st polygon
polygon_1_name = "myPolygon"
vertices_1 = [
    [1, 2],
    [3, 4],
    [5, 6]
]
writer.addPolygon(polygon_1_name, vertices_1)

# 2nd polygon
polygon_2_name = "myPolygon"
vertices_2 = [
    [10, 20],
    [30, 40],
    [50, 60]
]
writer.addPolygon(polygon_2_name, vertices_2)

# Write to XML file in VOC format
writer.save()

Output file, dir/annotation/myImage.xml :

<annotation>
    <folder>images</folder>    
    <filename>myImage.png</filename>
    <path>absolutePathTo/dir/images/myImage.png</path>
    <source>
        <database>Unknown</database>
    </source>
    <size>
        <width>100</width>
        <height>150</height>
        <depth>3</depth>
    </size>
    <segmented>0</segmented>
    <object>
        <name>myLabelBox</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>1</xmin>
            <ymin>2</ymin>
            <xmax>3</xmax>
            <ymax>4</ymax>
        </bndbox>
    </object>
    <object>
        <name>myPolygon</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <polygon>
            <x1>1</x1>
            <y1>2</y1>
            <x2>3</x2>
            <y2>4</y2>
            <x3>5</x3>
            <y3>6</y3>
        </polygon>
        <bndbox>
            <xmin>1</xmin>
            <ymin>2</ymin>
            <xmax>5</xmax>
            <ymax>6</ymax>
        </bndbox>
    </object>
    <object>
        <name>myPolygon</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <polygon>
            <x1>10</x1>
            <y1>20</y1>
            <x2>30</x2>
            <y2>40</y2>
            <x3>50</x3>
            <y3>60</y3>
        </polygon>
        <bndbox>
            <xmin>10</xmin>
            <ymin>20</ymin>
            <xmax>50</xmax>
            <ymax>60</ymax>
        </bndbox>
    </object>
</annotation>

For a folder of images

back to Contents

Write annotation for image1.png and image2.png :

from polygon_pascalvoc_writer import VocWriter

images_dir = "dir/images/"
annotations_dir = "dir/annotations/"
writer = VocWriter(images_dir, annotations_dir, "")

list_of_annotations = [
    {
        "image_name": "image1.png",
        "polygons": [
            [
                [1, 2],
                [3, 4],
                [5, 6]
            ],
            [
                [10, 20],
                [30, 40],
                [50, 60]
            ]
        ]
    },
    {
        "image_name": "image2.png",
        "polygons": [
            [
                [7, 8],
                [9, 10],
                [11, 12]
            ],
            [
                [70, 80],
                [90, 100],
                [110, 120]
            ]
        ]
    }
]
for annotation in list_of_annotations:
    # Clears the label data, then sets the image with
    # name matching annotation["image_name"] as the current working image.
    # Doesn't save the label data. Saving is done by writer.save()
    writer.nextImage(annotation["image_name"])  
    
    for polygon_vertices in annotation["polygons"]:
        writer.addPolygon("polygon_name", polygon_vertices)

    # Write to XML file in VOC format
    writer.save()

Resulting directories:

dir
├── images
|   ├── image1.png
|   └── image2.png
└── annotations
    ├── image1.xml
    ├── image2.xml

Release files for polygon-pascalvoc-writer 1.0.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for polygon-pascalvoc-writer 1.0.5
File Size Uploaded
polygon-pascalvoc-writer-1.0.5.tar.gz 4.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for polygon-pascalvoc-writer 1.0.5
File Interpreter ABI Platform
polygon_pascalvoc_writer-1.0.5-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 10.0 kB

Release files / polygon-pascalvoc-writer-1.0.5.tar.gz

Download URL polygon-pascalvoc-writer-1.0.5.tar.gz
Size 4.5 kB
Tags Source
SHA-256 checksum
How to use checksums
25fa23bd5ae09304a26dc3953a6a9069dc0df9c0b49cab52ba1f5c7e19f9aacb
BLAKE2b-256 checksum
How to use checksums
837bda7c21ca60d946ae58142a687adc9ec8f793409ff5616c57151a2a192b63
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.7.12

Release files / polygon_pascalvoc_writer-1.0.5-py2.py3-none-any.whl

Download URL polygon_pascalvoc_writer-1.0.5-py2.py3-none-any.whl
Size 5.5 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
4d8cff1966f12d5b9b299af6cc108933f02972ba787bd045d35591d424eef0e9
BLAKE2b-256 checksum
How to use checksums
3cae48e750d859d6d259cfc2b925f4a7f28ac832ed4922f0f685261cff5c8978
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.7.12

Release history Release notifications | RSS feed

This release

1.0.5 This release

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page