1.LabelImg安装
1.1 LabelImg介绍
LabelImg是目标检测数据标注工具,可以标注标注两种格式:
- VOC标签格式,标注的标签存储在xml文件
- YOLO标签格式,标注的标签存储在txt文件中
1.2 LabelImg安装
1.2.1 使用pip工具(推荐)
使用pip安装LabelImg安装时最简单的方式,首推,安装完之后会自动把LabelImg添加到环境变量中,这样你就可以在命令行中输入:labelimg直接打开该工具——windows用户强烈推荐此方法
使用pip安装labelimg
pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple
1.2.2 Linux环境安装
软件要求python版本在2.6以上,同时需要PyQt和lxml的支持。
第一步:安装PyQt和lxml
- python2+Qt4
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]
- Python3+Qt5
sudo apt-get install pyqt5-dev-tools
sudo pip3 install lxml
make qt5py3
python3 labelImg.py
python3 labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]
1.2.3 在Virtualenv虚拟环境中安装
使用virtualenv创建虚拟环境可以避免python版本和QT版本带来的一些问题,当然你也可以用conda创建虚拟环境,道理是一样的
brew install python3
pip3 install pipenv
pipenv run pip install pyqt5==5.13.2 lxml
pipenv run make qt5py3
python3 labelImg.py
[Optional] rm -rf build dist; python setup.py py2app -A;mv "dist/labelImg.app" /Applications
2. LabelImg的使用
安装好之后,就是在命令行中打开LabeImg,在命令行中输入(因为安装完之后会自动添加到):LabelImg
或 labelimg
2.1 打开LabelImg
我们在要标定数据的时候,一般是已经制定好了要标注物体的类别,这样在打开LabelImg之后,我们只要框定目标之后,选择要对应的标签即可。
labelimg JPEGImage predefined_classes.txt
说明:
- JPEGImage 目录:存储的是图片的名字
- Annotation 目录:用于存放标注图片的标签文件
- predefined_classes.txt 文件:定义自己要标注的所有类别
例如:我的predefined_classes.txt中定义的类别如下:
circle_red
circle_gray
rectangle_red
rectangle_gray
fingeprint_red
fingeprint_gray
other
执行命令,然后选择JPEGImage待标注图片数据文件夹,然后点选择文件夹,如下图:
选择好标注数据文件夹之后,即进入到了LabelImg的界面,如下图:
- 最上方显示的是当前标注图片的路径
- Open Dir:待标注图片数据的路径文件夹,即选择JPEGImage文件夹
- Change Save Dir:保存类别标签的路径文件夹,即选择Annotation文件夹
- PascalVOC:标注的标签保存成VOC格式,在鼠标点一下就变成YOLO,即此时就会把标注的标签变成YOLO格式
2.2 标注前先进行一些设置
点击View显示如下图,然后把如下的几个选项勾上:
- Auto Save mode:当你切换到下一张图片时,就会自动把上一张标注的图片标签自动保存下来,这样就不用每标注一样图片都按Ctrl+S保存一下了
- Display Labels:标注好图片之后,会把框和标签都显示出来
- Advanced Mode:这样标注的十字架就会一直悬浮在窗口,不用每次标完一个目标,再按一次W快捷键,调出标注的十字架。
2.3 标注常用的快捷键
- W:调出标注的十字架,开始标注
- A:切换到上一张图片
- D:切换到下一张图片
- Ctrl+S:保存标注好的标签
- del:删除标注的矩形框
- Ctrl+鼠标滚轮:按住Ctrl,然后滚动鼠标滚轮,可以调整标注图片的显示大小
- Ctrl+u:选择要标注图片的文件夹
- Ctrl+r:选择标注好的label标签存放的文件夹
- ↑→↓←:移动标注的矩形框的位置
使用标注的十字架,框住要标注的目标即可,如下图,是我对公章数据进行标注: - 标注的时候,会把predefined_classes.txt预定义的标加载出来,然后我们只要选择对应的标签即可
- 右上角会显示已经标注目标的标签
3.VOC数据标签格式和YOLO数据标签格式说明
3.1 VOC数据格式
VOC数据格式,会直接把每张图片标注的标签信息保存到一个xml文件中
例如:我们上面标注的JPEGImage/000001.jpg图片,标注的标签信息会保存到Annotation/000001.xml文件中,000001.xml中的信息如下:
<annotation>
<folder>JPEGImage</folder>
<filename>000000.jpg</filename>
<path>D:\ZF\2_ZF_data\3_stamp_data\标注公章数据\JPEGImage\000000.jpg</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>500</width>
<height>402</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>circle_red</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>168</xmin>
<ymin>2</ymin>
<xmax>355</xmax>
<ymax>186</ymax>
</bndbox>
</object>
<object>
<name>circle_red</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>2</xmin>
<ymin>154</ymin>
<xmax>208</xmax>
<ymax>367</ymax>
</bndbox>
</object>
<object>
<name>circle_red</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>305</xmin>
<ymin>174</ymin>
<xmax>493</xmax>
<ymax>364</ymax>
</bndbox>
</object>
</annotation>
xml中的关键信息说明:
- 图片的名字
- 每个目标的标定框坐标:即左上角的坐标和右下角的坐标
- xmin
- ymin
- xmax
- ymax
3.2 YOLO数据格式
YOLO数据格式,会直接把每张图片标注的标签信息保存到一个txt文件中
例如:我们上面标注的JPEGImage/000001.jpg图片,标注的标签信息会保存到Annotation/000001.txt文件中(同时会生成一个classes.txt文件,也保存到Annotation/classes.txt),000001.txt中的信息如下:
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
txt中信息说明:
- 每一行代表标注的一个目标
- 第一个数代表标注目标的标签,第一目标circle_red,对应数字就是0
- 后面的四个数代表标注框的中心坐标和标注框的相对宽和高
同时会生成一个Annotation/classes.txt
实际类别文件classes.txt
,里面的内容如下:
circle_red
circle_gray
rectangle_red
rectangle_gray
fingeprint_red
fingeprint_gray
other