|
import cv2 |
|
import numpy as np |
|
import tensorflow as tf |
|
from tensorflow.keras.optimizers import Adam |
|
from tensorflow.keras.models import Sequential |
|
from tensorflow.keras.layers import Dense, Flatten |
|
|
|
class RecycleModel: |
|
def __init__(self): |
|
self.vgg16_model = Sequential() |
|
|
|
self.pretrained_model = tf.keras.applications.VGG16( |
|
include_top=False, |
|
weights="imagenet", |
|
input_shape=(180, 180, 3), |
|
pooling='max', |
|
classes=7 |
|
) |
|
for layer in self.pretrained_model.layers: |
|
layer.trainable = False |
|
|
|
self.vgg16_model.add(self.pretrained_model) |
|
self.vgg16_model.add(Flatten()) |
|
self.vgg16_model.add(Dense(512, activation='relu')) |
|
self.vgg16_model.add(Dense(7, activation='softmax')) |
|
|
|
self.vgg16_model.compile(optimizer=Adam(learning_rate=0.001), |
|
loss='sparse_categorical_crossentropy', |
|
metrics=['accuracy']) |
|
|
|
self.vgg16_model.load_weights('updated_vgg16_weights.h5') |
|
|
|
self.class_names = ['1_polyethylene_PET', '2_high_density_polyethylene_PE-HD', '3_polyvinylchloride_PVC', |
|
'4_low_density_polyethylene_PE-LD', '5_polypropylene_PP', '6_polystyrene_PS', '8_no_plastic'] |
|
|
|
def recyclePrediction(self, img): |
|
image_resized = cv2.resize(img, (180, 180)) |
|
image = np.expand_dims(image_resized, axis=0) |
|
pred = self.vgg16_model.predict(image) |
|
output_class = self.class_names[np.argmax(pred)] |
|
|
|
return output_class |
|
|