Labelme数据标签制作
- 一、Labelme安装
- 1、Anaconda下载、安装
- 2、虚拟环境搭建及labelme包安装
- (1)虚拟环境搭建
- (2)labelme包安装
- 二、Labelme使用:标签制作
- 1、对有类别图像进行标注(做故障样本)
- 2、对无类别图像进行标注(做正样本)
- 三、Labelme生成的json文件转为png文件
- 1、处理单张json文件
- 2、批量处理json文件
- 3、生成的label批量存放
- 4、将label转换为黑白0-1mask
一、Labelme安装
1、Anaconda下载、安装
具体安装步骤,请参考我前面写的配置cuda环境时的博客
https://blog.csdn.net/qq_47191797/article/details/133678473?spm=1001.2014.3001.5502
2、虚拟环境搭建及labelme包安装
(1)虚拟环境搭建
安装好conda以后,可以在“开始”菜单栏里找到以下Anaconda Prompt打开
开始为Labelme创建虚拟环境,在Anaconda Prompt中运行以下代码(输入+回车即可):
conda create -n labelme python=3.6
其中labelme及python版本可根据自己需要自定义,如下图所示:
labelme虚拟环境创建成功,就可以激活该环境进行使用了(同样输入命令并回车)
conda activate labelme
(2)labelme包安装
安装labelme包命令:
conda install labelme
或者
pip install labelme
如果安装速度特别慢
,可以在pip命令后面加上国内镜像源
pip install labelme -i https://pypi.tuna.tsinghua.edu.cn/simple/
conda也可以添加国内镜像源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
#显示检索路径
conda config --set show_channel_urls yes
#显示镜像通道
conda config --show channels
二、Labelme使用:标签制作
在上述基础上,调用labelme包
【同样,依旧在“开始”菜单栏里找到Anaconda打开其中的Anaconda Prompt输入命令(如下图)】
激活创建的labelme虚拟环境,再通过labelme命令+回车即会弹出labelme窗口
打开数据图像后,点击鼠标右键选择所需的标签方式进行打标签,若采用第一个,请记得第一个点与最后一个点重合!!!!具体标注方式可百度~~~
标注制作完毕,既可以点击左上角“file”-“save”或者“save as” 将标注好的图像进行保存
注意:labelme保存的文件是json文件
1、对有类别图像进行标注(做故障样本)
- 打开所需要标注的图像文件夹---->选择图像---->右键---->create polygons(根据需求选择)---->对目标进行标注(起点终点需要重叠组成一个封闭图形)---->输入类别---->左上角file-save as保存即可!!!!得到json文件
2、对无类别图像进行标注(做正样本)
- labelme中打开图像打开文件夹,直接左上角file-save as保存即可(没有目标不需要进行标注),同样得到json文件
注意:如果是生成的json文件时无目标的label在转换成png格式时,可能会报错
UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 117: illegal multibyte sequence
具体解决办法如下:
进入你的anaconda安装路径下D:\Anaconda3\envs\labelme\Lib\site-packages\labelme\cli位置,找的json_to_dataset.py文件用pycharm打开!找到第39行代码:
data = json.load(open(json_file))
替换为:
data = json.load(open(json_file, encoding='gb18030', errors='ignore'))
三、Labelme生成的json文件转为png文件
1、处理单张json文件
首先,虽然labelme生成的json文件,但其实该模块下有将其转换为png格式的py文件,即你所安装的Anaconda路径中cli文件中json_to_dataset.py:
只需在labeme环境下,输入命令(路径切换为自己的安装路径)进入json_to_dataset.py所在位置
cd D:\Anaconda3\envs\labelme\Lib\site-packages\labelme\cli
然后,调用json_to_dataset.py文件处理json文件并生成png,后面为labelme生成的json文件路径:
labelme_json_to_dataset F:\crack\Label\Drying2\json_file\d02-001.json
注意:根据路径可发现:json_to_dataset.py只能依次处理一个json文件
即可得到一个包含四个文件的文件夹
分别为:原始数据图、label(一般数据标签只需要这个,可单独存放一个文件夹),label的txt文本格式信息、label与原始图覆盖重叠。
2、批量处理json文件
批量处理json文件
的方式如下:
import os
import glob
path = r'F:\crack\Label\Drying2\json_file' # 这里是指.json文件所在文件夹的路径
for json in os.listdir(path):
if json.endswith('.json'):
print(json)
json_file = glob.glob(os.path.join(path, json)) # 返回为列表
print(json_file)
# os.system("activate labelme")
for file in json_file: # 读取列表中路径
os.system("labelme_json_to_dataset.exe %s" % (file))
print(file)
3、生成的label批量存放
将json全部转为png格式后,为了方便使用label图,将每个数据图像的label图提出,存放在一个文件夹的方式如下:
import os
import shutil
path = 'F:/crack/Label/Drying2/json_file/'
dirpath = 'F:/crack/Label/Drying2/batch_label/'
for eachfile in os.listdir(path):
if os.path.isdir(path + eachfile):
if os.path.exists(path + eachfile + '/label.png'):
shutil.copy(path + eachfile + '/label.png', dirpath + eachfile.split('_')[0] + '.png')
print(eachfile)
print(eachfile.split('_')[0])
print(eachfile + ' successfully moved')
4、将label转换为黑白0-1mask
import os
import cv2
import numpy as np
bace_path = r"F:\crack\Label\Drying2\batch_label"
save_path = r"F:\crack\Label\Drying2\annotation"
for im in os.listdir(bace_path):
img = cv2.imread(os.path.join(bace_path, im))
b, g, r = cv2.split(img)
r[np.where(r != 0)] = 255
cv2.imwrite(os.path.join(save_path, im), r)
Record Over!