在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文件,可以看到里面多了图片的名称,这样训练集与验证集就划分出来了,奠定模型训练的基础。