1.准备好一定数量的图片并做好标记。图片名称不要使用中文字符,并按照一定的顺序进行命名。如果图片来自不同渠道,可以网上搜索一段重名名图片集的代码,运行一下即可。本图片是将几种字体的数字打印在纸张上,利用相机进行拍照所得。
2.新建一个python工程,将样本集导入。
import os
import cv2
path = 'myData'
myList = os.listdir(path)
print("Total Num of Classes Detected", len(myList))
numOfClasses = len(myList) # 类型总数
print("Importing Classes......")
img = [] # 用于存储图片
classNum = [] # 存储图片对应的class
for x in range(numOfClasses): # 按照索引循环
myPicList = os.listdir(path + "/" + "images" + str(x)) # 获取myDate中每一个class下的图片,返回值为图片的列表
for y in myPicList: # 按照列表内容名称顺序循环
curImg = cv2.imread(path + "/" + "images" + str(x) + "/" + y) # 遍历文件下的每一张图片
curImg = cv2.resize(curImg, (imageDimension[0], imageDimension[1])) # resize图片大小,图片太大会影响神经网络训练
img.append(curImg) # 将当前图片添加到img列表中
classNum.append(x) # 将当前图片的class存入
print(x, end=" ") # 将打印为一行
print(" ")
images = np.array(img)
classNo = np.array(classNum)
print(images.shape)
print(classNo.shape)
print("Successfully Read Data")
3.分割数据集为test_data(20%), validation_data(20%), train_data(60%)。具体为什么分割,有什么意义见训练集(train set) 验证集(validation set) 测试集(test set)
print("Splitting Data......")
# 测试集的比例
testRatio = 0.2
# 验证集的比例
validationRatio = 0.3
from sklearn.model_selection import train_test_split 利用skLearn中的工具包数据预处理
x_train, x_test, y_train, y_test = train_test_split(images, classNo, test_size=testRatio)
x_train, x_validation, y_train, y_validation = train_test_split(x_train, y_train, test_size=validationRatio)
print("x训练集", x_train.shape, end=" ")
print("x验证集", x_validation.shape