技术标签: 深度学习
安装anaconda啥的,新建一个虚拟环境后
pip install labelme
使用命令打开labelme
activate 环境
labelme
点击open或者opendir打开文件或文件夹,点击create ploygons对图片进行标记,同一类的用同样的字母或者数字表示。
标记完成后会在图片文件夹下生成 ,json 文件,包含了图片和标记信息,选择所有的 .json 文件移动到一个新的文件夹保存。
json文件里面已经有图片的所有信息了,所以只需要json文夹就能制作所需的东西
python labelme_json_to_dataset.exe 名字.json
但是上面这样只能一个一个手动打进去生成,所以考虑一下批量生成
import os
import time
# 注意:使用前先把所有json文件重新按顺序命名
# 命令行里cd到当前文件夹
# 然后python process.py开始转换
# 文件数量
picture_num = 251
t = time.time()
for i in range(251):
# 在命令行中执行引号里面的语句:循环转换数据集
os.popen("python labelme_json_to_dataset.exe %d.json" % (i+1))
# 暂停11s,不然内存会炸,视cpu减小
time.sleep(11)
print("time-consuming is %f" % (time.time()-t))
运行时间有点长,因为每个都有点慢…这个方法很蠢,用的是本来的自带的程序,肯定还有其他更好的办法,不过我是个菜鸡,贪方便就先这样弄吧,以后随缘找到其他方法再弄下。
刚找到一个比较高端的代码:
https://blog.csdn.net/weixin_41319671/article/details/82684334
2019-7-1:又尝试照着大佬的代码改了下
import json
import matplotlib.pyplot as plt
import numpy as np
import os
import cv2
from labelme import utils
json_path = "./json_file/"
file_list = os.listdir(json_path)
for loop_count in range(0, len(file_list)):
# 读取文件名
json_file = os.path.join(json_path, file_list[loop_count])
# 判断是否为 文件 (不对文件夹进行处理)
if os.path.isfile(json_file):
# 打开,order:RGB
data = json.load(open(json_file))
''' 其他
data['imageData'] # 原图数据 str
data['shapes'] # 每个对像mask及label list
len(data['shapes']) # 返回对象个数 int
data['shapes'][0]['label'] # 返回第一个对象的标签 str
data['shapes'][0]['points'] # 返回第一个对象的边界点 list
data['shapes'][0]['points'][0] # 返回第一个对象的边界点第一个点 list
data['imagePath'] # 原图路径 str
data['fillColor'] # 填充颜色(边界内部) list
data['lineColor'] # 边界线颜色 list
'''
# write_to_json(save_dict=data, save_path="save_json_test.json")
# 把json文件中的二进制图片格式转化为array数组形式
img = utils.img_b64_to_arr(data['imageData'])
# 转换label(重要)
# lbl 为与输入图片大小一致的,按标记赋值的二维数组(也就是训练要用到的mask):
# 如一共有5类,则背景为0,第一类范围:1,第二类范围:2, 第三类范围:3,... 由此类推
# lbl_names 是不同标签的名称,如第一类(json中的标记名):1
#
# 解析'shapes'中的字段信息,解析出每个对象的mask与对应的label
# lbl存储 mask,lbl_names 存储对应的label
# lal 像素取值 0、1、2 其中0对应背景,1对应第一个对象,2对应第二个对象
# 使用该方法取出每个对象的mask mask=[] mask.append((lbl==1).astype(np.uint8))
# 解析出像素值为1的对象,对应第一个对象 mask 为0、1组成的(0为背景,1为对象)
# lbl_names ['background','cat_1','cat_2']
lbl, lbl_names = utils.labelme_shapes_to_label(img.shape, data['shapes'])
# 取出标签的key和value
captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]
# 画出原图上面覆盖有lbl的多层的图(用处不大)
lbl_viz = utils.draw_label(lbl, img, captions)
# lbl_names[0] 默认为背景,对应的像素值为0
# 解析图片中的对象 像素值不为0(0 对应背景)
mask = []
class_id = []
# 跳过第一个class(默认为背景)
for i in range(1, len(lbl_names)):
# 解析出每种标记对应的图,如:第一种对象标记为1,那么就单独取出第一种对象组成一张mask
# (lbl == i)会把对应位置变成True,用astype转为int8
# 此时对应位置置1,其余为0
mask.append((lbl == i).astype(np.uint8))
# mask与clas 一一对应
class_id.append(i)
mask = np.transpose(np.asarray(mask, np.uint8), [1, 2, 0]) # 转成[h,w,instance count]
class_id = np.asarray(class_id, np.uint8) # [instance count,]
# class_name = lbl_names[1:] # 不需要包含背景
# 获取标记值(原json文件中的)
class_name = [key for key in lbl_names.keys()]
# 删掉背景标记
del class_name[0]
# 保存文件
# os.path.basename:返回path最后的文件名,如path='D:\CSDN'-> os.path.basename(path)=CSDN
out_dir = os.path.basename(file_list[loop_count]).replace('.', '_')
# os.path.dirname:去掉文件名,返回目录
out_dir = os.path.join(os.path.dirname(file_list[loop_count]), out_dir)
if not os.path.exists(out_dir):
os.mkdir(out_dir)
cv2.imwrite(os.path.join(out_dir, 'img.png'), cv2.cvtColor(img, cv2.COLOR_RGB2BGR))
for i in range(len(lbl_names)-1):
# 转化为二值图
_, mask[:,:,i] = cv2.threshold(mask[:,:,i], 0.5, 255, type=cv2.THRESH_BINARY)
cv2.imwrite(os.path.join(out_dir, 'label%d.png' % i), mask[:,:,i])
cv2.imwrite(os.path.join(out_dir, 'label_viz.png'), lbl_viz)
with open(os.path.join(out_dir, 'label_names.txt'), 'w') as f:
for lbl_name in lbl_names:
f.write(lbl_name + '\n')
print('Saved to: %s' % out_dir)
参考:
https://www.cnblogs.com/roscangjie/p/10737053.html
https://blog.csdn.net/wc781708249/article/details/79486819
文章浏览阅读1.6k次,点赞12次,收藏7次。大家好!大四的同学们毕业设计即将开始了,你们做好准备了吗?学长给大家精心整理了最新的计算机毕业设计选题,希望能为你们提供帮助。如果在选题过程中有任何疑问,都可以随时问我,我会尽力帮助大家。在选择毕业设计选题时,有几个要点需要考虑。首先,选题应与计算机专业密切相关,并且符合当前行业的发展趋势。选择与专业紧密结合的选题,可以使你们更好地运用所学知识,并为未来的职业发展奠定基础。要考虑选题的实际可行性和创新性。选题应具备一定的实践意义和应用前景,能够解决实际问题或改善现有技术。
文章浏览阅读3.4k次。摘要:随着电信业务的发展和电信企业经营方式的转变,DCN网络的定位发生了重大的演变。本文基于这种变化,重点讨论DCN网络的规划方法和运维管理方法。Digest: With the development oftelecommunication bussiness and the change of management of telecomcarrier , DCN’s role will cha..._电信dcn
文章浏览阅读442次。深度学习一部分矩阵求导知识的搬运总结_向量变元是什么
文章浏览阅读8次。近期,裁员的公司越来越多今天想和大家聊聊职场人的新出路。作为席卷全球的新概念ESG已然成为当前各个行业关注的最热风口目前,国内官方发布了一项ESG新证书含金量五颗星、中文ESG证书、完整ESG考试体系、名师主讲...而ESG又是与人力资源直接相关甚至在行业圈内成为大佬们的热门话题...当前行业下行,裁员的公司也越来越多大家还是冲一冲这个新兴领域01 ESG为什么重要?在双碳的大背景下,ESG已然成...
文章浏览阅读356次。云计算快速渗透到众多的行业,使中小企业受益于技术变革。最近微软SMB的一项研究发现,到今年年底,78%的中小企业将以某种方式使用云。企业希望投入少、收益高,来取得更大的发展机会。云计算将中小企业信息化的成本大幅降低,它们不必再建本地互联网基础设施,节省时间和资金,降低了企业经营风险。科技创新已成时代的潮流,中小企业上云是创新前提。云平台稳定、安全、便捷的IT环境,提升企业经营效率的同时,也为企业..._系统上云的前后对比
文章浏览阅读899次。出现选网卡的时候无法选中,这里应该是一个bug。3.保存退出,重启虚拟机即可。1.先随便选择一个网卡。2.勾先取消再重新勾选。_esxi虚拟机无法联网
文章浏览阅读913次。在LaTeX中,可在.tex文件的同一级目录下创建egbib.bib文件,所有的参考文件信息可以统一写在egbib.bib文件中,然后在.tex文件的\end{document}前加入如下几行代码:{\small\bibliographystyle{IEEEtran}\bibliography{egbib}}即可在文章中用~\cite{}宏命令便捷的插入文内引用,且文章的Reference部分会自动排序、编号。..._egbib
文章浏览阅读950次。目录:Unity Shader - 知识点目录(先占位,后续持续更新)原文:Predefined Shader preprocessor macros版本:2019.1Predefined Shader preprocessor macros着色器预处理宏Unity 编译 shader programs 期间的一些预处理宏。(本篇的宏介绍随便看看就好,要想深入了解,还是直接看Unity...
文章浏览阅读195次。本文目录:一、大数据时代还需要数据治理吗?二、如何面向用户开展大数据治理?三、面向用户的自服务大数据治理架构四、总结一、大数据时代还需要数据治理吗?数据平台发展过程中随处可见的数据问题大数据不是凭空而来,1981年第一个数据仓库诞生,到现在已经有了近40年的历史,相对数据仓库来说我还是个年轻人。而国内企业数据平台的建设大概从90年代末就开始了,从第一代架构出现到..._数据治理从0搭建
文章浏览阅读2.2k次,点赞4次,收藏12次。高手请一笑而过。物理实验课别人已经做过3、4个了,自己一个还没做呢。不是咱不想做,而是咱不想起那么早,并且仅有的一次起得早,但是哈工大的服务器竟然超负荷,不停刷新还是不行,不禁感慨这才是真正的“万马争过独木桥“啊!服务器不给力啊……好了,废话少说。其实,我的想法很简单。写一个三重循环,不停地提交,直到所有的数据都accepted。其中最关键的是提交最后一个页面,因为提交用户名和密码后不需要再访问其..._哈尔滨工业大学抢课脚本
文章浏览阅读4.9k次。一些别人收集的英文站点 http://www.lifeinchina.cn (nice) http://www.huaren.us/ (nice) http://www.hindu.com (okay) http://www.italki.com www.talkdatalk.com (transfer)http://www.en8848.com.cn/yingyu/index._study english html
文章浏览阅读5.5k次,点赞19次,收藏78次。什么是栈?在谈M3堆栈之前我们先回忆一下数据结构中的栈。栈是一种先进后出的数据结构(类似于枪支的弹夹,先放入的子弹最后打出,后放入的子弹先打出)。M3内核的堆栈也不例外,也是先进后出的。栈的作用?局部变量内存的开销,函数的调用都离不开栈。了解了栈的概念和基本作用后我们来看M3的双堆栈栈cortex-M3内核使用了双堆栈,即MSP和PSP,这极大的方便了OS的设计。MSP的含义是Main..._stm32 msp psp