最近在做一些数据标注的工作,虽然标注数据比较枯燥,但这也是每个做算法的工程师升级打怪的必由之路。使用一些合适的工具往往可以事半功倍,效率UP。

一:数据标注流程

二:数据处理的一些小代码

1:重命名

当得到这样格式命名不一致的数据的时候,重命名是最好的方法。

代码:

#coding=UTF-8

'''

重命名工具

'''

import os

import sys

def rename():

path=input(r"请输入路径(例如D:\picture):")

name=input("请输入开头名:")

startNumber=input("请输入开始数:")

fileType=input("请输入后缀名(如 .jpg、.txt等等):")

print("正在生成以"+name+startNumber+fileType+"迭代的文件名")

count=0

filelist=os.listdir(path)

for files in filelist:

Olddir=os.path.join(path,files)

if os.path.isdir(Olddir):

continue

Newdir=os.path.join(path,name+str(count+int(startNumber))+fileType)

os.rename(Olddir,Newdir)

count+=1

print("一共修改了"+str(count)+"个文件")

if __name__ == '__main__':

rename()

重命名后的文件会覆盖之前的文件,记得操作之前备份原始数据(如有需要的话)

2:数据标注工具:

对于VOC数据集,使用labelimgs很方便,安装过程也很简单:

开源地址如下:https://github.com/tzutalin/labelImg

如上图所示,框选完口罩后,点击OK会生成一个跟你文件名一致的XML文件,XML中包括有文件路径,文件名称,以及你给的标签等等信息,如下图:

3:划分数据集

因为要符合VOC数据集格式,这里简单说一下VOC数据集格式类型。做深度学习目标检测方面的同学怎么都会接触到PASCAL VOC这个数据集。也许很少用到整个数据集,但是一般都会按照它的格式准备自己的数据集。所以这里就来记录一下PASCAL VOC的格式,包括目录构成以及各个文件夹的内容格式,方便以后自己按照VOC的标准格式制作自己的数据集。

但是我们一般情况下,自己制作数据集不需要Segment开头的,着重关注这三个文件夹:

Annotation文件夹存放的是xml文件,该文件是对图片的解释,每张图片都对于一个同名的xml文件。

ImageSets文件夹存放的是txt文件,这些txt将数据集的图片分成了各种集合。

JPEGImages文件夹存放的是数据集的原图片

转换代码:

import os

import random

xmlfilepath = r'D:/object_find/voc_title/VOCdevkit/VOC2007/Annotations'

saveBasePath = r"D:/object_find/voc_title/VOCdevkit/VOC2007/ImageSets/Main/"

#训练集和验证集所占的比例

trainval_percent = 0.8

train_percent = 0.8

temp_xml = os.listdir(xmlfilepath)

total_xml = []

for xml in temp_xml:

if xml.endswith(".xml"):

total_xml.append(xml)

num = len(total_xml)

list = range(num)

tv = int(num * trainval_percent)

tr = int(tv * train_percent)

trainval = random.sample(list, tv)

train = random.sample(trainval, tr)

print("train and val size", tv)

print("traub suze", tr)

#trainval,训练集测试集文件名,train,训练集,test,测试集,val验证集的文件名

ftrainval = open(os.path.join(saveBasePath, 'trainval.txt'), 'w')

ftest = open(os.path.join(saveBasePath, 'test.txt'), 'w')

ftrain = open(os.path.join(saveBasePath, 'train.txt'), 'w')

fval = open(os.path.join(saveBasePath, 'val.txt'), 'w')

for i in list:

name = total_xml[i][:-4] + '\n'

if i in trainval:

ftrainval.write(name)

if i in train:

ftrain.write(name)

else:

fval.write(name)

else:

ftest.write(name)

ftrainval.close()

ftrain.close()

fval.close()

ftest.close()

运行结果:

4:XML转TXT

这里要用到XML工具包来匹配一下:

代码:

import xml.etree.ElementTree as ET

from os import getcwd

sets=[('2007', 'train'), ('2007', 'val'), ('2007', 'test')]

classes = ["nomask","rightmask","wrongmask"]

def convert_annotation(year, image_id, list_file):

in_file = open('D:/object_find/voc_title/VOCdevkit/VOC%s/Annotations/%s.xml'%(year, image_id))

tree=ET.parse(in_file)

root = tree.getroot()

for obj in root.iter('object'):

difficult = obj.find('difficult').text

cls = obj.find('name').text

if cls not in classes or int(difficult)==1:

continue

cls_id = classes.index(cls)

xmlbox = obj.find('bndbox')

b = (int(xmlbox.find('xmin').text), int(xmlbox.find('ymin').text), int(xmlbox.find('xmax').text), int(xmlbox.find('ymax').text))

