前面介绍过使用deepstream-app工具,启用多个视频进行车辆与行人的识别,并且启动“追踪”功能进行物件追踪的高级功能,接下来就教大家如何在deepstream-app里调用USB与CSI摄像头,并且与先前的视频同时启用来进行物件识别的应用。
这里使用Jetson Nano 2GB作为实验平台,上面安装一个CSI摄像头与一个USB摄像头。
在调用摄像头之前,建议先确认一下摄像头的位置与分辨率等信息,因为DeepStream会检查设定文件里的分辨率是否符合要求。使用v4l2-utils工具包来检查摄像头的信息,请按照以下步骤进行安装,并且检测摄像头分辨率:
sudo apt-get install v4l2-utils v4l2-ctl --list-devices |
下面显示的信息,表示目前接上一个imx-219的CSI摄像头,以及一个USB 2.0摄像头。
接下执行以下指令,查看个别摄像头可使用的分辨率为多少:
v4l2-ctl --list-formats-ext --device=0 v4l2-ctl --list-formats-ext --device=1 |
下面显示的信息,表示CSI摄像头(device=0)能支持3264x2464、3264x1848、1920x080、1640x1232、1280x720等5种分辨率
下面显示的信息,表示USB摄像头(device=1)能支持640x480、352x288、320x240、176x144、160x120等5种分辨率
接下来看看在DeepStream路径(/opt/nvidia/deepstream/deepstream)的samples/configs/deepstream-app 下面有个 source2_csi_usb_dec_infer_resnet_int8.txt文件,这是专门以CSI与USB摄像头为输入源的配置,里面可以看到以下关于摄像头设置的内容:
[source0] enable=1 #Type - 1=CameraV4L2 2=URI 3=MultiURI 4=RTSP 5=CSI type=5 camera-width=1280 camera-height=720 camera-fps-n=30 camera-fps-d=1 camera-csi-sensor-id=0
[source1] enable=1 #Type - 1=CameraV4L2 2=URI 3=MultiURI type=1 camera-width=1280 camera-height=720 camera-fps-n=30 camera-fps-d=1 camera-v4l2-dev-node=6 |
在[source1]下面的参数有点小问题,用粗体标识出来,因为我们装载的USB摄像头最大分辨率为640x480,因此这里的camera-width与camera-height都必须修改为摄像头所支持的分辨率,此外就是最下面的camera-v4l2-dev-node的部分,前面检查出来这台Jetson Nano 2GB上的USB摄像头编号为“1”,请按照实际状况修改。
将上面三地方修改完后,就可以直接执行以下指令去启动摄像头:
deepstream-app -c source2_csi_usb_dec_infer_resnet_int8.txt |
由于配置文件里面原本设定使用INT8的精度去做推理,但是Jetson Nano 2GB并不支持,因此DeepStream自动切换成FP16精度,这需要重新生成对应的TensorRT引擎,会花点时间。
执行之后就能看的画面上出现类似以下的画面,上下分别是CSI摄像头与USB摄像头的显示,由于选择的模型是检测“Car”与“Person”的,所以在这里没有检测到任何目标物件。
另外看一下先前下指令的终端上,显示在Jetson Nano 2GB上的执行性能如下截屏
两个摄像头都能达到18FPS左右性能,总性能在36FPS左右,已经非常接近实时识别的速度,非常好。您可以试试旋转摄像头或者将手放在前面晃一晃,看看延迟状况如何?应该是很流畅的。
接下来,再添加两个视频文件一起进来执行检测,我们以系统上提供的视频文件做示范:
将这两个的设定添加到文件里的[source2]与[source3],内容如下:
[source2] enable=1 type=2 uri=file://../../streams/sample_1080p_h264.mp4
[source3] enable=1 type=2 uri=file:///usr/share/visionworks/sources/data/pedestrians.h264 |
最后调整文件最开始的“[tiled-display]”下面,将“columns=”的值改成“2”,存档后重新执行下面指令:
deepstream-app -c source2_csi_usb_dec_infer_resnet_int8.txt |
现在可以看到如下图,两个摄像头与两个视频总共4个输入源同时执行的推理的功能。
接下来看看此时的性能如何?(如下图)居然每个输入源只剩下8FPS的性能,总性能在32FPS左右,似乎有点慢了。这个问题有补救的办法吗?
实时上问题出现在[primary-gie]使用的模型上,因为Jetson Nano(含2GB)的计算资源较为缺乏,因此DeepStream专门为Nano提供resnet10.caffemodel_b8_gpu0_fp16.engine特调版加速引擎,存放在“../../models/Primary_Detector_Nano”路径下,这是第一个需要做修改的地方:
其次就是下面的“config-file”置换成支持Nano版本的配置文件,如下:
修改完使用的模型之后,重新执行deepstream-app进行物件检测,发现每个数据源的识别性能,立即从原本的8FPS提升到14FPS,也就是总性能从32FPS上升到56FPS左右,提升大约1.8倍。到这里否已经满足样的性能呢?
如果还觉得不满足的时候,那就继续看下去,还有大招在后面。只要我们将[primary-gie]下面的“interval”参数设为“1”,这时候再执行看看性能如何?
下面的截屏是调整interval参数之后的性能,有没有吓一跳?瞬间提升一倍。
经过三步骤调整之后,我们在Jetson Nano 2GB上的4个数据源,识别性能都超过27FPS,总性能合计超过100FPS,并且维持识别效果。
现在是不是对Jetson Nano 2GB的性能感到非常满意了!【完】
好文章,需要你的鼓励
在迪拜Gitex 2025大会上,阿联酋成为全球AI领导者的雄心备受关注。微软正帮助该地区组织从AI实验阶段转向实际应用,通过三重方法提供AI助手、协同AI代理和AI战略顾问。微软已在阿联酋大举投资数据中心,去年培训了10万名政府员工,计划到2027年培训100万学习者。阿联酋任命了全球首位AI部长,各部门都配备了首席AI官。微软与政府机构和企业合作,在公民服务和金融流程等领域实现AI的实际应用,构建全面的AI生态系统。
Google DeepMind团队发布了EmbeddingGemma,这是一个仅有3.08亿参数的轻量级文本理解模型,却能达到7亿参数模型的性能水平。该模型在权威的多语言文本嵌入基准测试中排名第一,支持250多种语言,特别适合移动设备部署。研究团队通过创新的编码器-解码器初始化、三重损失函数训练和模型融合技术,实现了性能与效率的完美平衡,为AI技术普及化开辟了新路径。
苹果与俄亥俄州立大学研究人员发布名为FS-DFM的新模型,采用少步离散流匹配技术,仅需8轮快速优化即可生成完整长文本,效果媲美需要上千步骤的扩散模型。该模型通过三步训练法:处理不同优化预算、使用教师模型指导、调整迭代机制来实现突破。测试显示,参数量仅1.7亿至17亿的FS-DFM变体在困惑度和熵值指标上均优于70-80亿参数的大型扩散模型。
日本奈良先端科学技术大学等机构首次深入研究AI编程工具Claude Code在真实开源项目中的表现。通过分析567个代码贡献,发现83.8%被成功接受,54.9%无需修改直接使用。AI擅长重构、测试和文档工作,但需要人工修正bug处理、代码风格等问题。研究揭示了AI编程工具的实际能力边界和改进方向。