# Convolutional Neural Network
import os
# Importing the libraries
import tensorflow as tf
from keras.preprocessing.image import ImageDataGenerator
tf.__version__

# Part 1 - Data Preprocessing
# Preprocessing the Training set
train_datagen = ImageDataGenerator(rescale = 1./255,
                                   shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip = True)
training_set = train_datagen.flow_from_directory(r"C:\Users\ASUS PC\OneDrive\Desktop\dataset huggingface\aiornot\.extras\dataset",
                                                 target_size = (64, 64),
                                                 batch_size = 32,
                                                 class_mode = 'binary')

# Preprocessing the Test set
test_datagen = ImageDataGenerator(rescale = 1./255)
test_set = test_datagen.flow_from_directory(r"C:\Users\ASUS PC\OneDrive\Desktop\dataset huggingface\aiornot\.extras\test dataset",
                                            target_size = (64, 64),
                                            batch_size = 32,
                                            class_mode = 'binary')

# Part 2 - Building the CNN

# Initialising the CNN
cnn = tf.keras.models.Sequential()

# Step 1 - Convolution
cnn.add(tf.keras.layers.Conv2D(filters=32, kernel_size=3, activation='relu', input_shape=[64, 64, 3]))

# Step 2 - Pooling
cnn.add(tf.keras.layers.MaxPool2D(pool_size=2, strides=2))

# Adding a second convolutional layer
cnn.add(tf.keras.layers.Conv2D(filters=32, kernel_size=3, activation='relu'))
cnn.add(tf.keras.layers.MaxPool2D(pool_size=2, strides=2))

# Step 3 - Flattening
cnn.add(tf.keras.layers.Flatten())

# Step 4 - Full Connection
cnn.add(tf.keras.layers.Dense(units=128, activation='relu'))

# Step 5 - Output Layer
cnn.add(tf.keras.layers.Dense(units=1, activation='sigmoid'))

# Part 3 - Training the CNN

# Compiling the CNN
cnn.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

checkpoint_path = "training_1/cp.ckpt"
checkpoint_dir = os.path.dirname(checkpoint_path)

# Training the CNN on the Training set and evaluating it on the Test set
cnn.fit(x = training_set, validation_data = test_set, epochs = 35)

cnn.save(r'C:\Users\ASUS PC\OneDrive\Desktop\dataset huggingface\aiornot\.extras\train')


import tensorflow as tf
from keras.models import load_model
from keras.preprocessing.image import ImageDataGenerator
import os
import keras.utils as image
import pandas as pd
# Convolutional Neural Network
import os
# Importing the libraries
import tensorflow as tf
import numpy as np
from keras.preprocessing.image import ImageDataGenerator
tf.__version__

model = tf.keras.models.load_model(r'C:\Users\ASUS PC\OneDrive\Desktop\dataset huggingface\aiornot\.extras\train')


# for img_file in l:
#     img_path = os.path.join(test_dir, img_file)
#     img = image.load_img(img_path, target_size=(64, 64,3))
#     img = image.img_to_array(img)
#     test_image = np.expand_dims(img, axis = 0)
#     test_images.append(img)

# test_images= test_images[:10]

# # # Make predictions
# predictions=[]
# for i in range (1):
#     prediction = model.predict(test_images[i])
    

# print(prediction)

# y_pred= model.predict(test_set)


import numpy as np
import keras.utils as image
res= []
count=0
test_dir = r'C:\Users\ASUS PC\OneDrive\Desktop\dataset huggingface\aiornot\.extras\testset\test'
test_images = []
l= len(os.listdir(test_dir))
for i in range(l):
    path =r'C:/Users/ASUS PC/OneDrive/Desktop/dataset huggingface/aiornot/.extras/testset/test/' + str(i) + '.jpg' 
    test_image = image.load_img( path, target_size = (64, 64))
    test_image = image.img_to_array(test_image)
    test_image = np.expand_dims(test_image, axis = 0)
    result = model.predict(test_image) 
    if int(result[0][0]) == 1:
        count+=1
    res.append(int(result[0][0]))


data = {'id' :os.listdir(test_dir), 'label' : res }
df= pd.DataFrame(data)
df.to_excel(r'Submission.xlsx', index=False)