深度学习数据集制作

1.剪裁图片
图片大小不一,我的想法是遍历文件夹内的图片进行resize,然后作为放入网络中的输入。但是每个图片名字不一致,要改变,我就用了一个count,从001-999位置,全部剪裁,(这部分其实网络的预处理也可以做,我只是提前做了)。
 

注意点
这里有个注意点,因为我的图片是网上截取的,所以不能保证每张图片质量都很好,在imread读取的时候,可能出现NoneType,一定要注意,不然会报错(这是个坑,我找了好久,才发现)
第二个是我把所有的图片都改成了JPG,可能有gif,png等等这类的,存在也会报错,所以建议大家一开始就右击保存,而不要只把图片拉下来。
因为我不是很熟悉xml文件,并且我的图片都是不需要重新用边界框截取,所以我没有用labelImg去做。

————————————————
 

import cv2
import os
count=501
for filename in os.listdir(r"/home/parallels/Downloads/绿色/"):
	#print("/home/parallels/Downloads/1.黑/"+filename)
#filename=/home/parallels/Downloads/1.黑/1.jpg
	path="/home/parallels/Downloads/绿色/"+str(filename)
	#print(path)
	img=cv2.imread(path,cv2.IMREAD_COLOR)
	if img is None:
		continue
	if len(str(count))!=3:
		b=(3-len(str(count)))*"0"+str(count)+".jpg"
	else:
		b=str(count)+".jpg"
	if img.shape[0]>=50 and img.shape[1]>=50:
		img_2=cv2.resize(img,(50,50))
		cv2.imwrite(os.path.join("/home/parallels/Downloads/3/"+b),img_2)
		#cv2.imwrite(os.path.join("/home/wanglin/PycharmProjects/data_test/data/Train400/original.jpg" ), img)
		count+=1
		continue
	else:
		os.remove(path)

我这里暂时取得是(50,50,3),可以根据网络选择自己的尺寸,在写个脚本验证一下看看,是不是size都是(50,50)。

import cv2
import os
train=[]
for filename in os.listdir(r"/home/parallels/Downloads/3/"):
	#print("/home/parallels/Downloads/1.黑/"+filename)
#filename=/home/parallels/Downloads/1.黑/1.jpg
	path="/home/parallels/Downloads/3/"+str(filename)
	#print(path)
	img=cv2.imread(path,cv2.IMREAD_COLOR)
	print(img.shape)

2.把所有的图片的路径和标签写到txt文件里去(这部分查了很多网上的教程,dir /b/s> xxx.txt),我是没有实现,路径没有加进去,所以我稍微参考写了一个自己的py文件,供大家去使用。

import os 
f = open('/Users/qiubo/Desktop/train_list.txt','w')
for root,dirs,files in os.walk('/Users/qiubo/Desktop/3/',True):
	for file in files:
		f.writelines("/Users/qiubo/Desktop/3/"+file)
		f.write('\n')

这里的f.writelines括号里的前半个是路径,后面是每个图片名,至于标签的话,继续加上就行,并没有很麻烦。

3.读取训练的x,y,我做到这一步就结束了,因为网络需要改造,所以还没有具体想到要几个标签。

import pickle
import numpy as np 
import os.path
import codecs
def load_data(datafile, num_class=8, save=False, save_path='dataset.pkl'):
    fr = codecs.open(datafile, 'r', 'utf-8')
    train_list = fr.readlines()
    labels = []
    images = []
    for line in train_list:
        tmp = line.strip().split(' ')
        fpath = tmp[0]
        img = cv2.imread(fpath)
        np_img = np.asarray(img, dtype="float32")
        images.append(np_img)

        index = int(tmp[xxx])
        label = np.zeros(num_class)
        label[index] = 1
        labels.append(label)
    if save:
        pickle.dump((images, labels), open(save_path, 'wb'))
    fr.close()
    return images, labels

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值