{"id":13597658,"url":"https://github.com/bit-bots/imagetagger","last_synced_at":"2025-04-10T05:33:03.131Z","repository":{"id":22499964,"uuid":"96428939","full_name":"bit-bots/imagetagger","owner":"bit-bots","description":"An open source online platform for collaborative image labeling","archived":false,"fork":false,"pushed_at":"2024-09-19T09:46:01.000Z","size":2612,"stargazers_count":269,"open_issues_count":41,"forks_count":55,"subscribers_count":21,"default_branch":"master","last_synced_at":"2025-03-18T01:27:38.513Z","etag":null,"topics":["crowdsourcing","deep-learning","image-annotation","image-labeling","images","imagetagger","label-images","labeling","robocup"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bit-bots.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-07-06T12:41:41.000Z","updated_at":"2025-02-28T21:54:22.000Z","dependencies_parsed_at":"2024-01-23T15:01:36.413Z","dependency_job_id":"f7e39999-9538-4c4f-9180-619a956f4c19","html_url":"https://github.com/bit-bots/imagetagger","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bit-bots%2Fimagetagger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bit-bots%2Fimagetagger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bit-bots%2Fimagetagger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bit-bots%2Fimagetagger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bit-bots","download_url":"https://codeload.github.com/bit-bots/imagetagger/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248163310,"owners_count":21057909,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["crowdsourcing","deep-learning","image-annotation","image-labeling","images","imagetagger","label-images","labeling","robocup"],"created_at":"2024-08-01T17:00:38.440Z","updated_at":"2025-04-10T05:33:01.267Z","avatar_url":"https://github.com/bit-bots.png","language":"HTML","readme":"# ImageTagger\n\nThis is a collaborative online tool for labeling image data.\n\nIf you are participating in RoboCup, you should not install your own instance but rather use the one provided by the Hamburg Bit-Bots (https://imagetagger.bit-bots.de). This enables you to use already labeled images from other teams and to share your own.\n\nFor a short overview of the functions please have a look at the following poster: https://robocup.informatik.uni-hamburg.de/wp-content/uploads/2017/11/imagetagger-poster.pdf\n\nTable of Contents:\n- [ImageTagger](#imagetagger)\n    \n    - [Features](#features)\n    \n    - [Planned Features](#planned-features)\n      \n    - [Reference](#reference)\n      \n    - [Installing and running ImageTagger](#installing-and-running-imagetagger)\n      \n        - [Locally](#locally)\n        - [In-Docker](#in-docker)\n        - [On Kubernetes](#on-kubernetes)\n        \n    - [Configuration](#configuration)\n      \n    - [Used dependencies](#used-dependencies)\n\n\n## Features\n\n* team creation\n* image sets\n* bounding box, polygon, line and point labeling\n* imageset download\n* export format creation\n* label export\n* image preloading for labeling and verification\n* label verification\n* upload of existing labels\n* tools exchange\n\n\n## Planned Features\n\n* collections of filtered images from multiple imagesets\n* image metadata (e.g. robot pose, camera parameters)\n\n## Reference\n\nThis paper describes the Bit-Bots ImageTagger more in depth. Please cite if you use this tool in your research:\n\nFIEDLER, Niklas, et al. [ImageTagger: An Open Source Online Platform for Collaborative Image Labeling.](https://robocup.informatik.uni-hamburg.de/wp-content/uploads/2018/11/imagetagger_paper.pdf) In: RoboCup 2018: Robot World Cup XXII. Springer, 2018.\n\n```\n@inproceedings{imagetagger2018,\n   author={Fiedler, Niklas and Bestmann, Marc and Hendrich, Norman},\n   year={2018},\n   title={ImageTagger: An Open Source Online Platform for Collaborative Image Labeling},\n   booktitle={RoboCup 2018: Robot World Cup XXII},\n   organization={Springer}\n}\n```\n\n## Installing and running ImageTagger\nImageTagger can be installed and run locally (best for development), in a docker container or in Kubernetes \n(used in our deployment).\n\n### Locally\n\nIn some of the following code snippets, the `DJANGO_CONFIGURATION` environment variable is exported.\nThis defines the type of deployment by selecting one of our predefined configuration presets.\nIf ImageTagger is running in a development environment, no export is necessary.\n\n1.  #### Install the latest release\n    \n    You need to have [Pipenv](https://github.com/pypa/pipenv) installed on your system.\n    \n    Replace `v…` with the latest release tag.\n    ```shell\n    git checkout v…\n    cd imagetagger\n    pipenv sync\n    ```\n   \n2.  #### Setup a database server\n    \n    As a database server [postgresql](https://www.postgresql.org/) is required.\n    Please seek a guide specific to your operating system on how to install a server and get it running.\n   \n    Once postgresql is installed, a user and database need to be set up for ImageTagger.\n    Of course, the user and password can be changed to something else.\n    ```postgresql\n    CREATE USER imagetagger PASSWORD 'imagetagger';\n    CREATE DATABASE imagetagger WITH OWNER imagetagger;\n    ```\n    \n3.  ### Select a Configuration preset\n\n    When running ImageTagger as a developer, no step is necessary because a development configuration is used per\n    default when not running as a docker based deployment.\n    However if this is supposed to be a production deployment, export the following environment variable.\n    \n    Currently available presets are `Dev` and `Prod`\n\n    ```shell\n    export DJANGO_CONFIGURATION=Prod\n    ```\n\n3.  #### Configuring ImageTagger to connect to the database\n    \n    Please see the lower [Configuration](#configuration) section on how to configure ImageTagger for your specific\n    database credentials.\n   \n4.  #### Initialize the database\n    \n    Run the following to create and setup all necessary database tables:\n    ```shell\n    ./manage.py migrate\n    ```\n\n5.  #### Create a user\n    \n    ```shell\n    ./manage.py createsuperuser\n    ```\n\n6.  #### Run the server\n    \n    ```shell\n    ./manage.py runserver\n    ```\n   \n**In a production deployment** it is necessary to run the following commands after each upgrade:\n```shell\n./manage.py migrate\n./manage.py compilemessages\n./manage.py collectstatic\n```\n\nfor additional steps on some releases see instructions in [UPGRADE.md](https://github.com/bit-bots/imagetagger/blob/master/UPGRADE.md)\n\n### In-Docker\n\n1.  #### Checkout the latest release\n    \n    ```shell\n    git checkout v…\n    ```\n\n2.  #### Build the container image\n    \n    *Note:* the Dockerfile has been tested with [podman](https://podman.io/) as well.\n    ```shell\n    docker build -t imagetagger .\n    ```\n   \n3.  #### Run the container\n    \n    ```shell\n    docker run -it -p 8000:80 --name imagetagger imagetagger\n    ```\n   \n    This step will not work out of the box because configuration still needs to be done.\n    See the lower [section about configuring](#configuration) ImageTagger on how to fix this.\n\n4.  #### Create a user\n    \n    *Note: This step requires a container running in the background.*\n    ```shell\n    docker exec -it imagetagger /app/src/imagetagger/manage.py createsuperuser\n    ```\n   \n#### About the Container \n\n| Kind | Description |\n|---|---|\n| Volume | `/app/data` is where persistent data (like images) are stored\n| Volume | `/app/config` is where additional custom configuration files can be placed. See the [Configuration section](#configuration) below\n| Environment | ImageTagger can mostly be configured via environment variables\n| Ports | The container internal webserver listens on port 80 for incoming connections.\n\n### On Kubernetes\n\n1.  Follow the steps for [In-Docker](#in-docker) on how to build a container image\n\n2.  **Apply kubernetes configuration**\n\n    *Note: This assumes you have access to a kubernetes cluster configured and can use kubectl*\n    \n    We use [kustomize](https://kustomize.io/) for management of our kubernetes configuration.\n    It can be applied by running the following commands:\n    ```shell\n    kustomize build . \u003e k8s.yml\n    kubectl apply -f k8s.yml\n    ```\n   \n#### Generated Kubernetes resources\n\n| Kind | Name | Description\n|---|---|---\n| [Namespace](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/) | imagetagger | The namespace in which each resource resides\n| [Deployment](https://kubernetes.io/es/docs/concepts/workloads/controllers/deployment/) + [Service](https://kubernetes.io/docs/concepts/services-networking/service/) | imagetagger-postgres | postgresql server which is required by ImageTagger. The replica count can be dialed down to 0 if an the usage of an external server is desired.\n| [PersistentVolumeClaim](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) | imagetagger-database | Where the postgresql server stores its data\n| [ConfigMap](https://kubernetes.io/docs/concepts/configuration/configmap/) | imagetagger-postgres | Configuration of the postgresql server. Also available inside the application server deployment so that settings can be [referenced](https://kubernetes.io/docs/tasks/inject-data-application/define-interdependent-environment-variables/).\n| [Deployment](https://kubernetes.io/es/docs/concepts/workloads/controllers/deployment/) + [Service](https://kubernetes.io/docs/concepts/services-networking/service/) | imagetagger-web | application server. Per default this deployment references the image `imagetagger:local` which is probably not resolvable and should be replaced by a reference to where your previously built container image is available.\n| [PersistentVolumeClaim](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) | imagetagger-image-data | Where the application server stores its images (and tools).\n| [ConfigMap](https://kubernetes.io/docs/concepts/configuration/configmap/) | imagetagger-web | Configuration of the application server. Mounted as environment variables. See [Configuration](#configuration) for details.\n\n## Configuration\n\nImageTagger is a Django application and uses [django-configurations](https://django-configurations.readthedocs.io/en/stable/)\nfor better configuration management.\n\nImageTagger is configured to use a *Dev* configuration when running locally and *Prod* when running in a container.\nThis can be overridden via the environment variable `DJANGO_CONFIGURATION`.\n\nFor a list of available configuration values see [settings.py](https://github.com/bit-bots/imagetagger/blob/master/imagetagger/imagetagger/settings.py). \nTowards the bottom is a list of *values*. These are taken from environment variables where the key is the variable name\nbut with an `IT_` prefix.\n\nIf completely custom configuration is desired, `imagetagger/imagetagger/settings_local.py` can be created in which\na custom configuration class may be created. In Docker this file may be located at `/app/config/settings.py` so that\nmounting it should be simple.\nTo use this custom configuration class, the environment variables `DJANGO_SETTINGS_MODULE=imagetagger.settings_local`\nand `DJANGO_CONFIGURATION=MyCustomClass` must be set.\n\nIf downloading zip files of Imagesets is desired, the feature can be enabled by settings `IT_ENABLE_ZIP_DOWNLOAD` to `true`. \nA separate zip generation daemon must then be started via the following command.\nThis feature is enabled and running automatically in Docker based deployments.\n```shell\nexport DJANGO_CONFIGURATION=Prod\n./manage.py runzipdaemon\n```\n\nTo create annotation types, log into the application and click on Administration at the very bottom of the home page.\n\n\n### Minimal production Configuration\n\nIn production, the following configuration values **must** be defined (as environment variables)\n\n| Key | Description\n|---|---\n| `IT_SECRET_KEY` | The [django secret key](https://docs.djangoproject.com/en/3.0/ref/settings/#std:setting-SECRET_KEY) used by ImageTagger. It is used for password hashing and other cryptographic operations.\n| `IT_ALLOWED_HOSTS` | [django ALLOWED_HOSTS](https://docs.djangoproject.com/en/3.0/ref/settings/#allowed-hosts) as comma separated list of values. It defines the hostnames which this application will allow to be used under.\n| `IT_DB_HOST` | Hostname (or IP-address) of the postgresql server. When deploying on kubernetes, the provided Kustomization sets this to reference the database deployment.\n| `IT_DB_PASSWORD ` | Password used for authenticating against the postgresql server.\n| `IT_DOWNLOAD_BASE_URL` | Base-URL under which this application is reachable. It defines the prefix for generated download links.\n\n### Database Configuration\n\nThe following environment variables configure how the postgresql server is accessed\n\n| Key | Required | Default | Description\n|---|---|---|---\n| `IT_DB_HOST` | yes | | Hostname (or IP-address) of the postgresql server. When deploying on kubernetes, the provided Kustomization sets this to reference the database deployment.\n| `IT_DB_PORT` | no | 5432 | Port on which the postgresql server listens. \n| `IT_DB_NAME` | no | imagetagger | Database name on the postgresql server. ImageTagger requires full access to it.\n| `IT_DB_USER` | no | imagetagger | User as which to authenticate on the postgresql server.\n| `IT_DB_PASSWORD` | yes | | Password used for authentication.\n\n## Used dependencies\n\nThe ImageTagger relies on the following plugins, libraries and frameworks:\n\n- [Bootstrap](https://getbootstrap.com/)\n- [Django](https://www.djangoproject.com/)\n- [Django REST Framework](http://www.django-rest-framework.org/)\n- [django-registration](https://github.com/ubernostrum/django-registration)\n- [django-widget-tweaks](https://github.com/jazzband/django-widget-tweaks)\n- [imgAreaSelect](http://odyniec.net/projects/imgareaselect/)\n- [jCanvas](https://projects.calebevans.me/jcanvas/)\n- [jQuery](https://jquery.com/)\n- [jQuery-Autocomplete](https://github.com/devbridge/jquery-Autocomplete)\n- [jQuery-File-Upload](https://github.com/blueimp/jQuery-File-Upload)\n- [Pillow](https://github.com/python-pillow/Pillow)\n- [PostgreSQL](https://www.postgresql.org/)\n\nWe are grateful to the maintainers and contributors of the respective projects.\n","funding_links":[],"categories":["HTML","Data Labelling and Synthesis","Image / video","Labeling Tools","Data Labelling Tools and Frameworks"],"sub_categories":["Open source","Images"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbit-bots%2Fimagetagger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbit-bots%2Fimagetagger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbit-bots%2Fimagetagger/lists"}