| import gradio as gr |
| import numpy as np |
| import torch |
| from PIL import Image |
| from transformers import SegformerForSemanticSegmentation, SegformerImageProcessor |
|
|
| MODEL_ID = "mipedro1/segformer-buildings-segmentation" |
| processor = SegformerImageProcessor.from_pretrained(MODEL_ID) |
| model = SegformerForSemanticSegmentation.from_pretrained(MODEL_ID) |
| model.eval() |
|
|
| def predict(image): |
| inputs = processor(images=image, return_tensors="pt") |
| with torch.no_grad(): |
| outputs = model(**inputs) |
|
|
| upsampled = torch.nn.functional.interpolate( |
| outputs.logits, |
| size=(image.height, image.width), |
| mode="bilinear", |
| align_corners=False, |
| ) |
| pred = upsampled.argmax(dim=1).squeeze().numpy() |
| mask = (pred * 255).astype(np.uint8) |
| return Image.fromarray(mask) |
|
|
| demo = gr.Interface( |
| fn=predict, |
| inputs=gr.Image(type="pil", label="Ortofoto"), |
| outputs=gr.Image(label="Edificios detectados"), |
| title="Detección de edificios en ortofotos", |
| ) |
|
|
| demo.launch() |