有时候需要对同一文件夹下的内容标记相同的 label 作为其类别。下面以人脸数据为例说明。不同文件夹包含着不同人的多张人脸图像,每个文件夹都是不同的类别。为了训练模型做分类,需要为不同的人添加不同的 label (相当于分类问题中响应变量 y)。
ORL人脸数据库
Olivetti Research Laboratory人脸数据库,诞生于英国剑桥AT&T实验室。该人脸库包含40个人,共400张面部图像。每个人包含10幅经过归一化处理的灰度图像,图像尺寸均为92×112。
下载地址:
https://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html
添加 label
下载下来的数据是不带 label 的数据,为了后面训练神经网络,我们可以给它们打上 label 输出到 txt 文件,类别为0~39,每个类别有10个样本。代码如下:
import os
def main():
path = 'F:\ORL人脸数据库'
f = open('F:\ORL人脸数据库\label.txt','w')
root, dirs, files = next(os.walk(path))
for i in range(len(dirs)):
fs = os.listdir(path + '/' + dirs[i])
for file in fs:
line = os.path.join(root,dirs[i],file) + ' ' + str(i) + '\n'
#print(line)
f.write(line)
if __name__ == '__main__':
main()
输出的 txt 文件截图:
至此完成了添加 label 任务。
如果有需要将 label 加上一个起始数变成新的 label 并更新 txt 文件,代码如下:
import os
def main():
label_file = 'F:/ORL人脸数据库/label.txt'
f = open(label_file, 'r')
lines = f.readlines()
num = int(input('请输入起始数:'))
f = open(label_file, 'w')
lines2 = []
for i in range(len(lines)):
line = lines[i].rstrip()
parts = line.split()
label2 = str(int(parts[1]) + num)
line2 = parts[0] + ' ' + label2 + '\n'
lines2.append(line2)
f.writelines(lines2)
if __name__ == '__main__':
main()
运行结果截图: