目录
labelme、labelimg简要介绍
labelme
labelimg
Anaconda虚拟环境
labelme的安装
labelme的使用
labelimg的安装
labelimg的使用
json转png
标注快捷操作
labelme、labelimg简要介绍
labelme和labelimg都是图像标注工具,它们在机器学习和计算机视觉领域的数据准备阶段扮演着重要的角色。这些工具的主要目的是帮助用户为图像数据集创建标签,这些标签随后可以用于训练机器学习模型,以识别和理解图像中的对象、场景和活动等。
labelme
labelme是一个开源的图像标注工具,它支持多种类型的标注,包括矩形框、多边形、点、线和圆形等。它提供了一个用户友好的界面,允许用户通过简单的点击和拖动来创建标注。Labelme支持导出多种格式的标注文件,如JSON、XML等,这些文件可以被不同的机器学习框架所使用。
labelimg
labelimg是另一个广泛使用的图像标注工具,它同样提供了矩形框、多边形、点和线的标注功能。labelimg的用户界面相对简洁,易于上手,同时也支持导出多种格式的标注文件,如XML、CSV等。
Anaconda虚拟环境
在进行 labelme 和 labelimg 安装前需要先创建Anaconda虚拟环境。
详情请参考:深度学习环境搭建详解
在电脑搜索栏中搜索Anacodna Prompt打开Anaconda
最开始界面如下,base是基础环境
(base) C:\Users\ZhuanZ>
创建环境:conda create -n labelme python=3.7.16
其中labelme是需要创建的环境名称,pytho=3.7.16是该环境的python版本,可根据自己的需求调整版本号。
激活环境:activate labelme
退出环境:deactivate
labelme的安装
activate labelme 激活 labelme 的虚拟环境
成功显示以下界面,其中(labelme)是激活的对应环境名称
输入以下代码进行下载:
pip install labelme==3.16.7 -i https://pypi.tuna.tsinghua.edu.cn/simple
这里安装 labelme==3.16.7 的版本,其他的版本容易出现报错(后期易出现维度不匹配的问题)
为减少一些不必要的麻烦,建议大家都安装这个版本
labelme的使用
安装好后直接输入 labelme 即可打开该软件
这里 Open 打开的是单个的图片,Open Dir 打开的是一整个图像文件夹
打开后点击 Create Polygons 进行标注,标注特点:首尾相连形成一个封闭区域、尽可能的贴合目标的边界轮廓
补充:导入图像数据后建议打开这两个进行标签保存,其中 Save Automatically 是指标注后的文件自动保存在当前图像的路径下;Change Output Dir 是指标签保存的指定文件夹(可自己选择),请注意,若要使标签和原图像分开保存,选择完标签保存路径后仍需要再次点击Save Automatically ,不然每次保存时还会跳出那些烦人的窗口。
示例:
我这里选择的是单个图像标注,完成后会让你填写对应的 label ,正确填写即可
labelimg的安装
同样按照 labelme 的方式创建 labelimg 环境
activate labelimg 激活labelimg 虚拟环境
输入以下代码进行下载:
pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install lxml -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install labelImg -i https://pypi.tuna.tsinghua.edu.cn/simple/
注意:可能遇到的问题
error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools
上面这个报错如果出现的话基本上是在安装PyQt5时缺少C++的插件造成。
解决办法如下(不唯一):
使用 WIN+R 输入 Powershell 输入以下命令
wget https://aka.ms/vs/17/release/vs_BuildTools.exe -o vs_BuildTools.exe ; cmd /c vs_BuildTools.exe
进入安装界面,注意:对v143生成工具的C++/CLI支持一定要勾选
安装完成后重新下载PyQt5即可
labelimg的使用
安装好后直接输入 labelimg 即可打开该软件
界面及功能与 labelme 基本一致,需要注意 Change Save Dir 是标签保存文件夹路径,标红的地方表示标签的格式,其具有 VOC、YOLO、ML三种格式,标注时请根据需要选择对应的标签格式。
示例:
json转png
一般来说我们标注的图像是JMG格式,标注后的图像为JSON格式,而我们传入图像数据进行模型训练的一般是JSON转换后的PNG格式图像。提供的转换脚本如下:
import base64
import json
import os
import os.path as osp
import numpy as np
import PIL.Image
from labelme import utils
from tqdm import tqdm
if __name__ == '__main__':
jpgs_path = "datasets/JPEGImages" # 原图jpg文件路径
pngs_path = "datasets/SegmentationClass" # 生成png存放路径
classes = ["_background_", "cat", "dog"] # 分类
count = os.listdir("./datasets/before/") # 标注文件路径
for i in tqdm(range(0, len(count))): # 打印进度条
path = os.path.join("./datasets/before", count[i]) # 标注文件路径
if os.path.isfile(path) and path.endswith('json'):
data = json.load(open(path))
if data['imageData']:
imageData = data['imageData']
else:
imagePath = os.path.join(os.path.dirname(path), data['imagePath'])
with open(imagePath, 'rb') as f:
imageData = f.read()
imageData = base64.b64encode(imageData).decode('utf-8')
img = utils.img_b64_to_arr(imageData)
label_name_to_value = {'_background_': 0}
for shape in data['shapes']:
label_name = shape['label']
if label_name in label_name_to_value:
label_value = label_name_to_value[label_name]
else:
label_value = len(label_name_to_value)
label_name_to_value[label_name] = label_value
# label_values must be dense
label_values, label_names = [], []
for ln, lv in sorted(label_name_to_value.items(), key=lambda x: x[1]):
label_values.append(lv)
label_names.append(ln)
assert label_values == list(range(len(label_values)))
lbl = utils.shapes_to_label(img.shape, data['shapes'], label_name_to_value)
PIL.Image.fromarray(img).save(osp.join(jpgs_path, count[i].split(".")[0] + '.jpg'))
new = np.zeros([np.shape(img)[0], np.shape(img)[1]])
for name in label_names:
index_json = label_names.index(name)
index_all = classes.index(name)
new = new + index_all * (np.array(lbl) == index_json)
utils.lblsave(osp.join(pngs_path, count[i].split(".")[0] + '.png'), new)
# print('Saved ' + count[i].split(".")[0] + '.jpg and ' + count[i].split(".")[0] + '.png')
其中 class 是需要分开的种类,jpgs_path 是分开后得到的原图像文件夹路径,pngs_path 是分开后得到的 PNG 格式图像文件夹路径,count 和 path 是需要进行转换的图像数据集路径。具体路径请根据自己的需求进行修改。
标注快捷操作
在这里补充一下标注时的部分快捷键和操作指南:
- 字母 D 下一张图像
- 字母 A 上一张图像
- Ctrl + s 保存标注好的标签(自动保存模式下会自动保存);
- Ctrl + d 复制当前标签和矩形框;
- Ctrl + Shift + d 删除当前图片;
- Ctrl + 滚动滑轮实现放大和缩小
- Ctrl + z 撤销上一步操作
- delete 删除标签
- 标注时尽量贴合目标边界线,尽可能的保证完全标注目标图像且标注区域足够小(不要有多余的部分)