# Related url: https://github.com/tensorflow/docs/blob/master/site/en/r1/tutorials/images/transfer_learning.ipynb
# Categorize image to cat or dog   
import os
import tensorflow.compat.v1 as tf
from tensorflow import keras

# Obtain data from url:"https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip"
zip_file = tf.keras.utils.get_file(origin="https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip",
                                   fname="cats_and_dogs_filtered.zip", extract=True)

# Find the directory of validation set
base_dir, _ = os.path.splitext(zip_file)
test_dir = os.path.join(base_dir, 'validation')

# Set images size to 160x160x3
image_size = 160

# Rescale all images by 1./255 and apply image augmentation
test_datagen = keras.preprocessing.image.ImageDataGenerator(rescale=1./255)

# Flow images using generator to the test_generator
test_generator = test_datagen.flow_from_directory(
                test_dir,
                target_size=(image_size, image_size),
                batch_size=1,
                class_mode='binary')

# Convert the next data of ImageDataGenerator to ndarray
def convert_to_ndarray(ImageGenerator):
    return ImageGenerator.next()[0]

# Load model from its path
model=tf.keras.models.load_model("path/to/model")

# Convert each image in test_generator to ndarray and predict with model
max_length=test_generator.__len__()
for i in range(max_length): # number of image to predict can be altered
    test_input=convert_to_ndarray(test_generator)
    prediction=model.predict(test_input)

