roboflow / notebooks

Examples and tutorials on using SOTA computer vision models and techniques. Learn everything from old-school ResNet, through YOLO and object-detection transformers like DETR, to the latest models like Grounding DINO and SAM.
https://roboflow.com/models
4.75k stars 740 forks source link

Could not open video at /content/subway.mp4 #267

Open v479038280 opened 3 months ago

v479038280 commented 3 months ago

Search before asking

Notebook name

how-to-detect-and-count-objects-in-polygon-zone.ipynb

Bug

Exception                                 Traceback (most recent call last)
[<ipython-input-27-ef352d094252>](https://localhost:8080/#) in <cell line: 6>()
      4 generator = sv.get_video_frames_generator(SUBWAY_VIDEO_PATH)
      5 iterator = iter(generator)
----> 6 frame = next(iterator)
      7 
      8 # detect

[/usr/local/lib/python3.10/dist-packages/supervision/video.py](https://localhost:8080/#) in get_video_frames_generator(source_path)
    118     video = cv2.VideoCapture(source_path)
    119     if not video.isOpened():
--> 120         raise Exception(f"Could not open video at {source_path}")
    121     success, frame = video.read()
    122     while success:

Exception: Could not open video at /content/subway.mp4

Environment

Minimal Reproducible Example

import supervision as sv

# extract video frame
generator = sv.get_video_frames_generator(SUBWAY_VIDEO_PATH)
iterator = iter(generator)
frame = next(iterator)

# detect
outputs = predictor(frame)
detections = sv.Detections(
    xyxy=outputs["instances"].pred_boxes.tensor.cpu().numpy(),
    confidence=outputs["instances"].scores.cpu().numpy(),
    class_id=outputs["instances"].pred_classes.cpu().numpy().astype(int)
)

# annotate
box_annotator = sv.BoxAnnotator(thickness=4, text_thickness=4, text_scale=2)
frame = box_annotator.annotate(scene=frame, detections=detections)

%matplotlib inline  
sv.show_frame_in_notebook(frame, (16, 16))

Additional

the file subway.mp4 is a Invalidation file .

Are you willing to submit a PR?

el634dev commented 1 month ago

I fixed this by creating a content folder and placing the video inside the folder. The dot before {HOME} is necessary for Colab to look at the root directory and search for the folder named content. I included a small code sample below that fixes this issue:

import os

HOME = os.getcwd()
# HOME = './content'
SUBWAY_VIDEO_PATH = f".{HOME}/subway.mp4"

If you use the line that is commented out, then the dot before {HOME} is not necessary; it's only necessary with os.getcwd(). The folder would also be unnecessary and you can avoid creating one if you use the line that is commented out. You can use either HOME variable for your project.