list_file.write(" " + ",".join([str(a) for a in b]) + ',' + str(cls_id))

wd = getcwd()

for year, image_set in sets:

image_ids = open('VOCdevkit/VOC%s/ImageSets/Main/%s.txt'%(year, image_set)).read().strip().split()

list_file = open('%s_%s.txt'%(year, image_set), 'w')

for image_id in image_ids:

list_file.write('%s/VOCdevkit/VOC%s/JPEGImages/%s.jpg'%(wd, year, image_id))

convert_annotation(year, image_id, list_file)

list_file.write('\n')

list_file.close()

生成结果:

生成txt文件,包括:图片位置信息,目标位置,类别

lableimg闪退_CV学习笔记(二十五):数据集标注与制作相关推荐

  1. JVM 学习笔记二十五、JVM监控及诊断工具-命令行篇

    二十五.JVM监控及诊断工具-命令行篇 1.概述 性能诊断是软件工程师在日常工作中经常面对和解决的问题,在用户体验至上的今天,解决好应用软件的性能问题能带来非常大的收益. Java作为最流行的编程语言 ...

  2. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  3. angular学习笔记(二十五)-$http(3)-转换请求和响应格式

    本篇主要讲解$http(config)的config中的tranformRequest项和transformResponse项 1. transformRequest: $http({transfor ...

  4. Mr.J-- jQuery学习笔记(二十五)--监听DOM加载

    页面元素 <body> <div></div> <div></div> <div></div> <div> ...

  5. java沙盒模式_JavaScript学习笔记(二十五) 沙箱模式

    沙箱模式(Sandbox Pattern) 沙箱模式可以避免命名空间的一些缺点(namespacing pattern),比如: 依赖一个唯一全局的变量作为程序的全局符号.在命名空间模式中,没有办法存 ...

  6. Mr.J-- jQuery学习笔记(二十八)--DOM操作方法(添加方法总结)

    Table of Contents appendTo appendTo(source, target) 源代码 append prependTo ​ ​ ​ ​ prependTo源码 prepend ...

  7. 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言

    嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...

  8. uniapp 学习笔记二十二 购物车页面结构搭建

    uniapp 学习笔记二十二 购物车页面结构搭建 cart.vue <template><view><view class="flex padding" ...

  9. Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用

    Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用 大概要写到结尾了,最后几篇就将手册的各常用命令再看一遍,组合一下,并列举出常见的一些有用的操作. DATA_COLOR_MAP数 ...

最新文章

  1. ux设计_从UX设计人员的角度来看Microsoft Build 2018
  2. IDC_ Pro_Env _CentOS 5.4_Open×××
  3. VC++下的OpenGL编程
  4. Centos7+nginx1.12+mysql5.7+php7环境安装
  5. Boost:基于boost::asio模块引用计数程序
  6. java ztree json_java 树形转换JSON 工具类 / 树形子父级菜单递归 JSON 格式
  7. 10074 启用开发者模式 for vs2015rc
  8. 图文左右滚动代码php,jQuery幻灯片左右滚动效果
  9. pyhive数据库连接池使用
  10. Python---PDF旋转角度
  11. java cnzz_cnzz统计图标不显示
  12. android恢复短信中心号码,短信中心号码设置解决安卓手机不能发短信问题,教你设置解决异地发不了短信问题...
  13. 【Python爬虫案例学习10】基于Requests爬取拉勾网招聘信息,并保存至本地csv文件
  14. MES系统功能在石油化工行业的应用
  15. 详解开关电源RCD钳位电路工作过程
  16. 2020年排名前10的Python库
  17. 1到50中7的倍数的数值之和
  18. php 上标,html页面如何显示上标和下标
  19. CSDN图片去掉水印
  20. 51单片机无法打开‘stc15f2k60s2.h‘问题

热门文章

  1. 修改npm默认全局安装路径
  2. rageframe2 数据库配置_RF 微商城 一款基于 RageFrame2 的免费开源的基础销售功能的微商城...
  3. c语言switch caseh(op),switch语句求教
  4. git分支合并指定代码_git的几种实用操作(合并代码与暂存复原代码)
  5. Python 列表List - Python零基础入门教程
  6. oracle修改窗口字体大小,jQuery之字体大小的设置方法
  7. html中表格与字对齐,html – 中心与表格单元格对齐
  8. windows os x linux比较,对比测试:Ubuntu 11.04 vs Win7 vs OS X 10.7
  9. 北工大计算机网络基础期末考试,2013北工大计算机网络应用复习提纲整理版.doc...
  10. Android nfc编译,【Android编译】各个模块编译方法