Introduction
Object detection locates and classifies objects in images using bounding boxes and class labels.
YOLO
import cv2
# Load YOLOv5 (requires ultralytics package)
from ultralytics import YOLO
model = YOLO('yolov8n.pt') # Nano model
results = model('image.jpg', save=True)
for r in results:
boxes = r.boxes
for box in boxes:
class_id = int(box.cls[0])
confidence = float(box.conf[0])
bbox = box.xyxy[0].tolist()
print(f"Class: {class_id}, Conf: {confidence}, Box: {bbox}")
Faster R-CNN
import torchvision
from torchvision.models.detection import fasterrcnn_resnet50_fpn
model = fasterrcnn_resnet50_fpn(pretrained=True)
model.eval()
# Preprocess
from torchvision import transforms
transform = transforms.Compose([transforms.ToTensor()])
img_tensor = transform(img).unsqueeze(0)
# Detect
with torch.no_grad():
predictions = model(img_tensor)
Detectron2
from detectron2.engine import DefaultPredictor
from detectron2.config import get_cfg
from detectron2.utils.visualizer import Visualizer
cfg = get_cfg()
cfg.merge_from_file("faster_rcnn_R_50_FPN_3x.yaml")
cfg.MODEL.WEIGHTS = "model_final.pkl"
predictor = DefaultPredictor(cfg)
outputs = predictor(img)
Bounding Boxes
# Draw bounding boxes
import cv2
for box in boxes:
x1, y1, x2, y2 = map(int, box)
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(img, label, (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 2)
Practice Problems
- Detect objects with YOLO
- Use pre-trained Faster R-CNN
- Extract bounding boxes
- Filter by confidence
- Visualize detections