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 hashes)

Uploaded Source

Built Distribution

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

Uploaded Python 3

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