参考文献:
《基于卷积神经网络的人脸识别研究》 李春利,柳振东,惠康华
文章中基于经典的网络LeNet-5的结构,提出了一种适用于ORL数据集的CNN结构,在该数据集上取得了较高的识别率。
本文是在参考此论文的基础上,使用tensorflow实现了文中相关理论。
训练集下载解压后可以看到,ORL训练集一共有40类,每一类有10张bmp类型的图片。
首先我们需要做的就是将这些数据读入,制作我们自己的训练集和测试集。
input_path = "./orl"
train_path = "./train"
test_path = "./test"
if not os.path.exists(train_path):
os.mkdir(train_path)
if not os.path.exists(test_path):
os.mkdir(test_path)
for i in range(1, 41):
if not os.path.exists(train_path + '/' + str(i)):
os.mkdir(train_path + '/' + str(i))
if not os.path.exists(test_path + '/' + str(i)):
os.mkdir(test_path + '/' + str(i))
# 生成训练和测试的数据
def generate_data(train_path, test_path):
index = 1
output_index = 1
for (dirpath, dirnames, filenames) in os.walk(input_path):
# 打乱文件列表,相当于是随机选取8张训练集,2张测试
random.shuffle(filenames)
for filename in filenames:
if filename.endswith('.bmp'):
img_path = dirpath + '/' + filename
# 使用opencv 读取图片
img_data = cv2.imread(img_path)
# 按照论文中的将图片大小调整为28 * 28
img_data = cv2.resize(img_data, (28, 28), interpolation=cv2.INTER_AREA)
if index < 3:
cv2.imwrite(test_path + '/' + str(output_index) + '/' + str(index) + '.jpg', img_data)
index += 1
elif 10 >= index >= 3<