Building an AI-based image-classifier application
import numpy as np
import pandas as pd
import os
import shutil
from tensorflow.keras import layers, models
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# n_digits = 10
# weights_dir='MNIST'
# weights_name = 'classifier.h5'
# sample_dir = 'MNIST/Sample'
n_digits = int(n_digits)
l1 = layers.Input(shape = [27,27,3])
l2 = layers.Conv2D(30, [3,3], activation = 'relu')(l1)
l2a = layers.MaxPool2D([2,2])(l2)
l3 = layers.Conv2D(30, [3,3], activation = 'relu')(l2a)
l4 = layers.Flatten()(l3)
l5 = layers.Dense(300, activation = 'relu')(l4)
l6 = layers.Dense(50, activation = 'relu')(l5)
l7 = layers.Dense(n_digits, activation = 'softmax')(l6)
classifier = models.Model([l1], [l7])
classifier.load_weights(weights_dir + '/' + weights_name)
os.mkdir(sample_dir + '/dummy_class')
for i in os.listdir(sample_dir):
if i != 'dummy_class':
os.rename(sample_dir + '/' + i, sample_dir + '/dummy_class/' + i)
global datagen
datagen = ImageDataGenerator(rescale=1./255)
global sample_generator
sample_generator = datagen.flow_from_directory(
directory = sample_dir,
target_size = [27,27],
batch_size = 1,
class_mode = 'categorical',
shuffle = False)
global n_sample_imgs
n_sample_imgs = len(sample_generator.filenames)
global preds
preds = classifier.predict_generator(
sample_generator
)
global preds_argmax
preds_argmax = np.argmax(preds, axis = 1)
os.mkdir(sample_dir + '/classified')
for i in range(len(np.unique(preds_argmax))):
os.mkdir(sample_dir + '/classified/' + str(np.unique(preds_argmax)[i]))
global image_names
image_names = sample_generator.filenames
for i in range(len(image_names)):
shutil.copy2(sample_generator.filepaths[i],
sample_dir + '/classified/' + str(preds_argmax[i]) + '/' + (image_names[i]).split('/')[1])