Skip to main content

A Python toolkit to convert between binary segmentation masks and YOLO labels

Project description

Segment Toolkit

A modern, robust, and premium Python package designed to bridge the gap between pixel-level binary segmentation masks and YOLO bounding box labels. It provides a bidirectional pipeline with exception handling, extensive logging, a command-line interface (CLI), and a Python API.


Features

  • Bidirectional Conversion:
    • Forward Pipeline: Convert binary masks to YOLO format labels (supports standard axis-aligned or advanced minimum area rotated bounding boxes).
    • Reverse Pipeline: Reconstruct binary masks from YOLO labels.
  • Automatic Dependency Installer: Missing required packages (numpy, opencv-python, pillow, pandas, matplotlib) are automatically detected and installed via pip upon package import or script execution.
  • Robust Exception Handling: Try-catch blocks wrapped around file I/O, contour finding, and resizing to prevent application crashes on corrupted or missing files.
  • Dynamic Dataset Matching: Read classification mappings (in CSV or JSON format) to automatically assign multi-class IDs matching standard dataset schemas (like the ISIC dataset).
  • YOLO Dataset Splitting: Automatically shuffles and partitions images and labels into training and testing sets with customizable split ratios, creating standard data.yaml configs.
  • Overlay Visualizer: Overlay bounding boxes and class indicators directly onto source images for annotation inspection.
  • Dual Interface: Use as a command-line application (segment-toolkit) or import as a Python library (import segment_toolkit).

Installation

1. Standard Installation (via PyPI)

To install the latest stable version of the package directly from PyPI:

pip install segment-toolkit

2. Local Installation (via Git Clone)

If you want to clone the repository for local development, run:

# Clone the repository
git clone https://github.com/zkzkGamal/mask-to-yolo-toolkit.git

# Navigate into the project folder
cd mask-to-yolo-toolkit

# Install in editable mode
pip install -e .

Usage

1. Command Line Interface (CLI)

The package installs a console script called segment-toolkit.

Convert Masks to YOLO Labels

  • Single File Conversion:

    segment-toolkit mask-to-yolo \
      --image images/ISIC_0024310.jpg \
      --mask mask/ISIC_0024310_segmentation.png \
      --output-txt labels/ISIC_0024310.txt \
      --class-id 4
    
  • Batch Directory Conversion:

    segment-toolkit mask-to-yolo \
      --image-dir images/ \
      --mask-dir mask/ \
      --output-dir labels/ \
      --ground-truth GroundTruth.csv
    
  • Options:

    • --rotated: Use rotated minimum area rectangles (cv2.minAreaRect) instead of standard axis-aligned rectangles.
    • --resize WIDTH HEIGHT: Set target size for image and mask resizing (default: 640 640).

Convert YOLO Labels to Masks

  • Single File Conversion:

    segment-toolkit yolo-to-mask \
      --label labels/ISIC_0024310.txt \
      --output-mask masks_reconstructed/ISIC_0024310_segmentation.png
    
  • Batch Directory Conversion:

    segment-toolkit yolo-to-mask \
      --label-dir labels/ \
      --output-dir masks_reconstructed/
    

Visualize Bounding Boxes

Draw YOLO labels on top of the original image:

segment-toolkit visualize \
  --image images/ISIC_0024310.jpg \
  --label labels/ISIC_0024310.txt \
  --output visualization.png

Split Dataset

Organize folders into YOLO-compliant structure (dataset/train and dataset/test splits) and output data.yaml:

segment-toolkit split \
  --images images/ \
  --labels labels/ \
  --output dataset/ \
  --ratio 0.8 \
  --seed 42

Validation and Demonstration Outputs

To verify the library, we run automated validation on sample datasets. All validation output files (YOLO coordinates, reconstructed masks, and drawing overlays) are stored in the validate_data/ folder.

Validation Overlays

Here are the bounding box overlays generated by the toolkit visualizer:

ISIC Melanoma Skin Lesion Validation

ISIC Validation Overlay

Plant Leaf Disease Validation

Plant Leaf Validation Overlay

Video Demonstration

A video demonstrating installation, CLI commands, and programming API pipelines can be placed in the demo/ directory.


Ground Truth Formats

