Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from ultralytics import YOLO | |
| import cv2 | |
| import numpy as np | |
| # Load YOLOv8 model | |
| model_path = "best(1).pt" | |
| model = YOLO(model_path) | |
| # Assign unique colors to each class | |
| colors = {name: (np.random.randint(100, 255), np.random.randint(100, 255), np.random.randint(100, 255)) for name in model.names.values()} | |
| # Function to detect components in a PCB image | |
| def detect_pcb(image, conf_threshold=0.5): | |
| results = model(image) | |
| detected_labels = [] | |
| # Convert image format | |
| image = np.array(image, dtype=np.uint8) | |
| # Process results | |
| for result in results: | |
| for box in result.boxes: | |
| conf = box.conf[0].item() # Confidence score | |
| if conf < conf_threshold: | |
| continue # Ignore low-confidence detections | |
| x1, y1, x2, y2 = map(int, box.xyxy[0]) # Bounding box coordinates | |
| cls = int(box.cls[0]) # Class index | |
| label = model.names[cls] # Component name | |
| detected_labels.append(f"{label} ({conf:.2f}) at ({x1}, {y1})") | |
| # Define colors and font | |
| color = colors[label] | |
| font = cv2.FONT_HERSHEY_SIMPLEX | |
| # Draw bounding box | |
| cv2.rectangle(image, (x1, y1), (x2, y2), color, 3) | |
| # Add text with a semi-transparent background | |
| text = f"{label} ({conf:.2f})" | |
| (w, h), _ = cv2.getTextSize(text, font, 0.7, 2) | |
| cv2.rectangle(image, (x1, y1 - h - 10), (x1 + w + 4, y1), color, -1) # Background | |
| cv2.putText(image, text, (x1 + 2, y1 - 5), font, 0.7, (255, 255, 255), 2) | |
| return image, "\n".join(detected_labels) | |
| # Create Gradio Interface | |
| iface = gr.Interface( | |
| fn=detect_pcb, | |
| inputs=[gr.Image(type="numpy"), gr.Slider(0.1, 1.0, value=0.5, label="Confidence Threshold")], | |
| outputs=[gr.Image(type="numpy"), gr.Textbox(label="Detected Components")], | |
| title="π PCB Component Detection", | |
| description="Upload a PCB image to detect components with a clearer output. Adjust confidence threshold to filter results.", | |
| ) | |
| iface.launch() | |