import tensorflow as tf | |
from tensorflow.keras.applications import EfficientNetB0 | |
from tensorflow.keras.preprocessing import image | |
from tensorflow.keras.applications.efficientnet import preprocess_input | |
import numpy as np | |
class FeatureExtractor: | |
def __init__(self): | |
# Load pretrained EfficientNetB0 model without top layers | |
base_model = EfficientNetB0(weights='imagenet', include_top=False, pooling='avg') | |
self.model = tf.keras.Model(inputs=base_model.input, outputs=base_model.output) | |
def extract_features(self, img_path): | |
# Load and preprocess the image | |
img = image.load_img(img_path, target_size=(224, 224)) | |
img_array = image.img_to_array(img) | |
expanded_img = np.expand_dims(img_array, axis=0) | |
preprocessed_img = preprocess_input(expanded_img) | |
# Extract features | |
features = self.model.predict(preprocessed_img) | |
return features.flatten() |