Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions classifiers.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
# -*- coding:utf-8 -*-

from keras.models import Model as KerasModel
from keras.layers import Input, Dense, Flatten, Conv2D, MaxPooling2D, BatchNormalization, Dropout, Reshape, Concatenate, LeakyReLU
from keras.optimizers import Adam

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

useless blank line

from tensorflow.keras import Model as KerasModel
from tensorflow.keras.layers import Input, Dense, Flatten, Conv2D, MaxPooling2D, BatchNormalization, Dropout, Reshape, Concatenate, LeakyReLU
from tensorflow.keras.optimizers import Adam

IMGWIDTH = 256

Expand Down
14 changes: 10 additions & 4 deletions example.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
from classifiers import *
from pipeline import *

from keras.preprocessing.image import ImageDataGenerator
import os
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

import not used?


from tensorflow.keras.preprocessing.image import ImageDataGenerator

# 1 - Load the model and its pretrained weights
classifier = Meso4()
Expand All @@ -17,15 +19,19 @@
'test_images',
target_size=(256, 256),
batch_size=1,
shuffle=False,
class_mode='binary',
subset='training')

# 3 - Predict
X, y = generator.next()
print('Predicted :', classifier.predict(X), '\nReal class :', y)
num_iterations = 0
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For this change in the predict file, I don't really want to provide a loop, this was a minimal working code to show that this uses the tf/keras framework, but there are many ways to loop over the images. So I would leave this file unchanged while letting the new script predict_on_directory do want you want to do.

for X, y in generator:
print('Predicted :', classifier.predict(X), '\nReal class :', y)
num_iterations += 1
if num_iterations >= 4:
break

# 4 - Prediction for a video dataset

classifier.load('weights/Meso4_F2F')

predictions = compute_accuracy(classifier, 'test_videos')
Expand Down
35 changes: 35 additions & 0 deletions predict_on_directory.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
########################################################################################################################
# Model
########################################################################################################################
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

inaccurate comment, delete, (or change and use triple quotes to provide a documentation on the command line usage)


import numpy as np
from classifiers import *
from pipeline import *

import os
import glob
import sys
from tensorflow.keras.preprocessing.image import load_img, img_to_array

REQUIRED_SIZE = (256, 256)

if __name__ == "__main__":
images_dir = sys.argv[1]

if not os.path.isdir(images_dir):
print("## Directory provided {} doesn't exist.".format(images_dir))
exit()

# 1 - Load the model and its pretrained weights
classifier = Meso4()
classifier.load('weights/Meso4_DF')
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, for the purpose of a command line script, this needs parametrisation, what if your directory is forged using face-2-face.


# Getting files
files = glob.glob(os.path.join(images_dir, "*.jpg"))
for f in files:
im = load_img(f, target_size=REQUIRED_SIZE)
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's better if you wrap the image loader into a ImageDataGenerator and use flow_from_directory than manually loading the images

im_arr = np.expand_dims(img_to_array(im), axis=0)
im_arr /= 255.0
print(im_arr.shape)
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not sure this print is vital

pred = classifier.predict(im_arr)
print("## Image {} is classified as {}".format(f, pred))