from tqdm import tqdm
from keras.preprocessing.image import ImageDataGenerator
import os
from keras.applications.xception import Xception
import pickle
import gzip

maxlen = 192171
img_nums = {
    i: len(os.listdir('assets/train_224/' + str(i) + '/'))
    for i in range(1, 129)
}
train_data_gen = ImageDataGenerator(rescale=1. / 255)
train_generator = train_data_gen.flow_from_directory(
    directory='assets/train_224/',
    target_size=(224, 224),
    batch_size=32,
    class_mode='categorical',
    shuffle=False)

base_model = Xception(weights='imagenet',
                      include_top=False,
                      input_shape=(224, 224, 3))

for b in tqdm(range(maxlen // 32)):
    x = train_generator.next()
    z = base_model.predict_on_batch(x[0])
    with gzip.open('assets/bn_xception_train_224/' + str(b) + '.p',
                   'wb',
                   compresslevel=6) as f:
        pickle.dump((z, x[1]), f)