Ubuntu下制作VOC数据集(包含LabelImg的使用)

在windows下准备好文件

  如果你有一段视频文件并想用这个视频文件进行标注,那么一张一张的截图的是非常繁琐的,这里推荐一个windows下可以连续截图的播放器。
  百度网盘链接: potplayer提取码: m6gm
 视频,图像截取。先说一下使用方法吧,首先我们右键选择打开一个视频文件,选中想要打开的文件,打开后一般是默认立即播放的,我们将其停止并将进度条拉到最开始的位置,再次右键,选择视频,图像截取,连续截图
在这里插入图片描述
  再新弹窗中,首先选择保存位置,再选取保存图片的格式(如果制作VOC数据集需要保存成JPEG格式),设置下截图的尺寸选择,这里建议选择截取为原始尺寸。最后选择下截图的方式,主要包括采集数量,以及按什么方式截取,选定好以后,点击开始,再点击播放按钮,这时可以看到图像在播放的同时图片正在截取。在这里插入图片描述

  上面的步骤获得了视频中的大量截图,在正式开始对图片做标记之前,要对图片统一命名,方便管理。先将所有的要做标记的图片放到同一个空白文件夹下,注意:图片文件需要是jpg格式的。
  新建一个rename.py文件,在其中输入如下代码,保存关闭

import os
path = "F:\\prtscr" #存放标记图片的路径
filelist = os.listdir(path)
count=1  #从1开始命名,可以修改为你想开始的数字
for file in filelist:
    print(file)
for file in filelist:
    Olddir=os.path.join(path,file)
    if os.path.isdir(Olddir): 
        continue
    filename=os.path.splitext(file)[0]  
    filetype=os.path.splitext(file)[1]  
    Newdir=os.path.join(path,str(count).zfill(6)+filetype)  #zfill(6)的意思就是将所有的文件名设置为6位,不够的用0补齐,可以自行设置文件名的位数
    os.rename(Olddir,Newdir)
    count+=1

  命令行使用命令python rename.py执行这个文件,再次打开文件夹可以看到所有的图片文件被更名了

安装LabelImg

  Github链接,访问该链接下载Labelimg的压缩包,在运行之前,我们需要安装一些依赖
  首先使用下述命令安装pip

sudo apt install python3-pip

在这里插入图片描述
  从官网上我们可以看到他给出的需要安装的依赖,这里按照python3+qt5的安装方式进行,首先执行第一个语句应该是没问题的,继续执行第二个语句可能会报错,具体错误是类似于:pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host=‘files.pythonhosted.org’, port=443): Read timed out.的time out错误即超时错误,这是因为我们的源的问题。我们再看第二个命令,所要安装的依赖的具体信息保存到了一个txt文件下,我们打开这个文件内容是这样的,这就是执行第二句具体安装的依赖
在这里插入图片描述
  这里提供一个解决方法

pip --default-timeout=100 install 库名称 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com 

  上面的库名称可以任意替换,所以要想安装上述两个依赖可以执行下述语句

pip --default-timeout=100 install pyqt5 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com 
pip --default-timeout=100 install lxml -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com 

  这样就解决了执行第二个语句报错的问题,继续执行后面的语句就可以顺利打开Labelimg了。

使用LabelImg对图片进行标记

  在labelImg-master目录下执行下述命令打开labelImg

python labelImg.py

在这里插入图片描述
  使用步骤大致如下
  1.点击Open dir选择刚进行重命名的那些图片的文件夹
  2.点击Change Save Dir选择要保存xml文件的路径,这里建议新建一个空白文件夹进行存放
  3.在上图所示的PascalVOC处可以切换制作的是VOC数据集还是yolo数据集,yolo数据集保存的是一些txt文件,这里以PascalVoc数据集为例
  4.点击Create Rectbox,将鼠标放到画面上可以看到出现了一个十字,使用鼠标将目标框出来
  5.框完松开鼠标的时候,会出现一个对话框,如下图。在弹出的对话框里面输入这个框的标签名,点击确定就对这个物体标注完了
在这里插入图片描述
  6.点击save,将所有操作进行保存,在指定的目录下可以看到生成了一个xml文件
  7.点击Next Image切换到下一张图片继续标注。一张图中可以标注多个物体,对于小物体不容易标注的可以按住Ctrl+鼠标滚轮往上对图片进行放大再标注
  快捷键:
快速画框:w
切换到下一张图片:d
保存图片:Ctrl+s
复制框:Ctrl+d
  对于标注大量重复的标签,可以勾选右上方use default label选项,并在后面写上标签,这样就可以每次只画框,无需一次次的指定标签名,但是需要注意的是在标签改变的时候,也要改变后面这个默认标签。至此,整个数据的标注工作就算是完成了。
  我们需要制作一个VOC数据集的标准格式,就是将上述制作的xml文件以及jpg文件按照格式存放
  新建一个VOCdevkit文件夹,在这个文件夹下新建一个文件夹,名为VOC2007,在VOC2007文件夹下新建四个文件夹,分别是Annotations,ImageSets,JPEGImages,labels,其中Annotations用于存放刚标注完保存的xml文件,JPEGImages用于存放xml文件对应的图片文件,对于labels,由于我们制作的是VOC数据集,所以一会要用脚本将voc数据集转为yolo数据集,labels就用于存放住完之后的文件,再来解释一下ImageSets文件夹,我们先在这个下面新建一个名为Main的文件夹,再在Main文件夹下新建四个txt文件,分别为test.txt,train.txt,trainval.txt,val.txt,这四个txt文件用于存放划分后的训练集、验证集、测试集的图片名称。
  1.分别按照上述解释将文件准备好
  2.在VOC2007文件见下新建一个名为get.py的python文件,将内容修改为如下

##get.py()##
#encoding=utf-8
import os  
import random   

xmlfilepath='/root/darknet/scripts/VOCdevkit/VOC2007/Annotations' #xml文件即Annotations文件夹的路径
saveBasePath='/root/darknet/scripts/VOCdevkit/VOC2007/ImageSets'#上述ImageSets文件夹的路径
#如果上述路径一直有问题,可以尝试相对路径,相对路径是 ./Annotations 与./ImageSets
trainval_percent=0.7   #保持这个数与下个数一致
train_percent=0.7      #指定训练集的比例,可以自行设置,个人认为0.8比较合适
total_xml = os.listdir(xmlfilepath)  
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)  
ftrainval = open(os.path.join(saveBasePath,'Main/trainval.txt'), 'w')    
ftest = open(os.path.join(saveBasePath,'Main/test.txt'), 'w')    
ftrain = open(os.path.join(saveBasePath,'Main/train.txt'), 'w')    
fval = open(os.path.join(saveBasePath,'Main/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() 

  3.在终端使用python get.py执行这个文件,执行完之后再次打开Main文件夹下的txt文件,可以看到里面多了图片的名称,这样训练集与验证集就划分出来了,奠定模型训练的基础。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值