|
import gradio as gr |
|
from utils import load_specific_model, inference |
|
from datetime import datetime |
|
import pytz |
|
|
|
|
|
MODEL_NAMES = ["EfficientNet-B3", "EfficientNet-B4", "vgg19", "resnet50", "dinov2_vits14"] |
|
|
|
|
|
example_images = [ |
|
("Beispielbild Glas", "src/examples/Glas.jpg"), |
|
("Beispielbild Organic", "src/examples/Organic.jpg"), |
|
("Beispielbild Papier", "src/examples/Papier.jpg"), |
|
("Beispielbild Restmüll", "src/examples/Restmuell.jpg"), |
|
("Beispielbild Wertstoff", "src/examples/Wertstoff.jpg") |
|
] |
|
|
|
def predict(inp_image, inp_dropdown): |
|
if inp_dropdown is None: |
|
raise gr.Error("No model selected!") |
|
if inp_image is None: |
|
raise gr.Error("No image uploaded!") |
|
if inp_dropdown not in MODEL_NAMES: |
|
raise gr.Error("Invalid model selected!") |
|
|
|
|
|
utc_now = datetime.now(pytz.utc) |
|
|
|
|
|
german_timezone = pytz.timezone('Europe/Berlin') |
|
german_time = utc_now.astimezone(german_timezone) |
|
|
|
|
|
formatted_time = german_time.strftime('%Y-%m-%d %H:%M:%S %Z') |
|
print('Current time and date:', formatted_time) |
|
|
|
print(f"\nInput: {inp_dropdown}\n") |
|
current_model = load_specific_model(inp_dropdown) |
|
confidences = inference(current_model, inp_image) |
|
print(f"\nConfidences: {confidences}\n") |
|
return confidences |
|
|
|
with gr.Blocks() as demo: |
|
with open('src/app_template.md', 'r') as f: |
|
markdown_string = f.read() |
|
header = gr.Markdown(markdown_string) |
|
|
|
with gr.Row(variant="panel", equal_height=True): |
|
|
|
user_image = gr.Image( |
|
type="pil", |
|
label="Upload Your Own Image", |
|
info="You can also upload your own image for prediction.", |
|
scale=2, |
|
height=350, |
|
) |
|
|
|
with gr.Column(): |
|
output = gr.Label( |
|
num_top_classes=3, |
|
label="Output", |
|
info="Top three predicted classes and their confidences.", |
|
scale=2, |
|
) |
|
|
|
model_dropdown = gr.Dropdown( |
|
MODEL_NAMES, |
|
value="EfficientNet-B3", |
|
label="Model", |
|
info="Select a model to use.", |
|
scale=1, |
|
) |
|
|
|
predict_button = gr.Button(value="Predict", label="Predict", info="Click to make a prediction.", scale=1) |
|
predict_button.click(fn=predict, inputs=[user_image, model_dropdown], outputs=output, queue=True) |
|
|
|
gr.Markdown("## Example Images") |
|
gr.Markdown("You can just drag and drop these images into the image uploader above!") |
|
|
|
with gr.Row(): |
|
for name, image_path in example_images: |
|
example_image = gr.Image( |
|
value=image_path, |
|
label=name, |
|
type="pil", |
|
height=220, |
|
interactive=False, |
|
) |
|
|
|
if __name__ == "__main__": |
|
demo.queue() |
|
demo.launch() |
|
|