USB Camera is not detected by DeepStream SDK

I’m working with Dahua and HikVision cameras(USB camera).
Before installing MVViewer, we didn’t have any

/dev/video0

but, after installing the pertinent driver a

/dev/video0

happened to appear. I have installed a MVViewer and I could access to cameras via MVViewer.

DeepStream(tiny yolov2) works fine for .mp4 input videos(not camera live stream).

Now, I want to run deep stream for tiny yolov2 using my usb camera as input source(live stream). But by running this command:

deepstream-app -c deepstream_app_config_yoloV2_tiny.txt

I get the following error:

ERROR from src_elem: Error getting capabilities for device '/dev/video0': It isn't a v4l2 driver. Check if it is a v4l1 driver.
Debug info: v4l2_calls.c(94): gst_v4l2_get_capabilities (): /GstPipeline:pipeline/GstBin:multi_src_bin/GstBin:src_sub_bin0/GstV4l2Src:src_elem:
system error: No such file or directory
App run failed

My DeepStream configure(deepstream_app_config_yoloV2_tiny.txt) is as follows:

################################################################################
# Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
################################################################################

[application]
enable-perf-measurement=1
perf-measurement-interval-sec=5
#gie-kitti-output-dir=streamscl

[tiled-display]
enable=1
rows=1
columns=1
width=1280
height=720
gpu-id=0
#(0): nvbuf-mem-default - Default memory allocated, specific to particular platform
#(1): nvbuf-mem-cuda-pinned - Allocate Pinned/Host cuda memory, applicable for Tesla
#(2): nvbuf-mem-cuda-device - Allocate Device cuda memory, applicable for Tesla
#(3): nvbuf-mem-cuda-unified - Allocate Unified cuda memory, applicable for Tesla
#(4): nvbuf-mem-surface-array - Allocate Surface Array memory, applicable for Jetson
nvbuf-memory-type=0

[source0]
enable=1
#Type - 1=CameraV4L2 2=URI 3=MultiURI
type=1
camera-width=640
camera-height=480
camera-fps-n=30
camera-fps-d=1
camera-v4l2-dev-node=0

[sink0]
enable=1
#Type - 1=FakeSink 2=EglSink 3=File
type=2
sync=0
source-id=0
gpu-id=0
nvbuf-memory-type=0

[osd]
enable=1
gpu-id=0
border-width=1
text-size=15
text-color=1;1;1;1;
text-bg-color=0.3;0.3;0.3;1
font=Serif
show-clock=0
clock-x-offset=800
clock-y-offset=820
clock-text-size=12
clock-color=1;0;0;0
nvbuf-memory-type=0

[streammux]
gpu-id=0
##Boolean property to inform muxer that sources are live
live-source=0
batch-size=1
##time out in usec, to wait after the first buffer is available
##to push the batch even if the complete batch is not formed
batched-push-timeout=40000
## Set muxer output width and height
width=1920
height=1080
##Enable to maintain aspect ratio wrt source, and allow black borders, works
##along with width, height properties
enable-padding=0
nvbuf-memory-type=0

# config-file property is mandatory for any gie section.
# Other properties are optional and if set will override the properties set in
# the infer config file.
[primary-gie]
enable=1
gpu-id=0
model-engine-file=model_b1_fp32.engine
labelfile-path=labels.txt
batch-size=1
#Required by the app for OSD, not a plugin property
bbox-border-color0=1;0;0;1
bbox-border-color1=0;1;1;1
bbox-border-color2=0;0;1;1
bbox-border-color3=0;1;0;1
interval=0
gie-unique-id=1
nvbuf-memory-type=0
config-file=config_infer_primary_yoloV2_tiny.txt

[tests]
file-loop=0

Also, for checking if v4l2 works fine, I run :

v4l-info

which will show up

/dev/video0: not an video4linux device

furthermore, by running

v4l2-ctl -l

I get

Failed to query video capabilities: No such file or directory
libv4l2: error getting capabilities: No such file or directory
VIDIOC_QUERYCAP: failed: No such file or directory
/dev/video0: not a v4l2 node

Could anyone please help me!
Thanks in advance.

Hi,
Please check if you can get information about the USB cameras.

