lokesh341 commited on
Commit
ea1ea54
·
1 Parent(s): b636b20

Update services/under_construction/earthwork_detection.py

Browse files
services/under_construction/earthwork_detection.py CHANGED
@@ -1,4 +1,3 @@
1
- # services/under_construction/earthwork_detection.py
2
  import cv2
3
  import numpy as np
4
  from ultralytics import YOLO
@@ -6,58 +5,38 @@ import os
6
 
7
  # Load YOLOv8m model
8
  BASE_DIR = os.path.dirname(os.path.abspath(__file__))
9
- MODEL_PATH = os.path.join(BASE_DIR, "../../models/yolov8m.pt")
10
  model = YOLO(MODEL_PATH)
11
 
12
- def detect_earthwork(frame):
13
  """
14
- Detect earthwork-related objects in a frame using YOLOv8m.
15
  Args:
16
  frame: Input frame (numpy array)
17
  Returns:
18
- dict: Detection results with numbered labels
19
- numpy array: Annotated frame
20
  """
21
- # Run YOLOv8 inference
22
  results = model(frame)
23
 
24
  detections = []
25
- line_counter = 1 # Initialize counter for numbered labels
26
 
27
- # Process detections
28
  for r in results:
29
  for box in r.boxes:
30
  conf = float(box.conf[0])
31
- if conf < 0.5: # Confidence threshold
32
  continue
33
  cls = int(box.cls[0])
34
- label = model.names[cls] # Get class name (e.g., "truck", "person")
35
- if label not in ["truck", "person", "excavator", "bulldozer"]:
36
  continue
37
- xyxy = box.xyxy[0].cpu().numpy() # Bounding box coordinates
38
  x_min, y_min, x_max, y_max = map(int, xyxy)
39
 
40
- # Add numbered label
41
- detection_label = f"Line {line_counter} - {label.capitalize()} (Conf: {conf:.2f})"
42
  detections.append({
43
- "label": detection_label,
44
  "confidence": conf,
45
  "coordinates": [x_min, y_min, x_max, y_max]
46
  })
47
 
48
- # Draw bounding box and label on frame
49
- color = (0, 255, 0) # Green for earthwork objects
50
- cv2.rectangle(frame, (x_min, y_min), (x_max, y_max), color, 2)
51
- cv2.putText(frame, detection_label, (x_min, y_min - 10),
52
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)
53
-
54
- line_counter += 1 # Increment counter
55
-
56
- return {"detections": detections, "frame": frame}
57
-
58
- def process_earthwork(frame):
59
- """
60
- Wrapper function for integration with app.py.
61
- """
62
- result = detect_earthwork(frame)
63
- return result["detections"], result["frame"]
 
 
1
  import cv2
2
  import numpy as np
3
  from ultralytics import YOLO
 
5
 
6
  # Load YOLOv8m model
7
  BASE_DIR = os.path.dirname(os.path.abspath(__file__))
8
+ MODEL_PATH = os.path.abspath(os.path.join(BASE_DIR, "../../models/yolov8m.pt"))
9
  model = YOLO(MODEL_PATH)
10
 
11
+ def process_earthwork(frame):
12
  """
13
+ Detect earthwork activities in a frame.
14
  Args:
15
  frame: Input frame (numpy array)
16
  Returns:
17
+ list: List of detected earthwork activities
18
+ numpy array: Original frame (overlays handled elsewhere)
19
  """
 
20
  results = model(frame)
21
 
22
  detections = []
 
23
 
 
24
  for r in results:
25
  for box in r.boxes:
26
  conf = float(box.conf[0])
27
+ if conf < 0.5:
28
  continue
29
  cls = int(box.cls[0])
30
+ label = model.names[cls]
31
+ if label != "earthwork": # Assuming "earthwork" class exists
32
  continue
33
+ xyxy = box.xyxy[0].cpu().numpy()
34
  x_min, y_min, x_max, y_max = map(int, xyxy)
35
 
 
 
36
  detections.append({
37
+ "type": label,
38
  "confidence": conf,
39
  "coordinates": [x_min, y_min, x_max, y_max]
40
  })
41
 
42
+ return detections, frame