Skip to main content

Active Labeling System (ALS) with a PyQt6 GUI and active-learning workflow.

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.

What is new

  • Modular app structure (src/app, src/core, src/features) for cleaner maintenance.
  • Active learning image prioritization when loading folders (unlabeled images first, sorted by uncertainty).
  • Retraining policy engine with multi-signal checks (sample count, time, entropy shift, class balance, confidence drift).
  • Dataset versioning from UI with metadata, hash integrity, and manifest tracking.
  • Label format selection at folder load time: COCO JSON or Plain JSON.
  • Safer persistence:
    • autosave per folder (labels_autosave.json)
    • internal state store (.labels_internal.json)
    • atomic file writes for exports.
  • Improved manual labeling UX:
    • floating toolbox
    • quick class switching (1-9)
    • undo/delete shortcuts
    • inline floating action toolbar.
  • 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.
  • 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 .

Optional: install CUDA-enabled PyTorch for GPU inference/training from https://pytorch.org/get-started/locally/. Users can install it directly with:

pip install Active-Labeling-System

Run the app

After install:

als

Publish to PyPI (GitHub Actions)

This repo includes .github/workflows/publish-pypi.yml.

  1. In PyPI, configure Trusted Publisher for this GitHub repo/workflow:
    • Owner: sairam-s0
    • Repository: ActiveLabelingSystem
    • Workflow: publish-pypi.yml
  2. Bump version in pyproject.toml.
  3. Push a tag like v0.1.1.
  4. GitHub Actions builds and publishes automatically to PyPI.

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:
    • Accept (A)
    • Reject (R)
    • Skip (N)
    • Manual (M)

Active Learning Options

4. Manual mode (box drawing)

Normal GUI

  • Draw boxes by click-drag on canvas.
  • Save boxes and move next with:
    • Space or Enter -> save and next
    • Esc -> exit manual mode
    • Ctrl+Z -> undo last box
    • 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.1.0.tar.gz (56.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.1.0-py3-none-any.whl (65.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: active_labeling_system-0.1.0.tar.gz
  • Upload date:
  • Size: 56.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for active_labeling_system-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a3267e7fac0f3f184a0ea19b9c863fe6fbd7654a234e42b08425730e3e013539
MD5 6ec6ef88882f702b9f88b807d9b2f93b
BLAKE2b-256 711b425fc1867003b5e2403fe6813578e3071362990d86d7a34285c5f0a9903e

See more details on using hashes here.

Provenance

The following attestation bundles were made for active_labeling_system-0.1.0.tar.gz:

Publisher: publish-pypi.yml on sairam-s0/ActiveLabelingSystem

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

File hashes

Hashes for active_labeling_system-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bedb49d6cfa3dafbd119e63753b0e3bbbe547b676e9ede7d23814e73a541a518
MD5 3fa3370a05bef4a6bbb71e554be2af64
BLAKE2b-256 d99f3282f12edc44188f0492c9e2ddbed2165cd713dfe2d093c3a8d7af669dc9

See more details on using hashes here.

Provenance

The following attestation bundles were made for active_labeling_system-0.1.0-py3-none-any.whl:

Publisher: publish-pypi.yml on sairam-s0/ActiveLabelingSystem

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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