虚拟环境的创建以及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 ospimport numpy as np
import PIL.Image
from labelme import utilsif __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 denselabel_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文件,有好处的。
相关文章:
虚拟环境的创建以及labelme的使用教程
本来打算是将这两部分分开的,但写完虚拟环境的创建似乎字数太少了,不过二者有关联,所以就放一起了。简单介绍一下,虚拟环境的创建有win11系统已经Ubuntu系统,labelme教程包括了下载及其使用的全部流程,以及…...
CSS中的BFC详细讲解(易懂)
带你用最简单的方式理解最全面的BFC~~~1.先了解最常见定位方案普通流元素按照其在 HTML 中的先后位置至上而下布局行内元素水平排列,直到当行被占满然后换行,块级元素则会被渲染为完整的一个新行所有元素默认都是普通流定位浮动元素首先按照普通流的位置…...
华为3面,官网显示面试通过了...开始泡池子,进入漫长等待期
背景: 现在双非本科,非计算机科班,有算法方面的奖,有嵌入式开发经历,官网显示面试通过,短信说录用情况在十个工作日内告知,看别人的说法应该是泡池子了。 全程视频面试,一天面完三…...
【新2023】华为OD机试 - 构成的正方形数量(Python)
构成的正方形数量 题目 输入 N 个互不相同的二维整数坐标, 求这 N 个坐标可以构成的正方形数量。(内积为零的两个向量垂直) 输入 第一行输入为 N,N 代表坐标数量,N为正整数。N <= 100 之后的 K 行输入为坐标 x y以空格分隔,x, y 为整数, -10 <= x, y <= 10 输…...
ElasticSearch之RestClient操作索引库和文档
前言:上文介绍了使用DSL语言操作索引库和文档,本篇文章将介绍使用Java中的RestClient来对索引库和文档进行操作。 希望能够加深自己的印象以及帮助到其他的小伙伴儿们😉😉。 如果文章有什么需要改进的地方还请大佬不吝赐教&#x…...
Lp正则化
一、L1 和 L2范数(norm)A norm is a mathematical thing that is applied to a vector. The norm of a vector maps vector values to values in [0,∞). In machine learning, norms are useful because they are used to express distances: this vect…...
云原生 -- Docker进阶(Docker-compose,Docker网络简单介绍)
Dockerfile的构建过程 每条保留字段必须为大写字母。Dockerfile每行只支持一条指令,但是每条指令可以带多个参数,并且每条保留字指令后面至少要带有一个参数。从上到下依次执行。每条指令都会创建一个新的镜像层,并提交新的镜像。 大致流程…...
taskset命令:让进程运行在指定CPU上
1. 操作场景 taskset命令,可用于进程的CPU调优,可以把云服务器上运行的某个进程,指定在某个CPU上工作。 本节操作指导用户使用taskset命令让进程运行在指定CPU上。 2. 操作步骤 2.1. 执行如下命令,查看云服务器CPU核数。 cat …...
Pod基本概念与Pod应用生命周期
Pod是一个逻辑抽象概念,kubernetes创建和管理的最小单元,一个Pod由一个容器或多个容器组成。特点:一个Pod可以理解为是一个应用实例,提供服务Pod中容器始终部署在一个Node上Pod中容器共享网络、存储资源Pod主要用法:运…...
DDL 数据定义语言
DDL 数据定义语言 目录概述一、库的管理1、库的创建2、库的修改【一般不修改,容易出现错误】3、库的删除二、表的管理【重要】1、表的创建2、表的修改3、表的删除4、表的复制 【可以跨库复制】练习题概述 数据定义语言 库和表的管理 一、库的管理 创建、修改、删除…...
设计模式概述
1. 概念 设计模式概念的提出: 设计模式最早于1977年在建筑设计行业中被 克里斯托夫亚历山大(Christopher Alexander) 在他的著作 《建筑模式语言:城镇、建筑、构造》 中提出。 软件工程界在1990年开始了设计模式话题的研…...
华为OD机试 - 箱子之形摆放(Python)| 真题+思路+考点+代码+岗位
箱子之形摆放 题目 有一批箱子(形式为字符串,设为str), 要求将这批箱子按从上到下以之字形的顺序摆放在宽度为 n 的空地,请输出箱子的摆放位置。 例如:箱子ABCDEFG,空地宽度为3,摆放结果如图: 则输出结果为: AFG BE CD 输入 输入一行字符串,通过空格分隔,前面部…...
第九章:创建用户和用户权限
Windows:创建用户:第一种方法创建用户:先点右上角的工具,然后点击AD用户和计算机双击skills.com打开目录,再双击Users,进入文件夹中在右框中右击空白处,新建用户填充好用户信息后点击下一步然后…...
如何制定人生目标
一、如何分解目标 人生终极目标并不一定要多详细精确,但一定要被分解,要分成长期目标、中期目标和一系列的短期目标,其中短期目标又可以分解为你能够马上操作的一个个的小目标。 二、目标制定的原则 目标制定遵循 SMART-W 原则: …...
用户认证概述
文章目录一、用户身份认证1.1 单一服务器模式1.2 SSO(Single Sign On)模式1.3 Token模式二、JWT令牌2.1 JWT 令牌说明2.2 JWT令牌的组成2.3 JWT 问题和趋势2.4 JWT 测试一、用户身份认证 1.1 单一服务器模式 一般过程如下: 用户向服务器发送…...
XQuery FLWOR + HTML
XML 实例文档 我们将在下面的例子中继续使用这个 "books.xml" 文档(与上一节中的文件相同)。 在您的浏览器中查看 "books.xml" 文件。 在一个 HTML 列表中提交结果 请看下面的 XQuery FLWOR 表达式: for $x in doc(&…...
MySQL用户管理
文章目录MySQL用户管理用户用户信息创建用户修改用户密码删除用户数据库的权限MySQL中的权限给用户授权回收权限MySQL用户管理 与Linux操作系统类似,MySQL中也有超级用户和普通用户之分。如果一个用户只需要访问MySQL中的某一个数据库,甚至数据库中的某…...
C++【模板初阶】
✨个人主页: Yohifo 🎉所属专栏: C修行之路 🎊每篇一句: 图片来源 No one saves us but ourselves, no one can and no one may. We ourselves must walk the path. 除了我们自己,没有人能拯救我们…...
华为OD机试 - 磁盘容量(Python)| 真题+思路+考点+代码+岗位
磁盘容量 题目 磁盘的容量单位常用的有M、G、T 他们之间的换算关系为1T =1024G,1G=1024M 现在给定n块磁盘的容量,请对他们按从小到大的顺序进行稳定排序 例如给定5块盘的容量 5 1T 20M 3G 10G6T 3M12G9M 排序后的结果为 20M 3G 3M12G9M 1T 10G6T 注意单位可以重复出现 上述…...
更专业、安全、可控!政企都选择WorkPlus私有化部署
现如今政企机构在信息化建设的过程中,内部的沟通协作都离不开即时通讯软件。但大多数企业使用的即时通讯软件都是Saas部署的,虽然使用Saas部署产品成本低,又方便快捷,但还是建议企业有条件最好使用私有化部署的即时通讯软件&#…...
[SDX12] X12 USB to LTE IPA概率不生效问题分析及优化策略
问题描述 在测试USB to LTE的流量过程中,发现IPA概率失效,正常可以跑到320Mbps,但是跑流1分钟左右会出现IPA失效及跑流掉坑的情况。 问题log dmesg log 3,1862,149793394,-;ipa ipa3_ioctl:3564 using obselete command: IPA_IOC_RM_ADD_DEPENDENCY 3,1863,149793549,-;ipa …...
mysql8.0(单表查询与多表拆线)
目录 单表查询 1、显示所有职工的基本信息。 2、查询所有职工所属部门的部门号,不显示重复的部门号。 3、求出所有职工的人数。 4、列出最高工资和最低工资。 5、列出职工的平均工资和总工资。 6、创建一个只有职工号、姓名和工作时间的新表&…...
用于汽车传感器的混合点云语义压缩:性能评估
Hybrid Point Cloud Semantic Compression for Automotive Sensors: A Performance Evaluation https://arxiv.org/pdf/2103.03819.pdf 在自动驾驶中,车辆与车辆之间的信息共享起着重要作用。在所有传感器中,激光雷达产生的3D点云的数据量通常较高。因…...
最流行十大在线客服系统排行榜-市场常见客服系统软件排行-2023最新
2023年榜单规则依据 在线客服系统十大品牌榜数据由CNPP品牌榜中榜大数据「研究院」和CN10排排榜技术「研究院」通过资料收集整理,并基于大数据统计及人为根据市场和参数条件变化的分析研究专业测评而得出,是大数据、云计算、数据统计真实客观呈现的结果&…...
算法笔记(六)—— 二叉树相关概念及经典算法题
二叉树的相关概念(判断方式) 1. 搜索二叉树:对每棵子树,左树比头小,右树比头大。 中序遍历,判断是否升序 2. 完全二叉树:最后一层满或从左到右遍满。 宽度遍历,如果有节点有右孩子…...
redux全网最详细教程
一.路由懒加载 关键点: lazy懒加载 Suspense组件(添加加载提示) utils文件夹 –LazyLoad.js //lazy懒加载 Suspense 组件(添加加载提示) import {lazy,Suspense} from react export default function LazyLoad(url)…...
华为OD机试 - 匿名信(Python)| 真题+思路+考点+代码+岗位
匿名信 题目 电视剧《分界线》里面有一个片段,男主为了向警察透露案件细节,且不暴露自己,于是将报刊上的字减下来,剪拼成匿名信。 现在又一名举报人,希望借鉴这种手段,使用英文报刊完成举报操作。 但为了增加文章的混淆度,只需满足每个单词中字母数量一致即可,不关注…...
【Python】编写代码实现指定下标值顺序进行正序和倒序排序算法编程
🎉🎉 在本次python文章中,主要通过定义一个排序方法,实现一组数列能够按照另一组数列指定的位置进行重新排序输出,默认正序排序,可通过True表示逆序输出 目录1、知识点2、数列和元组1)错误遍历方…...
Sitara™处理器的产品开发路线图
Sitara™处理器的产品开发路线图概述Evaluation Phase(评估阶段)Board Development Phase(硬件发展阶段,硬件设计人员应重点关注这个阶段)Software Development Phase(软件发展阶段)Product Phase/SW Lifecycle概述 一般情况下,会存在四个主要的发展阶段…...
岗位来啦-华为研发OD招聘
研发OD招聘 ★★关于我们★★ 万物互联时代已到来,无线通信技术正在重塑世界。作为行业领导者,华为无线致力于通过移动创新消除数字鸿沟,构建万物互联的智能世界。基于5G的技术,家庭无线宽带接入、车联网、云AR/VR、eMBB高清视频…...
淄博网站建设设计/百度网盘官网入口
描述 输入一个字符串,以回车结束(字符串长度<100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。 输入 …...
qq上网站做我女朋友/各种资源都有的搜索引擎
题目 题意:长度为n的数轴 每次移动不能留在原地 输出一种走k次刚好走s的方法 很容易看出 k<s||k*(n-1)>s 的时候是有解的 然后后面怎么做呢? 大模拟是半天调不对的。。。思维是跟不上想不到的。。 就只能看题解混日子这个样子。。。。 由上面…...
石家庄长安区网站建设公司/推广运营是做什么的
call和apply用来调用函数,并用指定对象(第一个参数)替换函数的 this 值,同时用指定数组替换函数的参数。注:也可以不指定参数,此时只是单纯的调用函数,如:fun.call() 语法࿱…...
公众号和网站先做哪个比较好/最新军事消息
以下理论部分转自http://www.cnblogs.com/goodness/archive/2010/05/04/1727141.html,自己就是一步一个境界地做,把每境界的代码记录下来。 研究经典问题,空说不好,我们拿出一个实际的题目来演绎。八数码问题在北大在线测评系统中…...
北京网站设计公司jq成都柚米科技15/电商网站排名
--python 导入模块 import 理解-----------------------------------2014/03/18python 导入一个模块的过程要求有一个叫做“路径搜索”的操作过程,即是在文件系统“预先设定的区域”查找模块文件以加载模块的过程。这个预先设定的区域其实是python搜索路径的一组目录…...
运城做网站/百度ai营销中国行
ORACLE中用rownum分页并排序的SQL语句 以前分页习惯用这样的SQL语句: select * from (selectt.*,rownum row_num frommytable t order by t.id) b where b.row_num between 1 and 10结果发现由于该语句会先生成rownum 后执行order by 子句,因而排序结果根本不对,后来在GOOGLE上…...