Jetson上调用多个USB摄像头的方法

2022-05-12 22:44:13 浏览数 (2)

日前有朋友在 Xavier Orion 上要调用3个USB摄像头,发现只能正常启动2个,感到有些困扰,是否Jetson设备有数量限制?

其实问题的症结在于这位朋友使用OpenCV的方式调用,这种方式虽然上手容易,但是对资源消耗程度比较大,也需要开发者对摄像头一些硬件参数有足够深入的掌握,否则出错率较高。

为了协助更多开发者能有效用起Jetson上的计算资源,这里提供两种能同时调用4个不同规格USB摄像头的方法:

1. 使用英伟达”Hello AI World” 项目的videoSource()函数:

项目开源仓在https://github.com/dusty-nv/jetson-inference ,请自行根据项目“Building the Project from Source”安装说明进行编译,然后就能使用这个项目的videoSource()函数。

接下来撰写4个内容一致的Python代码,各自调用1个USB摄像头,代码内容如下:

代码语言:javascript复制
import jetson.utilssource = jetson.utils.videoSource('/dev/videoN')  #请根据要调用的摄像头编号修改N值output = jetson.utils.videoOutput("display://0") while output.IsStreaming():frame = source.Capture() output.Render(frame)

然后分别执行 python3 xxx.py 就能启动4个USB摄像头。(如下视频)

2. 使用DeepStream:

请先自行在Jetson设备上安装DeepStream 6.0开发套件,然后将工作位置移动到

/opt /nvidia/deepstream/deepstream/samples/configs/deepstream-app/ 下,以

source1_usb_dec_infer_resnet_int8.txt 配置文件为基础,建议复制成myDs.txt再进行修改。

为了满足四个摄像头同时启动,需要修改以下两部分:

(1) 将 [tiled-display] 下的 rows 与 columns 都设为 2

(2) 将 [source0] 设置组内容再复制3份,修改设置组名为 [source1]、[source2]、[source3] ,并将每个设置组最后一行“camera-v4l2-dev-node=”的参数,对应到1、2、3的摄像头编号,这样就有4组数据源。

修改完毕之后,执行以下指令即可:

代码语言:javascript复制
$ deepstream-app -c myDs.txt

就能启动4个USB摄像头

以上两种方法能顺利启动4个USB摄像头,关键因素在于这两种方法都是使用比较节省资源的底层gstreamer接口,建议开发者未来实际开发应用时,最好使用gstreamer调用方式,也可以将Hello AI World项目直接变成系统底层库,使用videoSource()函数来操作,当然也能直接使用DeepStream作为开发平台。

0 人点赞