vardang/CustomModel
0
1import subprocess2import sys3 4def install(package):5 subprocess.check_call([sys.executable, "-m", "pip", "install", package])6 7install("tensorflow")8install("scikit-image")9install("scikit-learn")10 11 12 13import gradio as gr14import numpy as np15import tensorflow as tf16from skimage import io17from skimage.transform import resize18from sklearn.neighbors import NearestCentroid19from tensorflow.keras.applications import ResNet5020 21 22base_model = ResNet50(weights="imagenet", include_top=False, input_shape=(224, 224, 3), pooling="avg")23clf = NearestCentroid()24 25 26def train(positive_images, negative_images):27 samples = []28 for p in positive_images:29 samples.append(resize(io.imread(p), (224, 224), preserve_range=True))30 for n in negative_images:31 samples.append(resize(io.imread(n), (224, 224), preserve_range=True))32 samples = np.array(samples)33 34 X = base_model.predict(tf.keras.applications.resnet50.preprocess_input(samples))35 36 y_pos = np.ones((len(positive_images), 1))37 y_neg = np.zeros((len(negative_images), 1))38 y = np.concatenate([y_pos, y_neg])39 clf.fit(X, y)40 41 return positive_images, negative_images42 43 44def predict(image_paths):45 samples = []46 for p in image_paths:47 samples.append(resize(io.imread(p), (224, 224), preserve_range=True))48 49 samples = np.array(samples)50 X = base_model.predict(tf.keras.applications.resnet50.preprocess_input(samples))51 52 return clf.predict(X), image_paths53 54 55# Create the Gradio interface56with gr.Blocks() as app:57 gr.Markdown("# Image Upload for Training")58 gr.Markdown("Upload positive and negative image examples to train your ML model.")59 60 with gr.Row():61 with gr.Column():62 gr.Markdown("### Positive Examples")63 positive_uploader = gr.File(label="Upload Positive Images", file_types=["image"], file_count="multiple")64 positive_gallery = gr.Gallery(label="Positive Images")65 66 with gr.Column():67 gr.Markdown("### Negative Examples")68 negative_uploader = gr.File(label="Upload Negative Images", file_types=["image"], file_count="multiple")69 negative_gallery = gr.Gallery(label="Negative Images")70 71 train_button = gr.Button("Train")72 73 train_button.click(74 train,75 inputs=[positive_uploader, negative_uploader],76 outputs=[positive_gallery, negative_gallery]77 )78 79 with gr.Row():80 gr.Markdown("### Inference")81 inference_uploader = gr.File(label="Upload Images For Inference", file_types=["image"],82 file_count="multiple")83 inference_gallery = gr.Gallery(label="Inference Images")84 85 predict_button = gr.Button("Predict")86 output = gr.Textbox(label="Result", interactive=False)87 88 predict_button.click(89 predict,90 inputs=inference_uploader,91 outputs=[output, inference_gallery]92 )93 94# Run the app95app.launch()