from tensorflow.keras.applications import InceptionV3
from tensorflow.keras.applications.inception_v3 import preprocess_input, decode_predictions
from tensorflow.keras.preprocessing import image
import numpy as np
from PIL import Image
import cv2
IMG_SIZE = 299
PREDICTION_MODEL = InceptionV3(weights='imagenet')


def classify_image(image_path: str):
    img_path = f'./app/{image_path}'
    # img = image.load_img(img_path, target_size=(IMG_SIZE, IMG_SIZE))

    target_image = cv2.imread(img_path, cv2.IMREAD_UNCHANGED)
    resized_target_image = cv2.resize(target_image, (IMG_SIZE, IMG_SIZE))

    x = image.img_to_array(resized_target_image)
    x = np.expand_dims(x, axis=0)
    x = preprocess_input(x)

    preds = PREDICTION_MODEL.predict(x)
    result = decode_predictions(preds, top=3)[0]
    payload = []
    for _, value, _ in result:
        payload.append(value)

    return payload


def warm_up():
    img_path = f'./app/test.png'
    img = image.load_img(img_path, target_size=(IMG_SIZE, IMG_SIZE))
    x = image.img_to_array(img)
    x = np.expand_dims(x, axis=0)
    x = preprocess_input(x)
    PREDICTION_MODEL.predict(x)