rdjarbeng commited on
Commit
9c5fb04
·
verified ·
1 Parent(s): 2130cf9

Changed from yolov8n-world.pt to yolov8s-world.pt, add error handling

Browse files
Files changed (1) hide show
  1. app.py +45 -7
app.py CHANGED
@@ -5,14 +5,50 @@ import torch
5
  from ultralytics import SAM, YOLOWorld
6
  import os
7
 
8
- # Initialize models
9
- sam_model = SAM("mobile_sam.pt") # Switch to MobileSAM for faster CPU inference
10
- yolo_model = YOLOWorld("yolov8n-world.pt") # Nano model for faster detection
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
  def detect_motorcycles(first_frame, prompt="motorcycle"):
13
  """Detect motorcycles in the first frame using YOLO-World and return bounding boxes."""
14
- yolo_model.set_classes([prompt])
15
- results = yolo_model.predict(first_frame, device="cpu", max_det=2, imgsz=320) # Force YOLO to use 320 resolution
 
 
 
 
 
 
 
 
 
 
 
16
  boxes = []
17
  for result in results:
18
  if result.boxes is not None and len(result.boxes.xyxy) > 0:
@@ -20,8 +56,10 @@ def detect_motorcycles(first_frame, prompt="motorcycle"):
20
 
21
  if len(boxes) > 0:
22
  boxes = np.vstack(boxes)
 
23
  else:
24
  boxes = np.array([])
 
25
  return boxes
26
 
27
  def segment_and_highlight_video(video_path, prompt="motorcycle", highlight_color="red"):
@@ -131,8 +169,8 @@ iface = gr.Interface(
131
  gr.Dropdown(choices=["red", "green", "blue"], label="Highlight Color", value="red")
132
  ],
133
  outputs=gr.Video(label="Highlighted Video"),
134
- title="Video Segmentation with MobileSAM and YOLO-World (CPU Optimized)",
135
- description="Upload a short video (5-10 seconds), specify a text prompt (e.g., 'motorcycle'), and choose a highlight color. Optimized for CPU with 320x180 resolution.",
136
  examples=[
137
  [None, "motorcycle", "red"],
138
  [None, "car", "green"],
 
5
  from ultralytics import SAM, YOLOWorld
6
  import os
7
 
8
+ # Initialize models with proper error handling and auto-download
9
+ def initialize_models():
10
+ """Initialize models with proper error handling."""
11
+ try:
12
+ sam_model = SAM("mobile_sam.pt") # This auto-downloads
13
+ print("✅ SAM model loaded successfully")
14
+ except Exception as e:
15
+ print(f"❌ Error loading SAM model: {e}")
16
+ raise
17
+
18
+ try:
19
+ # Try different YOLO-World model names that auto-download
20
+ yolo_model = YOLOWorld("yolov8s-world.pt") # Small world model (auto-downloads)
21
+ print("✅ YOLO-World model loaded successfully")
22
+ return sam_model, yolo_model
23
+ except Exception as e:
24
+ print(f"❌ Error loading YOLO-World model: {e}")
25
+ try:
26
+ # Fallback to regular YOLO if YOLO-World fails
27
+ from ultralytics import YOLO
28
+ yolo_model = YOLO("yolov8n.pt") # Regular YOLO nano model
29
+ print("⚠️ Using regular YOLO model as fallback")
30
+ return sam_model, yolo_model
31
+ except Exception as e2:
32
+ print(f"❌ Fallback YOLO model also failed: {e2}")
33
+ raise
34
+
35
+ sam_model, yolo_model = initialize_models()
36
 
37
  def detect_motorcycles(first_frame, prompt="motorcycle"):
38
  """Detect motorcycles in the first frame using YOLO-World and return bounding boxes."""
39
+ try:
40
+ # Check if it's YOLO-World model
41
+ if hasattr(yolo_model, 'set_classes'):
42
+ yolo_model.set_classes([prompt])
43
+ results = yolo_model.predict(first_frame, device="cpu", max_det=2, imgsz=320, verbose=False)
44
+ else:
45
+ # Regular YOLO model - can't set custom classes, will detect all objects
46
+ results = yolo_model.predict(first_frame, device="cpu", max_det=5, imgsz=320, verbose=False)
47
+ print("⚠️ Using regular YOLO - detecting all objects, not just the specified prompt")
48
+ except Exception as e:
49
+ print(f"Error in YOLO prediction: {e}")
50
+ return np.array([])
51
+
52
  boxes = []
53
  for result in results:
54
  if result.boxes is not None and len(result.boxes.xyxy) > 0:
 
56
 
57
  if len(boxes) > 0:
58
  boxes = np.vstack(boxes)
59
+ print(f"Detected {len(boxes)} objects")
60
  else:
61
  boxes = np.array([])
62
+ print("No objects detected")
63
  return boxes
64
 
65
  def segment_and_highlight_video(video_path, prompt="motorcycle", highlight_color="red"):
 
169
  gr.Dropdown(choices=["red", "green", "blue"], label="Highlight Color", value="red")
170
  ],
171
  outputs=gr.Video(label="Highlighted Video"),
172
+ title="Video Segmentation with MobileSAM and YOLO (CPU Optimized)",
173
+ description="Upload a short video (5-10 seconds), specify a text prompt (e.g., 'motorcycle'), and choose a highlight color. Uses MobileSAM + YOLO for CPU processing at 320x180 resolution.",
174
  examples=[
175
  [None, "motorcycle", "red"],
176
  [None, "car", "green"],