Skip to main content

Automatic + manual YOLO bounding box annotation tool (GUI + console)

Project description

annobel

Automatic + manual YOLO-format bounding box annotation tool with a Tkinter GUI (editor) and console fallback.

Version: 0.0.2 (Alpha)

Overview

annobel streamlines creating and refining object detection datasets. It wraps Ultralytics YOLOv8 models for optional automatic bounding box proposal, then lets you refine or create labels manually. The tool stores annotations in standard YOLO text format (class x_center y_center width height, normalized values).

Main Features

  • Automatic annotation (detection) using Ultralytics YOLOv8 model variants or local weights.
  • Manual drawing, moving, resizing, deleting bounding boxes.
  • Class list management (add / rename) saved to a classes.txt file.
  • Autosave after every modification.
  • Console fallback when tkinter is not present.
  • Per-image navigation and keyboard shortcuts.
  • Optional subset filtering of detection classes.
  • Non-destructive: detection stage creates / overwrites only label files.

Installation

pip install annobel

Dependencies

  • Python >= 3.8
  • ultralytics (YOLO) – installed automatically.
  • pillow for image handling.

Quick Start (CLI)

After installation:

annobel

You will be prompted (GUI or console fallback) to choose:

  1. Mode: Automatic Annotation (YOLO) or Manual Annotation / Editing.
  2. Image & label directories.
  3. (Auto mode) model selection (download variant or local path) and optional class subset.

Labels are saved as <image_stem>.txt in the labels directory. A classes.txt is created/updated as needed.

Programmatic Usage

from annobel import run  

run(
    images_dir="/path/to/images",
    mode="auto",                 # or "manual"
    model_path="yolov8n.pt",      # only needed for auto mode
    conf=0.25,
    classes_filter_ids=[0, 2],    # optional subset
)

For full interactive loop (menu reappears after exiting editor):

from annobel import main
main()

Directory Structure (Generated)

images/
  img001.jpg
  img002.jpg
labels/
  img001.txt
  img002.txt
  classes.txt

YOLO Label Format Recap

Each line: class_id x_center y_center width height with all coordinates normalized to [0,1] relative to image width/height.

Keyboard & Mouse Shortcuts (Editor)

  • A: Add mode
  • E: Edit mode
  • C: Change class of selected box
  • M: Manage classes dialog
  • Delete: Remove selected box
  • ← / →: Previous / next image
  • Q: Return to main menu
  • I: Print info about current boxes
  • Mouse (Add mode): Click-drag to draw box
  • Mouse (Edit mode): Drag box interior to move; handles to resize; right-click to delete

Recommended Workflow

  1. Place raw images into an images directory.
  2. Run auto mode with a YOLO model (e.g., yolov8n.pt) to bootstrap labels.
  3. Inspect & refine with manual editor (resize, delete, add boxes, change classes).
  4. Iterate until dataset is satisfactory.

Ultralytics Notice & Licensing

This package depends on the external ultralytics project for YOLO model loading and inference. Key points:

  • Ultralytics repository: https://github.com/ultralytics/ultralytics
  • Their code / weights are subject to the AGPL-3.0 license by default and/or alternative commercial terms offered by Ultralytics. See their LICENSE and documentation for the authoritative terms.
  • This package does NOT bundle or redistribute model weights; it only invokes the YOLO API when you request detection.
  • If you deploy or integrate this in a network service or commercial product, ensure you meet the obligations of the Ultralytics license (e.g., providing source, offering access, or acquiring a commercial license if required).

You (the end user) are solely responsible for verifying that your intended use of the models and resulting annotations complies with applicable licenses and data privacy regulations.

Contributing

  1. Fork repository
  2. Create a feature branch: git checkout -b feature/awesome
  3. Install dev extras: pip install -e .[dev]
  4. Run linters / tests: flake8, black --check ., pytest
  5. Submit PR

Versioning / Changelog

  • 0.0.1: Initial packaged release (renamed to annobel)

Roadmap Ideas

  • Export to COCO format
  • Integrated image augmentation preview
  • Polygon / segmentation support
  • Multi-threaded batch detection
  • Custom hotkey configuration
  • Dark / light UI themes

Security / Privacy

Images are processed locally. No images or labels are uploaded by this package. Be cautious with sensitive imagery and model weight redistribution restrictions.

Disclaimer

Provided "AS IS" under AGPL-3.0-or-later. No warranty of fitness for a particular purpose. Always validate annotations before using for training.

License

  • This package: AGPL-3.0-or-later (see LICENSE)
  • Ultralytics YOLO: AGPL-3.0 (or commercial) – external dependency

© 2025 Sayali Dongre

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

annobel-0.0.2.tar.gz (52.7 kB view details)

Uploaded Source

Built Distribution

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

annobel-0.0.2-py3-none-any.whl (38.5 kB view details)

Uploaded Python 3

File details

Details for the file annobel-0.0.2.tar.gz.

File metadata

  • Download URL: annobel-0.0.2.tar.gz
  • Upload date:
  • Size: 52.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for annobel-0.0.2.tar.gz
Algorithm Hash digest
SHA256 a04785cda02908be35f90416de947fcd18e2bbc3ae3f05aaff59608496c0916c
MD5 56cf7f1593db4bc6e8fc6f250d79fbfa
BLAKE2b-256 b201453678f5b3efdac545b9b44ef8ec3a5dbc591d406310c01a5276a981e9b8

See more details on using hashes here.

File details

Details for the file annobel-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: annobel-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 38.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for annobel-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 239bcb332a829e59deadf040fda6b774a8f499c00a5edf75d4c7ff262c335202
MD5 bb1f5d464e26dd3213a118c70493a4c7
BLAKE2b-256 f25c9219886943cb10f4c021e509d110a8d6e8de37d39ec9aa6c82115a6985f8

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