import gradio as gr import numpy as np from PIL import Image import cv2 import time import skops.io as sio def single_image(image,mode): img = image.resize((128, 128)) if mode=="rgb": return np.array(img).flatten() elif mode=="hsv": return np.array(img.convert('HSV')).flatten() else: kmeans = sio.load('Models/kmeans.skops') num_clusters=kmeans.n_clusters sift = cv2.SIFT_create() img = np.array(img.convert("L")) keypoints, descriptors = sift.detectAndCompute(img, None) words = kmeans.predict(descriptors) hist, _ = np.histogram(words, bins=num_clusters, range=(0, num_clusters)) return np.array(hist) def Classify(img, pre,model): start_time = time.time() image = Image.open(img) file="Models/"+model+'_'+pre+'.skops' loaded_model = sio.load(file) predictions = loaded_model.predict(single_image(image,pre).reshape(1,-1))[0] end_time = time.time() elapsed_time_microseconds = (end_time - start_time) * 1_000 return predictions,(end_time - start_time) * 1_000 interface = gr.Interface( fn=Classify, inputs=[ gr.Image(type="filepath"), gr.Radio( ["rgb", "hsv", "sift"], label="Preprocessing", info="Choose one" ) , gr.Radio( ["dt", "rf", "gb"], label="ML Model (Dicision Tree, Random Forest, Gradient Boosting)", info="Choose one" ) ], outputs=[ gr.Textbox(label="Class"), gr.Textbox(label="Time (milliseconds)") ] ) # Launch the interface interface.launch()