安装labelme
程序员文章站
2024-03-15 10:39:29
...
目录
这个是语义标注的工具
安装labelme
安装labellme可以直接pip安装pip install labelme -i https://pypi.douban.com/simple
我在安装的报了如下的错误,setuptools没有属性,
AttributeError: module 'setuptools.build_meta' has no attribute '__legacy__'
于是升级了一下setuptools,然后再安装,成功了
pip install --upgrade setuptools
使用labelme
- 在命令行输入
lableme
制作完会在图片的目录生成对应的json格式的文件。
- 把json文件转为对应的标注的图片,修改了原来的labelme里面的json_to_dataset.py文件,运行下面这个会生成如下结构的文件,1、2等等是保存每张图像的原图、标签图、标签的名字,因为每个文件都是独立的,标签也是独立,因此生成的还不能直接使用。需要经过不揍3转换。
import base64
import json
import os
import os.path as osp
import imgviz
import PIL.Image
from labelme.logger import logger
from labelme import utils
def main(input_file,save_path):
count = 1
for json_path in os.listdir(input_file):
if json_path.endswith('.json'): # 找以.json结尾的文件
json_file = os.path.join(input_file,json_path)
data = json.load(open(json_file))
imageData = data.get('imageData')
out_dir = os.path.join(save_path,str(count))
if not os.path.exists(out_dir):
os.makedirs(out_dir)
if not imageData:
imagePath = os.path.join(os.path.dirname(json_file), 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 sorted(data['shapes'], key=lambda x: x['label']):
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
lbl, _ = utils.shapes_to_label(
img.shape, data['shapes'], label_name_to_value
)
label_names = [None] * (max(label_name_to_value.values()) + 1)
for name, value in label_name_to_value.items():
label_names[value] = name
lbl_viz = imgviz.label2rgb(
label=lbl, img=imgviz.asgray(img), label_names=label_names, loc='rb'
)
orgin_image_path = json_path.split('.')[0] +'.jpg'
PIL.Image.fromarray(img).save(osp.join(out_dir,orgin_image_path ))
utils.lblsave(osp.join(out_dir, json_path.split('.')[0]+'_label.png'), lbl)
PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir, 'label_viz.png'))
with open(osp.join(out_dir, 'label_names.txt'), 'w') as f:
for lbl_name in label_names:
f.write(lbl_name + '\n')
count +=1
print('结束')
if __name__ == '__main__':
input_file = './1' # 图片的路径,和json,就是制作标签的路径
save_path = './outputs' # 输出的文件夹
main(input_file,save_path)
- 上面生成的每个图像都是从0开始,不能直接使用需要使用下面的这个转换,生成可以使用的
from PIL import Image
import os
import numpy as np
save_path = './outputs' # 上面输出的文件
# 数据集文件夹
if not os.path.exists('./dataset'):
os.mkdir('./dataset')
original_image_dir= './dataset/images'
if not os.path.exists(original_image_dir):
os.makedirs(original_image_dir)
label_image_dir = './dataset/labels'
if not os.path.exists(label_image_dir):
os.makedirs(label_image_dir)
# 保存所有的标签
def make_all_label_name_txt():
with open('./dataset/all_label_names.txt','w',encoding='utf-8') as fw:
label_set =set()
label_names_list = ['_background_']
label_set.add('_background_')
for per_img_dir in os.listdir(save_path):
with open(os.path.join(save_path,per_img_dir,'label_names.txt'),'r',encoding='utf-8') as fr:
label = fr.readlines()
for i in label:
i = i.strip('\n')
if i in label_set:
pass
else:
label_set.add(i)
label_names_list.append(i)
for label in label_names_list:
fw.write(label+'\n')
print('所有的标签',label_names_list)
def make_label():
"""因为每个图像的标签都是从0开始,需要自己修改"""
with open('./dataset/all_label_names.txt','r',encoding='utf-8') as f:
label_list = [i.strip() for i in f.readlines()]
for per_img_dir in os.listdir(save_path):
for img_path in os.listdir(os.path.join(save_path,per_img_dir)):
if img_path.endswith('.jpg'):
origin_image_path = os.path.join(save_path,per_img_dir,img_path)
img = Image.open(origin_image_path)
img.save(os.path.join(original_image_dir,img_path))
elif img_path.endswith('_label.png'):
label_image_path = os.path.join(save_path,per_img_dir,img_path)
# 打开每个图像的label_names.txt
with open(os.path.join(save_path,per_img_dir,'label_names.txt'), 'r', encoding='utf-8') as perf:
per_label_list = [i.strip() for i in perf.readlines()]
# 打开图像
img = Image.open(label_image_path)
img_arr = np.array(img)
for i, label_val in enumerate(per_label_list):
img_arr[img_arr==i] = label_list.index(label_val)
img_arr = np.asarray(img_arr, np.uint8)
img =Image.fromarray(img_arr)
img.save(os.path.join(label_image_dir,img_path))
make_all_label_name_txt()
make_label()
制作完了标签是黑色的不要怀疑,自己可以根据指定的色彩替换像素,看着直观
上一篇: Keras框架使用Vnet2d模型对遥感图像语义分割
下一篇: vue-组件的三种注册形式
推荐阅读
-
spark (3)Spark Standalone集群安装介绍 博客分类: spark sparkHAzookeeperstandalone
-
安装labelme
-
sqoop2 安装 与使用 博客分类: linuxmysqlhivehadoopsqoop linuxmysqlhivehadoopsqoop
-
全志编译环境安装 博客分类: 全志编译环境安装 全志编译环境安装
-
ElasticSearch2.4.0单机版及集群安装 博客分类: Search elasticsearchelasiicsarch v2.4cluster
-
较为详细完整的Tensorflow-gpu环境安装教程
-
hive-ha 安装 博客分类: linuxhive linuxhivehahadoophdfs
-
CDH之安装部署的坑 博客分类: 大数据技术 CDH部署CDH异常
-
安装cassandra CassandraRubyFacebookTwitterWindows
-
如何安装和配置Cassandra 博客分类: 数据库 CassandraNoSQLLinuxApacheWindows