Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import numpy as np | |
| from PIL import Image | |
| from segmentation import segment_image, crop_dog, visualize_segmentation | |
| from classification import classify | |
| # config | |
| pre_scale_size = (2048, 2048) | |
| def classify_image_with_cropping(original_image, pre_segment): | |
| if isinstance(original_image, np.ndarray): | |
| original_image = Image.fromarray(original_image) # Convert ndarray to PIL Image | |
| # 1. Pre-scale | |
| if original_image.width > pre_scale_size[0] or original_image.height > pre_scale_size[1]: | |
| original_image.thumbnail(pre_scale_size, Image.LANCZOS) | |
| # 1. Segment the image | |
| if pre_segment: | |
| print("Segmenting...") | |
| segmented_image, mask = segment_image(original_image) | |
| if mask is not None: | |
| # 2. Crop to the dog (if found) | |
| print("Cropping...") | |
| visualised_image = visualize_segmentation(original_image, mask) | |
| cropped_image = crop_dog(segmented_image, mask) | |
| else: | |
| print(f"Failed segmentation, using original image") | |
| visualised_image = None | |
| cropped_image = original_image | |
| else: | |
| visualised_image = None | |
| cropped_image = original_image | |
| # 3. Preprocess and classify the cropped image | |
| print("Running classifier...") | |
| predicted_class_idx, predicted_label = classify(cropped_image) | |
| print("Done.") | |
| return visualised_image, cropped_image, predicted_label | |
| iface = gr.Interface( | |
| fn=classify_image_with_cropping, | |
| inputs=[gr.Image(type="pil"), | |
| gr.Checkbox(label="Try to isolate dog (pre-segmentation)", value=True)], | |
| outputs=[gr.Image(type="pil", label="Segmented image"), | |
| gr.Image(type="pil", label="Predicted image"), | |
| gr.Textbox(label="Predicated class")] | |
| ) | |
| iface.launch() | |