All Projects → gereleth → jupyter-bbox-widget

gereleth / jupyter-bbox-widget

Licence: BSD-3-Clause License
A Jupyter widget for annotating images with bounding boxes

Programming Languages

python
139335 projects - #7 most used programming language
Svelte
593 projects
typescript
32286 projects
javascript
184084 projects - #8 most used programming language
HTML
75241 projects

Projects that are alternatives of or similar to jupyter-bbox-widget

Label Studio
Label Studio is a multi-type data labeling and annotation tool with standardized output format
Stars: ✭ 7,264 (+38131.58%)
Mutual labels:  image-annotation, annotations, labeling-tool, data-labeling
Pixie
Pixie is a GUI annotation tool which provides the bounding box, polygon, free drawing and semantic segmentation object labelling
Stars: ✭ 52 (+173.68%)
Mutual labels:  image-annotation, bounding-boxes, labeling-tool
Labelbox
Labelbox is the fastest way to annotate data to build and ship computer vision applications.
Stars: ✭ 1,588 (+8257.89%)
Mutual labels:  image-annotation, bounding-boxes, labeling-tool
annotate
Create 3D labelled bounding boxes in RViz
Stars: ✭ 104 (+447.37%)
Mutual labels:  annotations, bounding-boxes, labeling-tool
Cvat
Powerful and efficient Computer Vision Annotation Tool (CVAT)
Stars: ✭ 6,557 (+34410.53%)
Mutual labels:  image-annotation, annotations, labeling-tool
Alturos.ImageAnnotation
A collaborative tool for labeling image data for yolo
Stars: ✭ 47 (+147.37%)
Mutual labels:  image-annotation, bounding-boxes, labeling-tool
Hello-Kaggle-Guide-KOR
Kaggle을 처음 접하는 사람들을 위한 문서
Stars: ✭ 140 (+636.84%)
Mutual labels:  jupyter, notebook
Form-Labeller
Use this tool to label forms, bounding boxes, and assigning types to annotations
Stars: ✭ 17 (-10.53%)
Mutual labels:  annotations, labeling-tool
clustergrammer2-notebooks
Examples using Clustergrammer2 to explore high-dimensional datasets.
Stars: ✭ 35 (+84.21%)
Mutual labels:  jupyter, notebook
label-studio-frontend
Data labeling react app that is backend agnostic and can be embedded into your applications — distributed as an NPM package
Stars: ✭ 230 (+1110.53%)
Mutual labels:  image-annotation, labeling-tool
observable-jupyter
Embed visualizations and code from Observable notebooks in Jupyter
Stars: ✭ 27 (+42.11%)
Mutual labels:  jupyter, notebook
Odysis
Jupyter Interactive Widgets library for 3-D mesh analysis
Stars: ✭ 15 (-21.05%)
Mutual labels:  jupyter, jupyter-widget
sage-binder-env
A SageMath-based computing environment for binder
Stars: ✭ 17 (-10.53%)
Mutual labels:  jupyter, notebook
python ml tutorial
A complete tutorial in python for Data Analysis and Machine Learning
Stars: ✭ 118 (+521.05%)
Mutual labels:  jupyter, notebook
ipychart
The power of Chart.js with Python
Stars: ✭ 48 (+152.63%)
Mutual labels:  jupyter, notebook
biojupies
Automated generation of tailored bioinformatics Jupyter Notebooks via a user interface.
Stars: ✭ 96 (+405.26%)
Mutual labels:  jupyter, notebook
SimpleVideoAnnotation
A simple video annotation made with python + OpenCV for detection in YoloV2 format
Stars: ✭ 13 (-31.58%)
Mutual labels:  annotations, bounding-boxes
pytest-notebook
A pytest plugin for regression testing and regenerating Jupyter Notebooks
Stars: ✭ 35 (+84.21%)
Mutual labels:  jupyter, notebook
colab-badge-action
GitHub Action that generates "Open In Colab" Badges for you
Stars: ✭ 15 (-21.05%)
Mutual labels:  jupyter, notebook
ipymarkup
NER, syntax markup visualizations
Stars: ✭ 108 (+468.42%)
Mutual labels:  jupyter, jupyter-widget

Binder

jupyter_bbox_widget

A Jupyter widget for annotating images with bounding boxes. See a live demo on Binder.

from jupyter_bbox_widget import BBoxWidget
widget = BBoxWidget(
    image='fruit.jpg',
    classes=['apple', 'orange', 'pear'],
)
widget

UI example

Create, edit, move, resize and delete bounding box annotations using the mouse.

Use widget.bboxes to get current annotations values:

widget.bboxes
# [{'x': 377, 'y': 177, 'width': 181, 'height': 201, 'label': 'apple'},
#  {'x': 219, 'y': 142, 'width': 169, 'height': 171, 'label': 'orange'},
#  {'x': 43,  'y': 174, 'width': 234, 'height': 195, 'label': 'pear'}]

You can also assign to widget.bboxes to display any annotations. For example, use the output of an object detection model to do model-assisted labeling.

widget.bboxes = [
    {'x': 377, 'y': 177, 'width': 181, 'height': 201, 'label': 'apple'},
    {'x': 219, 'y': 142, 'width': 169, 'height': 171, 'label': 'orange'},
    {'x': 43,  'y': 174, 'width': 234, 'height': 195, 'label': 'pear'}
]

Fruit photo by Umanoide on Unsplash

Installation

You can install using pip:

pip install jupyter_bbox_widget

If you are using Jupyter Notebook 5.2 or earlier, you may also need to enable the nbextension:

jupyter nbextension enable --py [--sys-prefix|--user|--system] jupyter_bbox_widget

Usage

Create and edit annotations with the mouse

  • click and drag to create a bbox
  • click and drag corners or edges to resize a bbox
  • click and drag inside a bbox to move it
  • in order to change a label select a new label below the image and click on label text

Keyboard shortcuts

When you click inside the widget area it will gain focus and start receiving keyboard events. An outline usually indicates that the element is focused. Normal Jupyter keyboard shortcuts won't work in this state. To unfocus the widget area click outside it or press Esc.

Some shortcuts act on the selected bbox. New bboxes are selected automatically when created. You can also select a bbox by clicking on it. Selected bbox is displayed on top of others and with a thicker border.

  • Digit keys 1-9 and 0 select a class label.
  • Esc unfocuses the widget
  • Enter is the same as pressing Submit button
  • Space is the same as pressing Skip button
  • Tab / Shift-Tab select next/previous bbox.
  • Keys acting on the selected bbox (assuming a QWERTY keyboard, other layouts should use any keys in the same locations):
    • W move up
    • A move left
    • S move down
    • D move right
    • Q shrink width
    • E grow width
    • R grow height
    • F shrink height
    • C assign selected class label
    • Holding Shift while pressing movement keys will increase step size

Skip and Submit events

You can define functions that will be called automatically when you press Skip or Submit buttons. This is useful for creating a workflow for annotating multiple images.

def skip():
    # move on to the next image
def save():
    # do stuff to save current annotations

widget.on_skip(skip)
widget.on_submit(save)

There is an example of a simple annotation workflow in examples/introduction.ipynb notebook.

View only mode

You can disable editing of annotations by setting widget.view_only = True. This is useful for viewing annotation outputs without accidentally changing them.

Recording additional data

Sometimes you need to record more info about an object than just a location and a class label. For example, you might want to specify whether the object is in focus or blurred, record its size or other properties.

Let's say we want to apply a rating on a scale from 1 to 5 to every object in the image. We create a slider widget to edit the rating values:

w_rating = widgets.IntSlider(value=3, min=1, max=5, description='Rating')

And we attach it to the bbox widget.

widget.attach(w_rating, name='rating')

As a result all bboxes created afterwards will have a rating property and the w_rating widget can be used to display and manipulate the rating of the currently selected bbox.

Any number and any kind of ipywidgets widgets may be used in this way for creating richer annotations - number inputs, text inputs, checkboxes and so on (see widget list).

The notebook in examples/introduction.ipynb has an example and a more detailed explanation of this feature.

Development Installation

This project was inspired by a blogpost Creating Reactive Jupyter Widgets With Svelte and was created based on widget-svelte-cookiecutter template.

# First install the python package. This will also build the JS packages.
pip install -e .

When developing your extensions, you need to manually enable your extensions with the notebook / lab frontend. For lab, this is done by the command:

jupyter labextension install @jupyter-widgets/jupyterlab-manager --no-build
jupyter labextension install .

For classic notebook, you can run:

jupyter nbextension install --sys-prefix --symlink --overwrite --py jupyter_bbox_widget
jupyter nbextension enable --sys-prefix --py jupyter_bbox_widget

Note that the --symlink flag doesn't work on Windows, so you will here have to run the install command every time that you rebuild your extension. For certain installations you might also need another flag instead of --sys-prefix, but we won't cover the meaning of those flags here.

How to see your changes

Typescript:

To continuously monitor the project for changes and automatically trigger a rebuild, start Jupyter in watch mode:

jupyter lab --watch

And in a separate session, begin watching the source directory for changes:

npm run watch

After a change wait for the build to finish and then refresh your browser and the changes should take effect.

Python:

If you make a change to the python code then you will need to restart the notebook kernel to have it take effect.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].