surveillance / services /under_construction /earthwork_detection.py
lokesh341's picture
Update services/under_construction/earthwork_detection.py
c824f53 verified
import cv2
import numpy as np
from typing import List, Tuple, Dict, Any
def process_earthwork(frame: np.ndarray) -> Tuple[List[Dict[str, Any]], np.ndarray]:
"""
Detect earthwork activity in the frame.
Args:
frame: Input frame as a numpy array.
Returns:
Tuple of (list of detections, annotated frame).
"""
# Convert to grayscale
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Apply edge detection
edges = cv2.Canny(gray, 100, 200)
# Find contours
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
detections = []
for i, contour in enumerate(contours):
area = cv2.contourArea(contour)
if area < 500: # Ignore small contours
continue
x, y, w, h = cv2.boundingRect(contour)
x_min, y_min, x_max, y_max = x, y, x + w, y + h
detections.append({
"box": [x_min, y_min, x_max, y_max],
"label": f"Earthwork {i+1}",
"type": "earthwork"
})
return detections, frame