介绍

LabelImg是目标检测数据标注工具,支持两种标注格式:

  • VOC标签格式,标注的标签存储在xml文件
  • YOLO标签格式,标注的标签存储在txt文件中

环境准备

确保电脑上安装python3+,其中windows和macOS推荐使用Anaconda等工具快速安装python。这里不再展开介绍。

安装

自动安装(推荐)

使用pip安装LabelImg安装是最简单的方式,安装完之后会自动把LabelImg添加到环境变量中。

打开终端输入如下命令安装:

1
pip install labelimg

国内速度慢的可指定镜像源再安装:

1
pip install labelimg -i https://mirrors.aliyun.com/pypi/simple/

注:在部分老电脑上直接安装labelimg最新版有的不能成功,经测试安装1.8.0版本以下老版本可以,出错的可指定版本,安装这之下版本:

1
pip install labelimg==1.8.0

手动安装

需从官方下载源码:https://github.com/tzutalin/labelImg

从源码开始安装LabelImg,一般比较麻烦,不推荐

Ubuntu

① Python 2 + Qt4

使用如下命令安装:

1
2
3
4
5
sudo apt-get install pyqt4-dev-tools
sudo pip install lxml
make qt4py2
python labelImg.py
python labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]

② Python 3 + Qt5 (Recommended)

使用如下命令安装:

1
2
3
4
5
sudo apt-get install pyqt5-dev-tools
sudo pip3 install -r requirements/requirements-linux-python3.txt
make qt5py3
python3 labelImg.py
python3 labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]

macOS

① Python 2 + Qt4

使用如下命令安装:

1
2
3
4
5
brew install qt qt4
brew install libxml2
make qt4py2
python labelImg.py
python labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]

② Python 3 + Qt5 (Recommended)

使用如下命令安装:

1
2
3
4
5
6
7
8
9
10
brew install qt
brew install libxml2

or using pip

pip3 install pyqt5 lxml

make qt5py3
python3 labelImg.py
python3 labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]

Virtualenv

使用virtualenv创建虚拟环境可以避免python版本和QT版本带来的一些问题,当然你也可以用conda创建虚拟环境。

1
2
3
4
5
brew install python3
pip3 install pipenv
pipenv run pip install pyqt5==5.13.2 lxml
pipenv run make qt5py3
python3 labelImg.py

更多安装方式

可参见官方,如docker安装方法,这里不再详细介绍。

使用

打开软件

① 如果是pip安装的,由于会自动加入环境变量,因此只要在终端输入LabelImglabelimg即可打开。

② 如果是手动编译的,需要到软件安装目录打开终端,运行python labelImg.py

按钮介绍

  • Open Dir:待标注图片数据的路径文件夹
  • Change Save Dir:保存类别标签的路径文件夹
  • PascalVOC:标注的标签保存成VOC格式,在鼠标点一下就变成YOLO,即此时就会把标注的标签变成YOLO格式
  • Create RectBox:点击后鼠标会变成十字架,可以开始画框

快捷键介绍

  • W:调出标注的十字架,开始标注
  • A:切换到上一张图片
  • D:切换到下一张图片
  • Ctrl+S:保存标注好的标签
  • del:删除标注的矩形框
  • Ctrl+鼠标滚轮:按住Ctrl,然后滚动鼠标滚轮,可以调整标注图片的显示大小
  • Ctrl+u:选择要标注图片的文件夹
  • Ctrl+r:选择标注好的label标签存放的文件夹
  • ↑→↓←:移动标注的矩形框的位置

设置

点击View显示,推荐选上以下几个选项:

  • Auto Save mode:当你切换到下一张图片时,就会自动把上一张标注的图片标签自动保存下来,这样就不用每标注一样图片都按Ctrl+S保存一下了
  • Display Labels:标注好图片之后,会把框和标签都显示出来
  • Advanced Mode:这样标注的十字架就会一直悬浮在窗口,不用每次标完一个目标,再按一次W快捷键或点击Create RectBox,调出标注的十字架。

读取标注

如果已存在标注文件,可点击File->Open Annotation打开。

具体标注过程展示

① 首先,打开图片所在文件夹,这边为方便演示,demo文件夹中只有一张图片,标注保存路径也设置成demo文件夹。

② 按一次W快捷键或点击Create RectBox,调出标注的十字架,开始画框。画好框后会弹出窗口提示输入类别。

③ 输入类别,完成标注。

可看到标注完成后,类别(这里的类别是person)会展示在右边的窗口中,与框对应的颜色显示。

保存后,会看到在设置的标注保存路径中会生成与图片同名的标注文件:

如果标注需要修正,先确保进入编辑模式(点击Edit RectBox):

比如框画得不好,可以选中框按Delete删除后,重画。

比如类别需要修改,从右边窗口选择需要修改的类别,右键Edit Label进行修改。

其他技巧

如果类别种类确定,可在txt中事先规定好要用到的类别,比如定义了一个predefined_classes.txt,内容如下:

1
2
3
4
5
6
7
circle_red
circle_gray
rectangle_red
rectangle_gray
fingeprint_red
fingeprint_gray
other

在软件打开时,带上参数,指定图片路径和预定义类别txt的路径:

1
labelimg /path/to/image_file /path/to/predefined_classes.txt

那么标注的时候,会把predefined_classes.txt预定义的标签加载出来,然后只要选择对应的标签即可,不需要手动输入了。

数据标签格式解析

VOC数据格式

如:标注的000001.jpg图片,标注的标签信息会保存到000001.xml文件中,000001.xml中的信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<annotation>
<folder>demo</folder> # 文件夹名,不重要
<filename>000001.jpg</filename> # 图片名,重要
<path>C:\Users\Qiyuan-Z\Desktop\demo\000001.jpg</path> # 图片路径,不重要
<source>
<database>Unknown</database> # 数据集名称,不重要
</source>
<size> # 图像尺寸,重要
<width>468</width>
<height>624</height>
<depth>3</depth>
</size>
<segmented>0</segmented> # 是否用于分割,0为否,1为是
<object> # 目标信息,重要
<name>person</name> # 目标类别
<pose>Unspecified</pose> # 拍摄角度
<truncated>0</truncated> # 是否被截断,0为完整
<difficult>0</difficult> # 是否难识别,0为简单
<bndbox> # 左上角和右下角的xy坐标
<xmin>172</xmin>
<ymin>112</ymin>
<xmax>317</xmax>
<ymax>502</ymax>
</bndbox>
</object>
</annotation>

YOLO数据格式

如:标注的000001.jpg图片,标注的标签信息会保存到000001.txt文件中(同时会生成一个classes.txt文件),000001.txt中的信息如下:

1
2
3
0 0.521000 0.235075 0.362000 0.450249
0 0.213000 0.645522 0.418000 0.519900
0 0.794000 0.665423 0.376000 0.470149
  • 每一行代表标注的一个目标
  • 第一个数代表标注目标的标签,如第一个目标是circle_red,对应的数字就是0
  • 后面的四个数代表标注框的中心坐标和标注框的相对宽和高

classes.txt中的信息如下,会按顺序存储标签:

1
2
3
4
5
6
7
circle_red
circle_gray
rectangle_red
rectangle_gray
fingeprint_red
fingeprint_gray
other