python detectnet on video clip -> car_ride.mov

Hi.

I have a bit of experience with OpenCV, but is new to the Jetson and the jetson.utils API

I’m trying to run the detectnet-camera.py, but i want to use a file as input during the initial learning curve.
My understanding is that gstreamer would be the way to go, but i cannot find any examples and are not having succes.
I have tried using the classic OpenCV VideoCapture, but then i run into trouples when using data in the “net.Detect()” call

So in short - Could somebody assist me in modifying the detectnet-camera.py below to use gstreamer and take a “video.mov” file in a AAC, H.264 format, so i can get startet with something that works ;-)

import jetson.inference
import jetson.utils

import argparse
import sys

parse the command line

parser = argparse.ArgumentParser(description=“Locate objects in a live camera stream using an object detection DNN.”,
formatter_class=argparse.RawTextHelpFormatter, epilog=jetson.inference.detectNet.Usage())

parser.add_argument("–network", type=str, default=“ssd-mobilenet-v2”, help=“pre-trained model to load (see below for options)”)
parser.add_argument("–overlay", type=str, default=“box,labels,conf”, help=“detection overlay flags (e.g. --overlay=box,labels,conf)\nvalid combinations are: ‘box’, ‘labels’, ‘conf’, ‘none’”)
parser.add_argument("–threshold", type=float, default=0.5, help=“minimum detection threshold to use”)
parser.add_argument("–camera", type=str, default=“0”, help=“index of the MIPI CSI camera to use (e.g. CSI camera 0)\nor for VL42 cameras, the /dev/video device to use.\nby default, MIPI CSI camera 0 will be used.”)
parser.add_argument("–width", type=int, default=1280, help=“desired width of camera stream (default is 1280 pixels)”)
parser.add_argument("–height", type=int, default=720, help=“desired height of camera stream (default is 720 pixels)”)

try:
opt = parser.parse_known_args()[0]
except:
print("")
parser.print_help()
sys.exit(0)

load the object detection network

net = jetson.inference.detectNet(opt.network, sys.argv, opt.threshold)

create the camera and display

camera = jetson.utils.gstCamera(opt.width, opt.height, opt.camera)
display = jetson.utils.glDisplay()

process frames until user exits

while display.IsOpen():
# capture the image
img, width, height = camera.CaptureRGBA()

# detect objects in the image (with overlay)
detections = net.Detect(img, width, height, opt.overlay)

# print the detections
print("detected {:d} objects in image".format(len(detections)))

for detection in detections:
	print(detection)

# render the image
display.RenderOnce(img, width, height)

# update the title bar
display.SetTitle("{:s} | Network {:.0f} FPS".format(opt.network, net.GetNetworkFPS()))

# print out performance info
net.PrintProfilerTimes()

Hi,

OpenCV open camera or video with GStreamer library.
However, the default OpenCV package installed by the SDKmanager doesn’t have GStreamer support.

Please build OpenCV from source and try the script again.
https://github.com/AastaNV/JEP/blob/master/script/install_opencv3.4.0_TX2.sh

Thanks.

I have found the problem, after compiling OpenCV, maybe 10 times with gstreamer support, and cmake indicating gstreamer support enabled.

The problem was that the “opencv-python” was installed via pip, where there are no gstreamer support.
The pip version apparently takes precedence over the build version

As soon as the “pip uninstall opencv-python” command was run the cv2.getBuildInformation() shows correct gstreamer support and opencv now accept gstreamer data

Finally happy :-)