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() | |