2019-04-21 12:50:21 -04:00
LabelImg
2019-04-21 12:49:01 -04:00
========
2019-04-16 13:50:22 -04:00
2017-05-04 09:53:54 +08:00
.. image :: https://img.shields.io/pypi/v/labelimg.svg
:target: https://pypi.python.org/pypi/labelimg
.. image :: https://img.shields.io/travis/tzutalin/labelImg.svg
:target: https://travis-ci.org/tzutalin/labelImg
2016-04-19 14:51:28 +08:00
2021-04-11 22:13:07 -07:00
.. image :: https://img.shields.io/badge/lang-en-blue.svg
:target: https://github.com/tzutalin/labelImg/blob/master/README.zh.rst
.. image :: https://img.shields.io/badge/lang-zh-green.svg
:target: https://github.com/tzutalin/labelImg/blob/master/readme/README.zh.rst
.. image :: https://img.shields.io/badge/lang-zh--TW-green.svg
:target: (https://github.com/jonatasemidio/multilanguage-readme-pattern/blob/master/README.pt-br.md
2016-04-11 17:18:33 +08:00
LabelImg is a graphical image annotation tool.
2015-09-17 10:37:20 +08:00
It is written in Python and uses Qt for its graphical interface.
2017-05-04 09:53:54 +08:00
Annotations are saved as XML files in PASCAL VOC format, the format used
2021-04-11 22:13:07 -07:00
by `ImageNet <http://www.image-net.org/> `__ . Besides, it also supports YOLO and CreateML formats.
2017-05-04 09:53:54 +08:00
.. image :: https://raw.githubusercontent.com/tzutalin/labelImg/master/demo/demo3.jpg
:alt: Demo Image
2015-09-17 10:37:20 +08:00
2017-10-06 17:17:53 +08:00
.. image :: https://raw.githubusercontent.com/tzutalin/labelImg/master/demo/demo.jpg
:alt: Demo Image
2017-06-06 20:37:04 +08:00
`Watch a demo video <https://youtu.be/p0nR2YsCY_U> `__
2016-09-06 20:42:13 +08:00
2017-05-04 09:53:54 +08:00
Installation
------------------
2015-09-18 19:29:51 +08:00
2021-10-03 15:25:56 -03:00
Get from PyPI but only python3.0 or above
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This is the simplest (one-command) install method on modern Linux distributions such as Ubuntu and Fedora.
.. code :: shell
pip3 install labelImg
labelImg
labelImg [IMAGE_PATH] [PRE-DEFINED CLASS FILE]
2017-04-26 11:19:23 +08:00
2017-05-04 09:53:54 +08:00
Build from source
~~~~~~~~~~~~~~~~~
2017-01-07 16:36:19 -05:00
2017-05-04 09:53:54 +08:00
Linux/Ubuntu/Mac requires at least `Python
2017-10-12 13:50:45 -07:00
2.6 <https://www.python.org/getit/>`__ and has been tested with ` PyQt
2019-05-25 20:58:20 -07:00
4.8 <https://www.riverbankcomputing.com/software/pyqt/intro>`__. However, ` Python
3 or above <https://www.python.org/getit/>`__ and `PyQt5 <https://pypi.org/project/PyQt5/> `__ are strongly recommended.
2015-11-23 14:21:55 +08:00
2017-05-04 10:01:05 +08:00
2017-05-04 09:53:54 +08:00
Ubuntu Linux
^^^^^^^^^^^^
2015-09-17 10:37:20 +08:00
2020-11-14 22:51:44 -08:00
Python 3 + Qt5
2017-07-07 23:14:41 +08:00
2019-05-25 14:38:32 -07:00
.. code :: shell
2017-07-07 23:14:41 +08:00
sudo apt-get install pyqt5-dev-tools
2018-09-30 22:24:53 -07:00
sudo pip3 install -r requirements/requirements-linux-python3.txt
2017-07-07 23:14:41 +08:00
make qt5py3
python3 labelImg.py
python3 labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]
2015-11-22 16:57:50 +08:00
2017-10-12 13:46:48 -07:00
macOS
2019-05-25 14:38:32 -07:00
^^^^^
2017-07-07 23:14:41 +08:00
2020-11-14 22:51:44 -08:00
Python 3 + Qt5
2017-12-21 15:42:15 -06:00
2019-05-25 14:38:32 -07:00
.. code :: shell
2017-12-21 15:42:15 -06:00
2019-04-21 12:53:57 -07:00
brew install qt # Install qt-5.x.x by Homebrew
2017-12-21 15:42:15 -06:00
brew install libxml2
2019-04-21 12:53:57 -07:00
2019-05-25 20:58:20 -07:00
or using pip
2019-04-21 12:53:57 -07:00
pip3 install pyqt5 lxml # Install qt and lxml by pip
2017-12-21 15:42:15 -06:00
make qt5py3
2018-09-30 22:24:53 -07:00
python3 labelImg.py
python3 labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]
2017-12-21 15:42:15 -06:00
2019-05-25 20:58:20 -07:00
Python 3 Virtualenv (Recommended)
2019-04-21 12:53:57 -07:00
2019-05-25 20:58:20 -07:00
Virtualenv can avoid a lot of the QT / Python version issues
2018-03-24 15:23:25 -03:00
2019-05-25 14:38:32 -07:00
.. code :: shell
2018-09-06 12:51:11 +02:00
2018-03-24 15:23:25 -03:00
brew install python3
2019-05-25 20:58:20 -07:00
pip3 install pipenv
2021-10-11 13:04:03 -07:00
pipenv run pip install pyqt5==5.15.2 lxml
2019-05-25 20:58:20 -07:00
pipenv run make qt5py3
2021-02-28 19:00:08 +00:00
pipenv run python3 labelImg.py
2019-05-25 20:58:20 -07:00
[Optional] rm -rf build dist; python setup.py py2app -A;mv "dist/labelImg.app" /Applications
Note: The Last command gives you a nice .app file with a new SVG Icon in your /Applications folder. You can consider using the script: build-tools/build-for-macos.sh
2019-03-28 10:45:11 +05:30
2016-12-28 18:46:56 -05:00
2017-05-04 09:53:54 +08:00
Windows
^^^^^^^
2019-04-21 12:53:57 -07:00
Install `Python <https://www.python.org/downloads/windows/> `__ ,
`PyQt5 <https://www.riverbankcomputing.com/software/pyqt/download5> `__
2017-05-04 09:53:54 +08:00
and `install lxml <http://lxml.de/installation.html> `__ .
2015-11-23 14:21:55 +08:00
2018-05-14 01:23:55 -07:00
Open cmd and go to the `labelImg <#labelimg> `__ directory
2015-12-04 22:51:44 +08:00
2019-05-25 14:38:32 -07:00
.. code :: shell
2015-11-22 16:57:50 +08:00
2021-01-01 11:24:08 -08:00
pyrcc4 -o libs/resources.py resources.qrc
2019-08-27 18:49:23 -07:00
For pyqt5, pyrcc5 -o libs/resources.py resources.qrc
2020-07-12 19:37:43 -07:00
2016-12-28 18:46:56 -05:00
python labelImg.py
2017-05-10 21:58:39 +08:00
python labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]
2018-09-06 12:51:11 +02:00
2018-05-14 01:23:55 -07:00
Windows + Anaconda
2019-05-25 14:38:32 -07:00
^^^^^^^^^^^^^^^^^^
2018-03-15 11:30:31 +01:00
2018-05-14 01:23:55 -07:00
Download and install `Anaconda <https://www.anaconda.com/download/#download> `__ (Python 3+)
2018-03-15 11:30:31 +01:00
2018-05-14 01:23:55 -07:00
Open the Anaconda Prompt and go to the `labelImg <#labelimg> `__ directory
2018-03-15 11:30:31 +01:00
2019-05-25 14:38:32 -07:00
.. code :: shell
2018-03-15 11:30:31 +01:00
2018-05-14 01:23:55 -07:00
conda install pyqt=5
2020-07-17 00:36:33 +05:30
conda install -c anaconda lxml
2019-06-04 16:38:23 +02:00
pyrcc5 -o libs/resources.py resources.qrc
2018-03-15 11:30:31 +01:00
python labelImg.py
python labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]
2016-12-28 18:46:56 -05:00
2017-06-06 18:25:12 +08:00
Use Docker
~~~~~~~~~~~~~~~~~
2019-05-25 14:38:32 -07:00
.. code :: shell
2017-06-06 18:25:12 +08:00
docker run -it \
--user $(id -u) \
-e DISPLAY=unix$DISPLAY \
--workdir=$(pwd) \
--volume="/home/$USER:/home/$USER" \
--volume="/etc/group:/etc/group:ro" \
--volume="/etc/passwd:/etc/passwd:ro" \
--volume="/etc/shadow:/etc/shadow:ro" \
--volume="/etc/sudoers.d:/etc/sudoers.d:ro" \
-v /tmp/.X11-unix:/tmp/.X11-unix \
tzutalin/py2qt4
2017-07-07 23:14:41 +08:00
make qt4py2;./labelImg.py
2017-07-07 13:19:18 +08:00
You can pull the image which has all of the installed and required dependencies. `Watch a demo video <https://youtu.be/nw1GexJzbCI> `__
2017-06-06 20:37:04 +08:00
2017-06-06 18:25:12 +08:00
2017-05-04 09:53:54 +08:00
Usage
-----
2015-11-22 16:57:50 +08:00
2018-03-02 14:48:06 -06:00
Steps (PascalVOC)
2019-05-25 14:38:32 -07:00
~~~~~~~~~~~~~~~~~
2015-11-21 17:39:40 +08:00
2017-01-07 16:36:19 -05:00
1. Build and launch using the instructions above.
2. Click 'Change default saved annotation folder' in Menu/File
3. Click 'Open Dir'
4. Click 'Create RectBox'
2017-05-04 09:53:54 +08:00
5. Click and release left mouse to select a region to annotate the rect
box
2017-03-01 20:33:14 +08:00
6. You can use right mouse to drag the rect box to copy or move it
2015-11-21 17:39:40 +08:00
2017-01-07 16:36:19 -05:00
The annotation will be saved to the folder you specify.
2016-05-10 22:42:13 +08:00
2017-03-01 20:33:14 +08:00
You can refer to the below hotkeys to speed up your workflow.
2018-03-02 14:48:06 -06:00
Steps (YOLO)
2019-05-25 14:38:32 -07:00
~~~~~~~~~~~~
2018-03-02 14:48:06 -06:00
1. In `` data/predefined_classes.txt `` define the list of classes that will be used for your training.
2. Build and launch using the instructions above.
2019-05-25 20:58:20 -07:00
3. Right below "Save" button in the toolbar, click "PascalVOC" button to switch to YOLO format.
2018-03-02 14:48:06 -06:00
2019-05-25 20:58:20 -07:00
4. You may use Open/OpenDIR to process single or multiple images. When finished with a single image, click save.
2018-03-02 14:48:06 -06:00
2019-05-25 20:58:20 -07:00
A txt file of YOLO format will be saved in the same folder as your image with same name. A file named "classes.txt" is saved to that folder too. "classes.txt" defines the list of class names that your YOLO label refers to.
2018-03-02 14:59:54 -06:00
Note:
2019-05-25 20:58:20 -07:00
- Your label list shall not change in the middle of processing a list of images. When you save an image, classes.txt will also get updated, while previous annotations will not be updated.
2018-03-02 14:59:54 -06:00
- You shouldn't use "default class" function when saving to YOLO format, it will not be referred.
- When saving as YOLO format, "difficult" flag is discarded.
2018-03-02 14:48:06 -06:00
2017-05-04 09:53:54 +08:00
Create pre-defined classes
~~~~~~~~~~~~~~~~~~~~~~~~~~
You can edit the
`data/predefined\_classes.txt <https://github.com/tzutalin/labelImg/blob/master/data/predefined_classes.txt> `__
to load pre-defined classes
Hotkeys
~~~~~~~
2020-09-26 11:22:20 -07:00
+--------------------+--------------------------------------------+
| Ctrl + u | Load all of the images from a directory |
+--------------------+--------------------------------------------+
| Ctrl + r | Change the default annotation target dir |
+--------------------+--------------------------------------------+
| Ctrl + s | Save |
+--------------------+--------------------------------------------+
| Ctrl + d | Copy the current label and rect box |
+--------------------+--------------------------------------------+
| Ctrl + Shift + d | Delete the current image |
+--------------------+--------------------------------------------+
| Space | Flag the current image as verified |
+--------------------+--------------------------------------------+
| w | Create a rect box |
+--------------------+--------------------------------------------+
| d | Next image |
+--------------------+--------------------------------------------+
| a | Previous image |
+--------------------+--------------------------------------------+
| del | Delete the selected rect box |
+--------------------+--------------------------------------------+
| Ctrl++ | Zoom in |
+--------------------+--------------------------------------------+
| Ctrl-- | Zoom out |
+--------------------+--------------------------------------------+
2021-04-11 22:36:08 -07:00
| ↑→↓← | Keyboard arrows to move selected rect box |
2020-09-26 11:22:20 -07:00
+--------------------+--------------------------------------------+
2017-05-04 09:53:54 +08:00
2019-02-08 10:30:11 +01:00
**Verify Image:**
When pressing space, the user can flag the image as verified, a green background will appear.
This is used when creating a dataset automatically, the user can then through all the pictures and flag them instead of annotate them.
**Difficult:**
2019-05-25 20:58:20 -07:00
The difficult field is set to 1 indicates that the object has been annotated as "difficult", for example, an object which is clearly visible but difficult to recognize without substantial use of context.
2019-04-21 12:53:57 -07:00
According to your deep neural network implementation, you can include or exclude difficult objects during training.
2019-02-08 10:30:11 +01:00
2020-05-01 13:53:08 +03:00
How to reset the settings
~~~~~~~~~~~~~~~~~~~~~~~~~
In case there are issues with loading the classes, you can either:
1. From the top menu of the labelimg click on Menu/File/Reset All
2. Remove the `.labelImgSettings.pkl` from your home directory. In Linux and Mac you can do:
`rm ~/.labelImgSettings.pkl`
2017-05-04 09:53:54 +08:00
How to contribute
~~~~~~~~~~~~~~~~~
2015-11-21 17:39:40 +08:00
2017-05-04 09:53:54 +08:00
Send a pull request
2015-11-16 13:40:19 +08:00
2017-05-04 09:53:54 +08:00
License
~~~~~~~
`Free software: MIT license <https://github.com/tzutalin/labelImg/blob/master/LICENSE> `_
2015-11-23 14:21:55 +08:00
2017-08-17 20:02:20 +08:00
Citation: Tzutalin. LabelImg. Git code (2015). https://github.com/tzutalin/labelImg
2016-04-11 17:18:33 +08:00
2021-02-28 11:13:14 -08:00
Related and additional tools
2021-04-11 22:36:08 -07:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2016-05-10 22:42:13 +08:00
2017-05-04 09:53:54 +08:00
1. `ImageNet Utils <https://github.com/tzutalin/ImageNet_Utils> `__ to
download image, create a label text for machine learning, etc
2017-10-06 17:17:53 +08:00
2. `Use Docker to run labelImg <https://hub.docker.com/r/tzutalin/py2qt4> `__
3. `Generating the PASCAL VOC TFRecord files <https://github.com/tensorflow/models/blob/4f32535fe7040bb1e429ad0e3c948a492a89482d/research/object_detection/g3doc/preparing_inputs.md#generating-the-pascal-voc-tfrecord-files> `__
2019-05-25 20:58:20 -07:00
4. `App Icon based on Icon by Nick Roach (GPL) <https://www.elegantthemes.com/> `__
5. `Setup python development in vscode <https://tzutalin.blogspot.com/2019/04/set-up-visual-studio-code-for-python-in.html> `__
2019-07-30 19:50:55 -07:00
6. `The link of this project on iHub platform <https://code.ihub.org.cn/projects/260/repository/labelImg> `__
2021-02-28 11:13:14 -08:00
7. `Convert annotation files to CSV format or format for Google Cloud AutoML <https://github.com/tzutalin/labelImg/tree/master/tools> `__
2019-05-25 14:38:32 -07:00
2020-07-12 19:37:43 -07:00
Stargazers over time
~~~~~~~~~~~~~~~~~~~~
.. image :: https://starchart.cc/tzutalin/labelImg.svg