作者:AinneJJ | 来源:互联网 | 2023-10-13 13:37
本来打算是将这两部分分开的,但写完虚拟环境的创建似乎字数太少了,不过二者有关联,所以就放一起了。简单介绍一下,虚拟环境的创建有win11系统已经Ubuntu系统,labelme教程包括了下载及其使用的全部流程,以及我本人平时标注时使用的案例和快捷键,文末分享了json转png的脚本。希望这个教程能解决你的问题。
目录
Anaconda创建虚拟环境
win 11系统
Ubuntu系统
labelme的下载以及使用
1、激活环境
2、下载指定版本
3、创立图片文件夹
4、使用labelme标注
5、使用脚本将json转为png
Anaconda创建虚拟环境 win 11系统 我的是win11系统,可以点击搜索。或者是按下win+s键打开。
在里面输入Anaconda Prompt
初始是这样的:
(base) C:\Users\honor>
(base)是一个基础的环境,在这里我们先查看我们的虚拟环境
输入conda env list
除了base,其他都是我创建的虚拟环境,当然有的一直没有用。
然后我们需要创建自己的环境:conda create -n env_name python=3.7
env-name就是环境的名称,可随意更改,python=3.7是环境安装的python版本,也可按需更改,高版本并不好,常常会出现一些bug,我最爱用的还是3.7及其下的版本。
激活环境:activate env_name ,然后你就可以根据需要pip下载包了 退出环境:deactivate ,我通常会省去这步,直接activate 其他的虚拟环境名,这样方便转换到其他虚拟环境 删除虚拟环境:conda remove -n env_name --all
Ubuntu系统 当然啦,由于我们实验室有工作站,是Ubuntu系统的,情况类似,只是在激活环境和退出环境时,前面要加上source
激活环境:source activate env_name 退出环境:source deactivate labelme的下载以及使用 首先,要安装好虚拟环境,如上所示,我的虚拟环境就叫labelme,专门使用它
1、激活环境 输入:activate labelme
2、下载指定版本 在该环境下,输入命令行
pip install labelme==3.16.7
据前辈所说,有些版本的labelme会发生错误,具体的错误为:Too many dimensions:3 > 2,
总之,这个下就行了。由于我的已经安装好了,所以这里不展示了。
3、创立图片文件夹 在一个文件下,我希望你有以下三个文件:
不管你的命名的是什么,搞清楚它们的作用就行了,pic是你需要标注的图片存放位置,json是你标注后生成的文件,lab是通过脚本将json文件转化为png格式的图片。
内容展示 4、使用labelme标注 激活环境后,直接输入labelme。
(labelme) C:\Users\honor>labelme
点击右边导航栏中顺数第二个,即可打开你需要标注的图片所在的文件夹进行批量标注。
我拿网上的数据集CrackForest,做为示范。
选中你要标记的图片,点击Create Polygons(顺数第七个)。
原始图片是这样的,在标注时一定要尽可能的放大最大去标注,你的预测效果与你的标注息息相关。如下图所示
记住一定要闭环,最后一个点一定要与起点相接。这里假设我们完成后,他就会出现这样的弹窗。
在这里的crack是我们自己输入的,输入一次后会默认,当然多个物体标注时,在下面的白色画布部分会有你想要分类的记录。
如果你觉得你自己有些点标注的地方不是很如意,可以点击Edit Ploygons(顺数第八个)。当你触碰到点时对应的点会变红变大,如果你移动到了中间的红色区域,你可以对其进行拖拽,对不满意的地方进行修改,这是其中的一个修改方法。
有些快捷键是你需要掌握的:
Ctrl+z :撤回上一个标注的点,不要一直按,它可能会同时将你已经标注好的区域全部撤回。Ctrl+鼠标滚轮 :对图片进行放大缩小Alt+鼠标滚轮 :左右横向移动鼠标滚轮 :上下移动Ctrl+s :保存完成一张图后,一定一定要保存呀,位置就在json文件夹当中,保存成功后,右下角的File list对应图片的位置会有蓝底白色的小勾。
5、使用脚本将json转为png Json2Image.py
import base64 import json import os import os.path as osp import numpy as np import PIL.Image from labelme import utils if __name__ == '__main__': jpgs_path = "E:\Deeplearning\Road_Detect_Project\THREE_ZJR\zjr" pngs_path = "E:\Deeplearning\Road_Detect_Project\THREE_ZJR\png" # classes = ["_background_","aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"] # classes = ["_background_","cat","dog"] classes = ["_background_", "crack"] count = os.listdir("E:\Deeplearning\Road_Detect_Project\THREE_ZJR\json") for i in range(0, len(count)): path = os.path.join("E:\Deeplearning\Road_Detect_Project\THREE_ZJR\json", count[i]) print(count[i]) if os.path.isfile(path) and path.endswith('json'): data = json.load(open(path), strict=False) 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')
在这里面,凡是出现了路径都要改,对应的部分一定要分清楚,然后所需要分的类型也要修改,也就是classes变量。接着点击运行就可以了。我的建议呢就是每个工程文件下都留有这个py文件,有好处的。