CoolFace
Apppublic

vardang/CustomModel

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
app.py95 linesDownload Raw Back to root
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()