The --ground-truth parameter in batch conversion supports both CSV and JSON formats.

CSV Format

Assumes the first column contains the image identifier/filename, and the subsequent columns represent binary indicator classes (where 1 indicates class presence). Example GroundTruth.csv:

image,MEL,NV,BCC,AKIEC,BKL,DF,VASC
ISIC_0024306,0,1,0,0,0,0,0
ISIC_0024310,1,0,0,0,0,0,0

JSON Format

Supports three distinct schemas:

  1. Flat Dictionary (Format A): Maps image IDs directly to class integers or class name strings.

    {
      "ISIC_0024306": 5,
      "ISIC_0024310": "MEL"
    }
    
  2. Nested Indicators (Format B): Maps image IDs to dictionaries of binary class indicators.

    {
      "ISIC_0024306": { "MEL": 0, "NV": 1, "BCC": 0 },
      "ISIC_0024310": { "MEL": 1, "NV": 0, "BCC": 0 }
    }
    
  3. List of Records (Format C): A list of objects containing image IDs and class descriptors.

    [
      { "image": "ISIC_0024306", "class_id": 5 },
      { "image": "ISIC_0024310", "MEL": 1, "NV": 0 }
    ]
    

Note: Class name strings (like "MEL", "NV") are automatically mapped to standard ISIC IDs (AKIEC=0, BCC=1, BKL=2, DF=3, MEL=4, NV=5, VASC=6). Custom column names default to index-based IDs.


Python API

Import classes directly into your code to programmatically build custom pipelines:

from segment_toolkit import MaskToYoloConverter, YoloToMaskConverter

# 1. Convert mask to YOLO label
yolo_conv = MaskToYoloConverter(target_size=(640, 640), bbox_type="standard")
yolo_conv.convert_single(
    image_path="images/ISIC_0024310.jpg",
    mask_path="mask/ISIC_0024310_segmentation.png",
    output_txt_path="labels/ISIC_0024310.txt",
    class_id=4
)

# 2. Batch convert a folder of masks with a JSON ground truth
yolo_conv.convert_dataset(
    images_dir="images",
    masks_dir="mask",
    output_labels_dir="labels",
    ground_truth="GroundTruth.json"
)

Technical Details

Coordinate Conversion Math

Bounding Box Center Calculation (Pixel Space)

For standard bounding boxes, the pixel coordinates from boundingRect are (xmin, ymin, w_pixel, h_pixel). $$\text{Center } X \quad x_{center} = x_{min} + \frac{w_{pixel}}{2.0}$$ $$\text{Center } Y \quad y_{center} = y_{min} + \frac{h_{pixel}}{2.0}$$

Coordinate Normalization (YOLO Format)

All coordinates are normalized to the range [0.0, 1.0]: $$x_{norm} = \frac{x_{center}}{img_width}, \quad y_{norm} = \frac{y_{center}}{img_height}$$ $$w_{norm} = \frac{w_{pixel}}{img_width}, \quad h_{norm} = \frac{h_{pixel}}{img_height}$$


Author

Zakria Gamal

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

segment_toolkit-1.0.3.tar.gz (17.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

segment_toolkit-1.0.3-py3-none-any.whl (15.8 kB view details)

Uploaded Python 3

File details

Details for the file segment_toolkit-1.0.3.tar.gz.

File metadata

  • Download URL: segment_toolkit-1.0.3.tar.gz
  • Upload date:
  • Size: 17.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for segment_toolkit-1.0.3.tar.gz
Algorithm Hash digest
SHA256 42552c868fbb7d3252f7c8dc71d639fc05f34faded4a835452cec9edd1c29be4
MD5 18ec1260dcc5b402bdb0626534435151
BLAKE2b-256 878d06a1c6f527762b8e7a0f5323dcdb49e054f103b3ea14e730e20b57ae65cf

See more details on using hashes here.

File details

Details for the file segment_toolkit-1.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for segment_toolkit-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 2f1cfbbe8daaed0c5b87f37b5d28c4576bd82fe94df74a3438b1a23ad1b2689a
MD5 da4d29bb81101e7712d66d692b8a678a
BLAKE2b-256 d6bd8d73bcf1acbd3c53fae341f66830e2d24866a35e6643b2f1d7968cd67607

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page