Spaces:
Sleeping
Sleeping
import streamlit as st | |
from transformers import SegformerForSemanticSegmentation, SegformerImageProcessor | |
from PIL import Image | |
import numpy as np | |
import torch | |
# Define the model path | |
model_hub_path = "nazlicanto/model_defectdetection" | |
# Load the model and preprocessor | |
model = SegformerForSemanticSegmentation.from_pretrained(model_hub_path) | |
preprocessor = SegformerImageProcessor.from_pretrained(model_hub_path) | |
st.title("PCB Defect Detection") | |
# Upload image in Streamlit | |
uploaded_file = st.file_uploader("Upload a PCB image", type=["jpg", "png"]) | |
if uploaded_file: | |
# Preprocess the image | |
test_image = Image.open(uploaded_file).convert("RGB") | |
inputs = preprocessor(images=test_image, return_tensors="pt") | |
# Model inference | |
with torch.no_grad(): | |
outputs = model(**inputs) | |
# Post-process | |
semantic_map = preprocessor.post_process_semantic_segmentation(outputs, target_sizes=[test_image.size[::-1]])[0] | |
semantic_map = np.uint8(semantic_map) | |
semantic_map[semantic_map==1] = 255 | |
semantic_map[semantic_map==2] = 195 | |
semantic_map[semantic_map==3] = 135 | |
semantic_map[semantic_map==4] = 75 | |
# Display the results | |
st.image(test_image, caption="Uploaded Image", use_column_width=True) | |
st.image(semantic_map, caption="Predicted Defects", use_column_width=True, channels="GRAY") | |