Skip to main content

Yet another data labeling tool

Project description

QSL: Quick and Simple Labeler

QSL Screenshot

QSL is a simple, open-source image labeling tool. It supports:

  • Bounding box and polygon labeling.
  • Configurable keyboard shortcuts for labels.
  • Loading images stored locally, on the web, or in cloud storage (currently only AWS S3).
  • Pre-loading images in a queue to speed up labeling.
  • Deployment as shared service with support for OAuth (currently only GitHub and Google)

Please note that that QSL is still under development and there are likely to be major bugs, breaking changes, etc. Bug reports and contributions are welcome!

Getting Started

Install qsl using pip install qsl. You cannot install qsl directly from the GitHub repository because the frontend assets must be built manually.

You can start a simple project labeling files from your machine using a command like the following.

qsl simple-label path/to/files/*.jpg my-qsl-project.json

Note that if my-qsl-project.json already exists and has files in it, these files will be added (the old files will still be in the project). If it does not exist, an empty project file will be created.

You can navigate to the the QSL labeling interface in a browser at http://localhost:5000 (use the --host and --port flags to modify this). From the interface, click the link to Configure project to set which labels you want to apply to images. Labels can be applied at the image or box level. There are three kinds of labels you can use:

  • Single: You select 0 or 1 entry from a list of options.
  • Multiple: You select 0 or more entries from a list of options.
  • Text: A free-form text field.

After configuring the project, you can immediately start labeling single images from the main project page. When you're done (or just want to pause) hit Ctrl+C at the prompt where you started QSL. The labels will be available in my-qsl-project.json. You can parse this yourself pretty easily, but you can also save yourself the trouble by using the data structures within QSL. For example, the following will load the image- and box-level labels for a project into a pandas dataframe.

import pandas as pd
import qsl.types.web as qtw

with open("my-qsl-project.json", "r") as f:
    project = qtw.Project.parse_raw(f.read())

image_level_labels = pd.DataFrame(project.image_level_labels())
box_level_labels = pd.DataFrame(project.box_level_labels())

Labeling Remotely Hosted Files

Note that QSL also supports labeling files hosted remotely in cloud storage (only AWS S3 is supported right now) or at a public URL. So, for example, if you want to label some files in an S3 bucket and on a web site, you can use the following command:

qsl simple-label 's3://my-bucket/images/*.jpg' 's3://my-bucket/other/*.jpg' 'http://my-site/image.jpg' my-qsl-project.json

Please note that paths like this must meet some criteria.

  • On most platforms / shells, you must use quotes (as shown in the example).
  • Your AWS credentials must be available in a form compatible with the default boto3 credential-finding methods and those credentials must be permitted to use the ListBucket and GetObject actions.

Advanced Use Cases

Documentation for the more advanced use cases is not yet available though they are implemented in the package. Advanced use cases include things like:

  • Hosting a central QSL server with multiple users and projects
  • Authentication with Google or GitHub OAuth providers
  • Batched labeling for images with shared default labels

In short, you can launch a full-blown QSL deployment simply by doing the following.

  1. Set the following environment variables to configure the application.
    • DB_CONNECTION_STRING: A database connection string, used to host the application data. If not provided, a SQLite database will be used in the current working directory called qsl-labeling.db.
    • OAUTH_INITIAL_USER: The initial user that will be an administrator for the QSL instance.
    • OAUTH_PROVIDER: The OAuth provider to use (currently github and google are supported)
    • OAUTH_CLIENT_SECRET: The OAuth client secret.
    • OAUTH_CLIENT_ID: The OAuth client ID.
  2. Execute qsl label (instead of qsl simple-label) to launch the application (use --host and --port to modify how the application listens for connections).

Development

  1. Install Poetry.
  2. Clone this repository.
  3. Initialize your development environment using make init
  4. Launch a live reloading version of the frontend and backend using make develop.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qsl-0.0.31.tar.gz (1.8 MB view details)

Uploaded Source

Built Distribution

qsl-0.0.31-py3-none-any.whl (1.8 MB view details)

Uploaded Python 3

File details

Details for the file qsl-0.0.31.tar.gz.

File metadata

  • Download URL: qsl-0.0.31.tar.gz
  • Upload date:
  • Size: 1.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.26.0 requests-toolbelt/0.9.1 urllib3/1.26.7 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/21.8.0 rfc3986/2.0.0 colorama/0.4.3 CPython/3.7.12

File hashes

Hashes for qsl-0.0.31.tar.gz
Algorithm Hash digest
SHA256 10b063182b459d11ba1ffc3d4bf6d28bf3fbc742ae784eaf9b76ed88191b27eb
MD5 dea35971341c767d5f7a6bc19f72e6ac
BLAKE2b-256 ab2d699b957dfe4c5cc81e1527d4f3ed42044775aa75a43fc2463e016193666e

See more details on using hashes here.

File details

Details for the file qsl-0.0.31-py3-none-any.whl.

File metadata

  • Download URL: qsl-0.0.31-py3-none-any.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.26.0 requests-toolbelt/0.9.1 urllib3/1.26.7 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/21.8.0 rfc3986/2.0.0 colorama/0.4.3 CPython/3.7.12

File hashes

Hashes for qsl-0.0.31-py3-none-any.whl
Algorithm Hash digest
SHA256 1bf3a505f692c4aaac7832a4aa55afd1dd08f820311ea16b0e1175f521b21fb8
MD5 1fb7173a04118ddcb23f8a90a8b53a93
BLAKE2b-256 0a2b6425e69efd5eca6a7789956fcbfbab02b46c41a856ac23f0acf1de8a9350

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