Study Deepstream without jetson or any edge device

GPU, Deepstream 5, TensorRT 7, driver version 440.64

Is it possible to work without any external device? Every course on deepstream, even the docker container deployment, requires a jetson development toolkit as a prerequisite. Is there any way I can learn Deepstream hands on without Jetson or any other edge device? For example, by providing a video clip for processing, instead of live feed from Jetsonor any other device?

No, it’s not possible to use deepstream at all without some sort of nvidia hardware.
I use a computer with GTX1660 gpu and it works fine. If you don’t want to make any upfront investment, you can search for the cheapest cloud gpu. Tesla T4 from AWS seems to be standard but it’ll cost you > 0.5 $ / hour. There might be cheaper offerings. Anyhow you can turn off the gpu virtual machine when not in use and you won’t get billed.

@dorin.clisu.ntt I am deploying Deepstream 5 on my Ubuntu 20.04 OS on my HP laptop with nvidia Geforce gpu. Its not the gpu. I meant a jetson device. A Jetson or tesla device is used for video input in Deepstream right? I do not have access to either of these. Can I use a video clip instead of jetson device for video input to deepstream?

Not true. Video input is independent from deepstream, and is handled by standard gstreamer elements (v4l2src, filesrc, rtspsrc, etc.).
If you check the deepstream sample applications (included in docker image nvcr.io/nvidia/deepstream:5.0-dp-20.04-samples or :4.0.2-19.12-samples) you can see that either embedded camera (it should also work with laptop webcam), RTSP camera or local file source (mp4) are supported.

2 Likes

Is there any article to utilize this aspect? Since I did not find any mention of using video source other than jetson in Deepstream SDK or in the nvidia Deep Learning Institute course. Is there a blog/source you would recommend to learn how to change video source in deepstream? I’m a beginner and I’d really appreciate the help

While not technically supported, and probably against the TOS for datacenter deployment, I have had success using a GeForce card (GTX 1080) for development.

Since you’re running 20.04, you will probably need to install nvidia-docker and develop using the deepstream docker image.

docker pull nvcr.io/nvidia/deepstream:5.0-dp-20.04-devel

Is the image you will want, since it has the headers and such. It does not have the Python bindings (i think) if you care about that.

Example usage is here:
https://ngc.nvidia.com/catalog/containers/nvidia:deepstream

You can avoid forwarding all that x11 stuff by using RTSP out or similar if you want. As far as video input goes, nearly any source should work, however if you want to pass through a v4l2 device (eg. a webcam) you will need to use the --device /dev/video# flag, where # is your webcam.

Here is an example from vscode’s settings.json file which shows the syntax for either rtsp or file input arguments to ds.

    {
        "name": "Test #3: multi-stream",
        "type": "python",
        "request": "launch",
        "console": "integratedTerminal",
        "program": "${file}",
        "cwd": "${workspaceFolder}/apps/deepstream-test3",
        "args": [
            "rtsp://username:password@192.168.1.16:554//h264Preview_01_main",
            "file:///opt/nvidia/deepstream/deepstream-5.0/samples/streams/sample_720p.h264",
            "file:///opt/nvidia/deepstream/deepstream-5.0/samples/streams/sample_1080p_h265.mp4",
            "--width", "480",
            "--height", "270"
        ]
    },

Hi @pooja.p
Here are the DeepStream docs - https://docs.nvidia.com/metropolis/ .

@mchi have gone through the entire course and Deepstream SDK, but there is no clear reference for video input, apart from Jetson. I only have a .mp4 file and my laptop webcam as video input source. I found no mention of a video source other than a Jetson device in documentation.

When I gave the .mp4 file as input, This is the error I got

One element could not be created. Exiting. deepstream 5.0 20.04 test1 docker

Please correct me if I’m wrong. Is there a video input other than Jetson mentioned in the documetation? I have been informed in this forum that it is possible to provide an mp4 file or a v4l2 (eg webcam) as input video stream. I’m just unable to find any documentation or gudeline steps to follow to acieve this.

Hi @mdegans I use the GM108M [GeForce 940M] Geforce card, which is pre-installed in my Laptop.

Can you please elaborate as to which part of which file is this present in, or whether this info is provided in the DS SDK documentation?

Hi @foobar.warren I am not able to open the gstreamer files of sample Deepstream apps in Deepstream docker. That is where the rtsp file is right? Do you have a source from where I can learn to open and edit gstreamer files?

You can find the difference source (V4L2 camera, local file, RTSP) configure in https://docs.nvidia.com/metropolis/deepstream/dev-guide/index.html#page/DeepStream_Development_Guide/deepstream_app_config.3.2.html#wwpID0E0XB0HA

can you elaborate how run into this failure?

@pooja.p

Can you please elaborate as to which part of which file is this present in, or whether this info is provided in the DS SDK documentation?

Sorry for not being explicit about that

--device is a docker run option you can use to pass devices to a container, such as /dev/video0 or similar. --gpus all will pass through gpus on x86. --runtime nvidia will do the same (and more) on Tegra. Other devices need --device specified manually. To find out what devices (eg. webcam, capture card, etc) are avaiilable to pass to the container, you can sudo apt-get install v4l-utils and run v4l2-ctl --list-devices.

Note: The --device syntax of --device /dev/foobar:/dev/foobar can be simplified to --device /dev/foobar. It’s only necessary to specify the ...:/dev/foobar if you wish to give the device another name inside the container (some scripts might expect numbering to start at 0, for example, so /dev/video1 might have to be remapped to /dev/video0.

Re: 940m, I am not sure if it is tested with DeepStream. Just to test the --gpus flag works, can you post the result of the following command:

docker run --rm --gpus all nvidia/cuda:10.0-base nvidia-smi

You shuld see something like this:

Mon Jun 29 18:51:42 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.64.00    Driver Version: 440.64.00    CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 1080    On   | 00000000:01:00.0  On |                  N/A |
|  0%   38C    P8     9W / 200W |      1MiB /  8116MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 1080    On   | 00000000:02:00.0 Off |                  N/A |
|  0%   41C    P8     7W / 200W |      1MiB /  8119MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

The nvidia gstreamer doc is good. From that I gathered this method for playing videos with gstreamer;

gst-launch-1.0 filesrc location=/opt/nvidia/deepstream/deepstream-5.0/samples/streams/sample_720p.mp4 ! qtdemux name=demux demux.video_0 ! queue ! h264parse ! omxh264dec ! nveglglessink -e

Here is a link to nvidia gstreamer documentation

https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide%2Faccelerated_gstreamer.html

My github is very generic. No docker, just Python. Docker is really for dev-ops and production not for development. I use VS Code, its really good.

I’ve been staying in the context of an ARM64 device, so for DS is downloaded deepstream-5.0_5.0.0-1_arm64.deb and installed it in /opt/nvidia/deepstream/deepstream-5.0/samples/python. If you go the VS Code / Python route my repository has environment variables and args configured for the samples. https://github.com/culebracut/ds-vs

1 Like

That’s a misconception in my opinion. I think every developer should know the basics of docker (if not master it), otherwise they or their devops colleagues will have endless trouble maintaining dev / prod environment parity (which is essential if you want to be efficient and stay competitive on this market…)

3 Likes