首页 前端知识 Labelme做数据标签、批量处理json文件转换为png方法

Labelme做数据标签、批量处理json文件转换为png方法

2024-04-29 12:04:53 前端知识 前端哥 344 267 我要收藏

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!

转载请注明出处或者链接地址:https://www.qianduange.cn//article/6368.html
评论
发布的文章

HTML5本地存储

2024-05-06 09:05:10

HTML5和CSS3新特性

2024-04-16 17:04:36

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!