Skip to main content

A Python library for computer vision annotation tasks using Dash

Project description

Dash Annotate CV - A dash library for computer vision annotation tasks

dash_annotate_cv is a Python Dash library for computer vision annotation tasks. It exposes reusable annotation components in a library format for dash.

Example of whole-image label annotations

Example of bounding box annotations

Supported tasks:

  • Annotation of images (whole image labels)
  • Annotating multiple labels per image
  • Annotating bounding boxes including labels

Roadmap for future tasks:

  • Support for more annotation formats: YOLO, COCO, etc.
  • Support for image segmentation tasks.
  • Support for skeleton annotation tasks.
  • Annotating video events
  • Annotating video tags

Note: this library is not meant for production usage. It is meant to be used for quick prototyping and testing of annotation tasks.

Getting started

  1. (Recommended) Create a new conda environment.

    conda create -n dash_annotate_cv python=3.11
    conda activate dash_annotate_cv
    
  2. Install using pip:

    pip install dash_annotate_cv
    

    Or local install from the repository:

    git clone https://github.com/smrfeld/dash-annotate-cv 
    cd dash-annotate-cv
    pip install -e .
    
  3. Run the example as described next.

Examples

The app can be launched in two ways:

  1. A simple command line utility lets you get up and running quickly.
  2. The app can be launched by writing a short Python script, which lets you use the annotation components in a flexible way in your own Dash app. We follow the practices of resuable components in Dash described in All-in-one components for Dash.

Each is described here briefly. You can also check out the examples.

Command line utility

To get started labeling immediately, you can use a simple command line utility. You just need to write a config YAML file. You can see the examples directory for more examples - as simple example is as follows:

# Annotation mode
# image_labels = Annotate images with whole-image labels
# bboxs = Annotate bounding boxes in each image
mode: image_labels

# Label source
label_source:
  labels:
  - astronaut
  - camera
  - cat

# Image source
image_source:

  # Image source type
  source_type: list_of_files

  # List of files
  list_of_files:
  - ex_chelsea.jpg
  - ex_astronaut.jpg
  - ex_camera.jpg

# Storage (optional)
storage:
  storage_type: json
  json_file: example.json

# Options (optional)
options:

  # How many labels can be selected per image
  selection_mode: single

To launch the app, simply run:

dacv conf.yml

Navigate to the default address http://127.0.0.1:8050/ in your browser to use the app.

Use dacv -h for a complete list of options. Or check out the examples directory for more examples.

Python

You can use the library in your own Dash app. This is recommended as a more flexible way to create your own annotation interface. The following example shows how to use the library to annotate images with labels.

# Import the library
import dash_annotate_cv as dac

# Other imports
from dash import Dash, html
import dash_bootstrap_components as dbc
from skimage import data

# Load some images
images = [ ("chelsea",data.chelsea()), ("astronaut",data.astronaut()), ("camera",data.camera()) ] # type: ignore
images_pil = [ (name,Image.fromarray(image)) for name,image in images ]

# Set up the image and label sources
image_source = dac.ImageSource(images=images_pil)
label_source = dac.LabelSource(labels=["astronaut", "camera", "cat"])

# Set up writing
storage = dac.AnnotationStorage(storage_types=[dac.StorageType.JSON], json_file="annotations.json")

app = Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])
app.layout = dbc.Container([
    html.H1("Annotate Images"),
    dac.AnnotateImageLabelsAIO(label_source, image_source, annotation_storage=storage)
    ])
app.run(debug=True)

The result is shown in the gif above. Check out the examples directory for more examples.

Loading the annotations & format

Loading the annotations is as simple as:

with open("annotations.json","r") as f:
    annotations = dac.ImageAnnotations.from_dict(json.load(f))

See the ImageAnnotations class for more information on the format.

Dev

Some useful references:

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

dash_annotate_cv-0.1.9.tar.gz (23.9 kB view details)

Uploaded Source

Built Distribution

dash_annotate_cv-0.1.9-py3-none-any.whl (26.0 kB view details)

Uploaded Python 3

File details

Details for the file dash_annotate_cv-0.1.9.tar.gz.

File metadata

  • Download URL: dash_annotate_cv-0.1.9.tar.gz
  • Upload date:
  • Size: 23.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for dash_annotate_cv-0.1.9.tar.gz
Algorithm Hash digest
SHA256 c8f7fdd4881527fcededc19e2b42cd6c3d8c86fbde57c328942d0b2087f204a3
MD5 5489224b020bbe01c88f1ebbc892c7eb
BLAKE2b-256 9c104e9331b0aad5f08c7d01186567313229f0bb47e832e7bc482bef4a1276a3

See more details on using hashes here.

File details

Details for the file dash_annotate_cv-0.1.9-py3-none-any.whl.

File metadata

File hashes

Hashes for dash_annotate_cv-0.1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 34c6a3bdadb89ed1038855b63ac0bf3965d6bc016131398ae49d3fd292c1240f
MD5 86d3b2c647f910881ca5f107811e2174
BLAKE2b-256 953bf88c65601b8e0d6b5fe7bd5ebc7070c7242868cdea1d6dae8e839b746034

See more details on using hashes here.

Supported by

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