$ v4l2-ctl -d /dev/video0 --list-formats-ext

If you cannot get information from the command, you should miss certain drivers.

And probably the camera is IP camera? If it is IP camera, rtspsrc should be used.

Failed to query video capabilities: No such file or directory
libv4l2: error getting capabilities: No such file or directory
VIDIOC_QUERYCAP: failed: No such file or directory
/dev/video0: not a v4l2 node

My camera is a USB camera not a IP camera.

Thanks a lot.

Hi,
Please give correct ‘/dev/videoX’ in the command.

Hi Danelll,

My camera is a Dahua A5501CU60E (a Machine Vision USB Camera).
I am working on Jetson Nano. I installed the Drivers that Dahua released. After installing the drivers, /dev/video0 appears when the camera is connected to the USB port (it also vanishes once the camera is disconnected from the USB port).

when I run the command

v4l2-ctl -d /dev/video0 --list-formats-ext

, it shows the following output:

VIDIOC_QUERYCAP: failed: No such file or directory
/dev/video0: not a v4l2 node
nano@nano-desktop:~/Desktop/ca

it seems like the /dev/video0 is recognized, but not as a v4l2 driver. are there any commands to help me check if it is a v4l1 driver (rather than v4l2). please note that when running the command

gst-launch-1.0 v4l2src device="/dev/video0" name=e ! 'video/x-raw, width=640, height=480' ! videoconvert ! 'video/x-raw, width=640, height=480, format=(string)YUY2' ! xvimagesink

to use Gstreamer with v4l2, I get the following error:

Setting pipeline to PAUSED ...
ERROR: Pipeline doesn't want to pause.
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:e: Error getting capabilities for device '/dev/video0': It isn't a v4l2 driver. Check if it is a v4l1 driver.
Additional debug info:
v4l2_calls.c(94): gst_v4l2_get_capabilities (): /GstPipeline:pipeline0/GstV4l2Src:e:
system error: No such file or directory
Setting pipeline to NULL ...
Freeing pipeline ...

Hi,
It does not mention it supports UVC driver in the user manual.
https://www.dahuasecurity.com/products/productDetail/13091?us

Suggest you contact Dahua to get support. If it is confirmed not working with UVC driver, you may consider to user other cameras.

Dear Danelll
Thank You for your response, my question precisely is if within the code

gst-launch-1.0 <b>v4l2src</b> device="/dev/video0" name=e ! 'video/x-raw, width=640, height=480' ! videoconvert ! 'video/x-raw, width=640, height=480, format=(string)YUY2' ! xvimagesink

, I can Use anything other than v4l2src

hi,
For USB cameras, we support uvc driver and use v4l2src plugin on Jetson platforms. suggest you contact camera vendor to get support.

Dear Danell,
while I am currently waiting on a response from my camera vendor on whether or not it supports UVC drivers, I would like to know that if UVC is not supported, is there anything other than buying another camera that I could do to make my camera work with deepstream or gstreamer. the camera can be recognized and it works well after the installation of a software called MVViewer which is provided by dahua itself (but it only works only in that software). it seems like during the installation of MVviewer, some drivers are installed (because after installation /dev/video0 does appear but it cannot be read with gstreamer, giving me an error saying that it is not a v4l2 driver).

if a camera does not support uvc drivers, does that mean it is unusable with deepstream at all?

Hi,

UVC driver is general and most USB cameras support it. With it, you can simply modify config file to run deepstream-app. We have tried four USB cameras:
https://devtalk.nvidia.com/default/topic/1058334/deepstream-sdk/deepstream4-jetson-nano-multiple-webcams-issue/post/5390583/#5390583

If UVC driver is not supported, one alternative is to modify deepstream-app to support appsrc, and feed frames into the appsrc. This is a bit complex and requires certain coding.

Dear Danelll,

I have another camera (MV-CA050-20UC) which I can use. on the camera’s specification in the following link:

https://www.rmaelectronics.com/content/hikVision/CameraDatasheets/USB3.0AreaScan/MV-CA050-20UM_DataSheet.PDF

it says that the camera is USB 3.0 Vision (v1.0) Compliant.
are there any ways to read this camera via gstreamer-1.0 ?