Spaces:
Runtime error
Runtime error
import gradio as gr | |
import torch | |
from torchvision import transforms | |
from PIL import Image | |
import numpy as np | |
from unet_model import UNet | |
from huggingface_hub import hf_hub_download | |
# Load trained model weights from Hugging Face Hub | |
weights_path = hf_hub_download( | |
repo_id="Vizuara/unet-crack-segmentation", # ensure this matches your repo | |
filename="unet_weights_v2.pth" # make sure this file exists in repo | |
) | |
# Initialize and load model | |
model = UNet() | |
model.load_state_dict(torch.load(weights_path, map_location="cpu")) | |
model.eval() | |
# Preprocessing: same as training | |
IMG_HEIGHT, IMG_WIDTH = 128, 128 | |
transform = transforms.Compose([ | |
transforms.Resize((IMG_HEIGHT, IMG_WIDTH)), | |
transforms.ToTensor() | |
]) | |
def predict(image): | |
orig_w, orig_h = image.size # original size of uploaded image | |
img = transform(image).unsqueeze(0) # (1,3,128,128) | |
with torch.no_grad(): | |
pred = model(img) | |
mask = pred.squeeze(0).squeeze(0).cpu().numpy() | |
mask = (mask * 255).astype(np.uint8) # grayscale mask | |
# Resize back to original size | |
mask_img = Image.fromarray(mask).resize((orig_w, orig_h), Image.NEAREST) | |
return mask_img | |
# Gradio interface | |
demo = gr.Interface( | |
fn=predict, | |
inputs=gr.Image(type="pil"), | |
outputs=gr.Image(type="pil"), | |
title="UNet Crack Segmentation", | |
description="Upload a concrete surface image to get predicted crack mask" | |
) | |
if __name__ == "__main__": | |
demo.launch() | |