【图像语义分割】Label data的标注--Labelme(python)

图像语义分割是一种pixel-wise级的一种图像分类操作,其目的是在图像中上的同一个类别上打上相同的label,以表示这个类别是同一类。

在训练自己的数据集中,语义分割最重要且最基础的一步便是对图像进行标注,以训练得到自己的模型。

在标注图像中,MIT开源了一款标注软件,Labelme.
http://labelme2.csail.mit.edu/Release3.0/index.php?message=1
个人觉得不是特别好用,需要和Matlab toolbox 联合使用。

在这推荐一个python版的labelme,链接:
https://github.com/wkentaro/labelme

我在测试该软件的时候,python3环境下,发现有几处bug,已经报给作者了。所以如果最近使用的话,还是推荐在python2环境使用。
(第一个bug,作者已经解决了,应该不久就完美支持python3)

安装的话,作者的readme写的非常详细了,由于作者没有windows环境,因此没有对其进行过测试。我在这篇blog上补充下win10环境的anaconda安装环境,
其安装步骤完全类似于在其他各个平台上的anaconda环境下的labelme安装:

conda create --name=labelme python=2.7
source activate labelme
conda install pyqt
pip install labelme

软件的使用

可直接参考作者的readme,我这里仅仅是对其补充

作者已经将这个软件变得非常傻瓜式的操作:
这里写图片描述

在View处的Andvanced mode可以切换模式。
通过open读取文件,选择create polygons对想要的区域进行编辑:
这里写图片描述
这里仅选择了一个eye,然后保存即可得到一个json文件。

我们的目的是得到label data,json对我们来说还是要转换为单通道的image

终端输入:

labelme_json_to_dataset <文件名>.json

即可得到一个文件夹,有四个文件,*.png, info.yaml , label.png, label_viz.png。
其中label.png即是我们要的label_data.

看起来是全黑的,然而读到像素中,是可以看到对相同类别的文件进行标注了。
我这里用matlab,进行突出对比度显示为:
这里写图片描述

标注已经完成!

可能需要批量转换的话,就需要自己写shell 脚本会方便一些。

  • 21
    点赞
  • 181
    收藏
    觉得还不错? 一键收藏
  • 131
    评论
以下是一个示例的Python代码,用于对指定类别的labelme标注语义分割数据进行增强: ```python import os import cv2 import numpy as np def semantic_segmentation_augmentation(directory, save_directory, target_class): # 遍历指定目录下的文件 for filename in os.listdir(directory): if filename.endswith(".json"): # 查找以.json结尾的文件 json_file = os.path.join(directory, filename) image_file = json_file.replace(".json", ".jpg") # 将.json替换为.jpg if os.path.isfile(image_file): # 检查对应的图片文件是否存在 # 读取图片文件 image = cv2.imread(image_file) height, width, _ = image.shape # 读取JSON文件并获取标注信息 with open(json_file, 'r') as f: json_data = json.load(f) # 创建空白的语义分割图像 seg_image = np.zeros((height, width), dtype=np.uint8) # 处理每个标注对象 for shape in json_data['shapes']: class_name = shape['label'] if class_name == target_class: points = shape['points'] polygon_points = np.array(points, dtype=np.int32) cv2.fillPoly(seg_image, [polygon_points], 255) # 将增强后的语义分割图像保存到指定目录 save_path = os.path.join(save_directory, filename.replace(".json", ".png")) cv2.imwrite(save_path, seg_image) print(f"语义分割图像保存成功:{save_path}") else: print(f"找不到对应的图片文件:{image_file}") # 指定包含labelme标注文件的目录和保存增强后数据的目录 directory = "path/to/labelme/files" save_directory = "path/to/save/augmented/data" # 指定目标类别名称 target_class = "class_name" semantic_segmentation_augmentation(directory, save_directory, target_class) ``` 你需要将代码中的`"path/to/labelme/files"`替换为包含标注文件的实际目录路径,将`"path/to/save/augmented/data"`替换为你想要保存增强后数据的目录路径,将`"class_name"`替换为你想要增强的目标类别名称。运行代码后,它会遍历目录中的所有.json文件,读取标注信息并创建相应的语义分割图像,然后将增强后的语义分割图像保存到指定目录。 希望这可以帮到你!如果有任何问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 131
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值