Spaces:
Build error
Build error
| import cv2 as cv | |
| import torch | |
| from ultralytics import YOLO | |
| # setting parameters | |
| CONFIDENCE_THRESHOLD = 0.5 | |
| NMS_THRESHOLD = 0.5 | |
| # colors for object detected | |
| COLORS = [(0, 255, 255), (255, 255, 0), (0, 255, 0), (255, 0, 0)] | |
| PINK = (147, 20, 255) | |
| fonts = cv.FONT_HERSHEY_COMPLEX | |
| # Load the YOLOv8 model | |
| model_select = "yolov8xcdark.pt" | |
| model = YOLO(model_select,'conf=0.45') | |
| # Verify that the model loaded correctly | |
| if not model: | |
| raise ValueError("Failed to load YOLOv8 model. Check the file path or model integrity.") | |
| # reading class names from YOLOv8 model | |
| class_names = model.names # This will get the class names from the loaded YOLOv8 model | |
| def ObjectDetector(image): | |
| # Resize the frame to fit the input size of YOLOv8 | |
| image_resized = cv.resize(image, (640, 640)) # YOLOv8 works well with 640x640 resolution | |
| image_rgb = cv.cvtColor(image_resized, cv.COLOR_BGR2RGB) # YOLO expects RGB images | |
| # Perform detection | |
| results = model(image_rgb) | |
| for result in results: | |
| boxes = result.boxes.xyxy.cpu().numpy() # Get bounding boxes | |
| scores = result.boxes.conf.cpu().numpy() # Get confidence scores | |
| class_ids = result.boxes.cls.cpu().numpy() # Get class IDs | |
| for (box, score, class_id) in zip(boxes, scores, class_ids): | |
| if score > CONFIDENCE_THRESHOLD: # Apply confidence threshold | |
| color = COLORS[int(class_id) % len(COLORS)] | |
| label = f"{class_names[int(class_id)]} : {score:.2f}" | |
| # Draw rectangle and label on original image (not the resized one) | |
| cv.rectangle(image, (int(box[0]), int(box[1])), (int(box[2]), int(box[3])), color, 2) | |
| cv.putText(image, label, (int(box[0]), int(box[1])-10), fonts, 0.5, color, 2) | |
| # setting up camera | |
| camera = cv.VideoCapture(0) | |
| counter = 0 | |
| capture = False | |
| number = 0 | |
| while True: | |
| ret, frame = camera.read() | |
| if not ret: | |
| break | |
| original = frame.copy() | |
| ObjectDetector(frame) | |
| # Show original frame with detections | |
| cv.imshow('frame', frame) | |
| if capture and counter < 10: | |
| counter += 1 | |
| cv.putText(frame, f"Capturing Img No: {number}", (30, 30), fonts, 0.6, PINK, 2) | |
| else: | |
| counter = 0 | |
| # Show original frame (before detection) | |
| cv.imshow('original', original) | |
| key = cv.waitKey(1) | |
| if key == ord('c'): | |
| capture = True | |
| number += 1 | |
| cv.imwrite(f'ReferenceImages/image{number}.png', original) | |
| if key == ord('q'): | |
| break | |
| camera.release() | |
| cv.destroyAllWindows() | |