画像をpkl形式のファイルに生成する(多層ループ)


このブログは前のブログの書き換えです.以前のブログでは、Python PIL、cPickleを使用して画像データベースを読み取り、保存していました.まず、すべてのピクチャの枚数を統計して、サンプルを格納するベクトルとラベルベクトルを初期化します.
画像はdataの下に置かれた2層目のファイルで、その中で自分のファイルの違いは、自分でループを調整します.Pythonコードは以下の通りです.
import cPickle    
import os    
import json  
import pylab

import numpy  
from PIL import Image

k = 0;
for filename1 in os.listdir(r'data'):
    print filename1
    filename1 = 'data/' + filename1
    #               
    # fileList = os.listdir(path) 
    # allFile = []
    # for fileName in fileList:
    # filePath = os.path.join(path, fileName) 
    # if os.path.isdir(filePath): 
    # dirList(filePath) 
    # allFile.append(filePath)
    for filename2 in os.listdir(filename1):
        print filename2
        filename2 = filename1 + '/' +filename2
        for filename3 in os.listdir(filename2):
            print filename3
            if(filename3!='Thumbs.db'):
              k = k + 1
# k               
k = k * 10
print k

kは、olivettifacesおよびolivettifacesを初期化するためのピクチャの合計枚数である.私はロードした表情の画像で、ラベル値は0~5に設定されています.
i = 0;
j=0;
label =0;
olivettifaces=numpy.empty((k,28*28))
olivettifaces_label=numpy.empty(k)
# j               。
while(j<10):
    for filename1 in os.listdir(r'data'):
        print filename1
        filename1 = 'data/' + filename1
        for filename2 in os.listdir(filename1):
            print filename2
            label = label + 1
            if(label == 7):
                label = 1
            filename2 = filename1 + '/' +filename2
            for filename3 in os.listdir(filename2):
                print filename3
                if(filename3!='Thumbs.db'):
                    filename3 = filename2 + '/' +filename3

                    imgage = Image.open(filename3)
                    imgage = imgage.resize((28,28))
                    img_ndarray = numpy.asarray(imgage, dtype='float64')/256
                    olivettifaces[i]=numpy.ndarray.flatten(img_ndarray)

                    olivettifaces_label[i]=label-1

                    i = i + 1
    j = j+1

print i

サンプルとラベルデータが生成され、下からpkl形式のファイルに変換されます.Pythonコードは以下の通りです.私はここで訓練セット、検証セット、テストセットを分けました.
olivettifaces_label=olivettifaces_label.astype(numpy.int)

write_file=open('olivettifaces.pkl','wb')
cPickle.dump([[olivettifaces[0:28000],olivettifaces_label[0:28000]],
              [olivettifaces[10001:13000],olivettifaces_label[10001:13000]],
              [olivettifaces[13001:16499],olivettifaces_label[13001:16499]]],write_file,-1)  
write_file.close()

pkl形式の読み込みを検証するファイルコード:
read_file=open('olivettifaces.pkl','rb')  
faces1,faces2,faces3=cPickle.load(read_file)
read_file.close() 
face,label = faces1
img0=face[4].reshape(28,28)
pylab.imshow(img0)
pylab.gray()
pylab.show()
print face[28*27:28*28]
print label[1:165]