- compatible with Django, Flask and Qt
- polygon, box, point and oriented ellipse annotations supported
- polygonal labels can have disjoint regions and can be editing using paintng and boolean operations; provided by polybooljs
- can use the DEXTR algorithm to automatically generate polygonal outlines of objects identified by the user with a few clicks; provided by the dextr library
If you want to run django-labeller
on your local machine with minimum fuss and store the image and
label files on your file system, use either the Flask application or the Qt application.
If you want to incorporate django-labeller
into your Django application, use the Django app/plugin as
it provides model classes that store labels in your database, etc.
If you to use the example Django application or use the provided example images, clone it from GitHub and install (recommended):
> git clone https://github.com/Britefury/django-labeller.git
> python setup.py install
To use it as a library, either with Flask or Django, install from PyPI:
> pip install django-labeller
Note:
pip install django-labeller[django]
will also install the Django dependencypip install django-labeller[dextr]
will also install the dextr library
An example Flask-based web app is provided that displays the labelling tool within a web page. To start it, change into the same directory into which you cloned the repo and run:
> python -m image_labelling_tool.flask_labeller
Now open 127.0.0.1:5000
within a browser.
If you want to load images from a different directory, or if you installed from PyPI, tell flask_labeller
where to look:
> python -m image_labelling_tool.flask_labeller --images_pat=<images_directory>/*.<jpg|png>
First, install the dextr library:
> pip install dextr
Now tell the Flask app to enable DEXTR using the --enable_dextr
option:
> python -m image_labelling_tool.flask_labeller --enable_dextr
The above will use the ResNet-101 based DEXTR model trained on Pascal VOC 2012 that is provided by
the dextr library.
If you want to use a custom DEXTR model that you trained for your purposes, use the --dextr_weights
option:
> python -m image_labelling_tool.flask_labeller --dextr_weights=path/to/model.pth
PyQt5
and flask
need to be installed, both of which can be installed using conda
if
using an Anaconda distribution.
Optionally install PyTorch and
the dextr library if you want to use a DEXTR model for
automatically assisted annotation.
A simple Qt-based desktop application allows you to choose a directory of images to label. To start it, change into the same directory into which you cloned the repo and run:
> python -m image_labelling_tool_qt.simple_labeller
A dialog will appear prompting you to choose a directory of images to label. The Enable DEXTR checkbox will enable DEXTR assisted automated labelling. Note that this requires that PyTorch and the dextr library are both installed in your Python environment.
The Qt desktop application uses QWebEngine to show the web-based component in a Qt UI. A Flask server is started in the background that serves the tool HTML, static files and images.
The example Django-based web app provides a little more functionality than the Flask app. It stores the label data in a database (only SQLite in the example) and does basic image locking so that multiple users cannot work on the same image at the same time.
To initialise, first perform migrations:
> python simple_django_labeller/manage.py migrate
Now you need to import a labelling schema. Labelling schemes are stored as JSON files. For now, there is
a special one called demo
that you can use. Load it into a schema named default
:
> python simple_django_labeller/manage.py import_schema default demo
Then populate the database with the example images in the images
directory (replace images
with the path
of another directory if you wish to use different images):
> python simple_django_labeller/manage.py populate images
Then run the app:
> python simple_django_labeller/manage.py runserver
First, install the dextr library and celery:
> pip install dextr
> pip install celery
Now install RabbitMQ, using the appropriate approach for your platform (you could use
a different Celery backend if you don't mind editing settings.py
as needed).
Enable DEXTR within tests/example_labeller_app/settings.py
; change the line
LABELLING_TOOL_DEXTR_AVAILABLE = False
so that LABELLING_TOOL_DEXTR_AVAILABLE
is set to True
.
You can also change the LABELLING_TOOL_DEXTR_WEIGHTS_PATH
option to a path to a custom model, otherwise
the default ResNet-101 based U-net trained on Pascal VOC 2012 provided by the dextr library will be used.
Now run the Django application:
> cd simple_django_labeller
> python manage.py runserver
Now start a celery worker:
> cd simple_django_labeller
> celery -A example_labeller_app worker -l info
Note that Celery v4 and above are not strictly compatible with Windows, but it can work if you run:
> celery -A example_labeller_app worker --pool=solo -l info
Enable the external labelling api within simple_django_labeller/example_labeller_app/settings.py
change the line
LABELLING_TOOL_EXTERNAL_LABEL_API = False
so that LABELLING_TOOL_EXTERNAL_LABEL_API
is set to True
.
you can change the LABELLING_TOOL_EXTERNAL_LABEL_API_URL
option to specify the api endpoint that will return the labels from an image.
the default is 'http://127.0.0.1:3000/get_labels'
which references the the test api found at simple_django_labeller/test_api.py
which is a simple FastAPI used to showcase how the api can be used.
To run the API, first install fastapi and uvicorn:
> pip install fastapi
> pip install "uvicorn[standard]"
Then run the API:
> uvicorn simple_django_labeller.test_api:app --reload --port 3000
Please see the Jupyter notebook Image labeller notebook.ipynb
for API usage. It will show you how to load
labels and render them into class maps, instance maps, or image stacks.
Please see the change log for recent changes.
Incorporates the public domain json2.js library. Uses d3.js, jQuery, popper.js, PolyK, polybooljs, Bootstrap 4, Vue.js v3 and spectrum.js.
This software was developed by Geoffrey French in collaboration with Dr. M. Fisher and Dr. M. Mackiewicz at the School of Computing Sciences at the University of East Anglia as part of a project funded by Marine Scotland.
It is licensed under the MIT license.