热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

虚拟环境的创建以及labelme的使用教程

本来打算是将这两部分分开的,但写完虚拟环境的创建似乎字数太少了,不过二者有关联,所以就放一起了。简单介绍一下,虚拟环境的创建

本来打算是将这两部分分开的,但写完虚拟环境的创建似乎字数太少了,不过二者有关联,所以就放一起了。简单介绍一下,虚拟环境的创建有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

不管你的命名的是什么,搞清楚它们的作用就行了,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文件,有好处的。


推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
author-avatar
AinneJJ
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有