Skip to main content

Active Labeling System v2 with PyQt6, YOLO active learning, and manual labeling tools.

Project description

ActiveLabelingSystem

Formerly known as LabelOps.

Local-first AI-assisted image labeling with active learning, manual box tools, background retraining, and dataset version snapshots.

New features and updates

  • New Feature: Freehand region labeling for polygon-style segmentation in manual mode.
  • New Feature: Manual toolbox mode switch between bounding boxes and freehand regions, with highlight toggling and point undo.
  • New Feature: Active learning strategy selector with Uncertainty, Margin, Diversity, and Balanced modes.
  • New Feature: Previous-image navigation and auto-accepted image log from the review bar.
  • Update: Modular app structure (src/app, src/core, src/features) for cleaner maintenance.
  • Update: Active learning image prioritization when loading folders (unlabeled images first, sorted by uncertainty).
  • Update: Retraining policy engine with multi-signal checks (sample count, time, entropy shift, class balance, confidence drift).
  • Update: Dataset versioning from UI with metadata, hash integrity, and manifest tracking.
  • Update: Label format selection at folder load time: COCO JSON or Plain JSON.
  • Update: Safer persistence:
    • autosave per folder (labels_autosave.json)
    • internal state store (.labels_internal.json)
    • atomic file writes for exports.
  • Update: Improved manual labeling UX:
    • floating toolbox
    • box and freehand region modes
    • quick class switching (1-9)
    • undo/delete/point-undo shortcuts
    • inline floating action toolbar.
  • Update: Better training controls in UI:
    • force retrain
    • live queue/training status
    • shadow model promotion with validation warning flow.

Features

Active learning and triage

  • Entropy-aware detection metadata is attached to predictions.
  • Folder loading prioritizes unlabeled images for high-value review.
  • Replay buffer preserves historical samples for continual learning.

Retraining workflow

  • Background training via Ray shadow trainer.
  • Training trigger policy requires minimum sample count plus at least one urgency signal.
  • Promotion flow supports validation and explicit override confirmation.

Dataset versioning

  • Create version snapshots from current labels.
  • Stores YOLO-style labels, copied images, metadata, and a dataset hash.
  • Keeps lineage and latest pointer in src/datasets/manifest.json.

Label export

  • Plain JSON output (labels.json) for direct app consumption.
  • COCO JSON output (labels_coco.json) for downstream ML pipelines.

Manual labeling mode

  • Draw boxes directly on the canvas.
  • Draw freehand regions as polygon segmentations.
  • Per-box class assignment with deterministic class colors.
  • Save-and-next loop without leaving manual mode.

Project structure

ActiveLabelingSystem/
  images/
  src/
    app/
      window.py
      dialogs.py
      state.py
      actions.py
    core/
      data_manager.py
      entropy.py
      sample_selector.py
      retrain_policy.py
      dataset_versioner.py
      replay_buffer.py
      shadow_trainer.py
      training_orchestrator.py
      model_manager.py
      feedback_validator.py
    features/
      manual.py
      shortcut_manager.py
      shortcut_config.py
      toolbar_manager.py
      toolbar_widget.py
      toolbar_styles.py
    datasets/
    models/
    main.py
    requirements.txt
    run_tests.bat
  README.md
  GUID.md

Installation

git clone https://github.com/sairam-s0/ActiveLabelingSystem.git
cd ActiveLabelingSystem
python -m venv .venv
# Windows
.venv\Scripts\activate
# Linux/macOS
# source .venv/bin/activate

pip install .

Users can install it directly with:

pip install Active-Labeling-System

Run the app

After install, run the bootstrap/setup command first:

als

This command:

  • runs run_tests.bat on Windows
  • checks Python and runtime dependencies
  • installs missing packages automatically
  • detects GPU hardware
  • installs CUDA-enabled PyTorch automatically for NVIDIA GPUs
  • falls back to CPU mode for unsupported GPU setups

After setup completes, start the GUI with:

als --start

How to use

1. Select image folder and output format

  • Click Select Folder.
  • Choose output format:
    • COCO JSON -> writes labels_coco.json
    • Plain JSON -> writes labels.json
  • The app also keeps internal state in .labels_internal.json and autosave in labels_autosave.json inside the selected folder.

Folder Selection Format Selection

2. Select classes

  • Click Select Classes.
  • Pick one or more classes.
  • Add custom classes from the same dialog when needed.

Class Selection

3. Start labeling

  • Click START.
  • Review detections and use bottom actions:
    • Previous (P)
    • Accept (A)
    • Reject (R)
    • Skip (N)
    • Manual (M)
    • Log

Active Learning Options

4. Manual mode (box drawing)

Normal GUI

  • Draw boxes by click-drag on canvas.
  • Switch to Freehand Region in the manual toolbox to draw polygon regions.
  • In freehand mode, click points to build a region, then double-click, right-click, or click Finish Region to close it.
  • Use Highlight On/Off to control shape fill visibility while editing.
  • Save boxes and move next with:
    • Space or Enter -> save and next
    • Esc -> exit manual mode
    • Ctrl+Z -> undo last box
    • Backspace -> undo last freehand point
    • Delete -> delete last box
    • 1..9 -> switch class index

Manual Labelling

5. Monitor active learning and training

  • Left panel shows:
    • entropy of current image
    • queue size
    • training progress/status.
  • Use Force Retrain if you want to bypass normal policy checks (still requires minimum samples).

Dataset Statistics

6. Version and promote

  • Create Version creates a dataset snapshot in src/datasets/v_YYYYMMDD_HHMMSS/.
  • List Versions shows stored versions and metadata.
  • Promote Shadow promotes trained candidate model to active model.

Output files and artifacts

For each selected image folder:

  • labels.json or labels_coco.json (selected format)
  • .labels_internal.json (internal metadata store)
  • labels_autosave.json (session recovery)

Notes

  • If Ray is unavailable, labeling still works; background training features are reduced.
  • If class mapping is not available yet, trainer creation waits until first labels are saved.
  • Restart app after model promotion for a clean reload of active weights.

Contributing

Please read CONTRIBUTING.md.

License

MIT. See LICENSE.

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

active_labeling_system-0.2.1.tar.gz (71.0 kB view details)

Uploaded Source

Built Distribution

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

active_labeling_system-0.2.1-py3-none-any.whl (81.5 kB view details)

Uploaded Python 3

File details

Details for the file active_labeling_system-0.2.1.tar.gz.

File metadata

  • Download URL: active_labeling_system-0.2.1.tar.gz
  • Upload date:
  • Size: 71.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for active_labeling_system-0.2.1.tar.gz
Algorithm Hash digest
SHA256 8c9a741aa21afa2dfab0a865013789958d9c2b9d265cd8e4350651e5bc066ba0
MD5 06cd077873ce7aef131237703720a08b
BLAKE2b-256 804114f90d38affa41a9823888e6b0e844fd845beb6af1b8e7f40168dde37bcb

See more details on using hashes here.

File details

Details for the file active_labeling_system-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for active_labeling_system-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5f4c5ae74ee77221326407fad0d3a18272557d2e39fa2e2516f31ee9d78dbe2f
MD5 dbe68aeb16424295e098263e8d6d76cd
BLAKE2b-256 cf87a9eaacac56d6228ae9fc3bb27f53fc439bbd9b391f744b3c93c2cd8fb021

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