0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在NVIDIA Jetson平台创建多摄像头管道

星星科技指导员 来源:NVIDIA 作者:Tomasz Lewicki 2022-04-28 09:15 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

多摄像头应用越来越流行;它们对于实现自主机器人、智能视频分析( IVA )和 AR / VR 应用至关重要。无论具体的用例如何,都必须始终执行一些常见任务:

俘虏

预处理

编码

陈列

在许多情况下,您还希望在摄像头流上部署 DNN ,并在检测上运行自定义逻辑。图 1 显示了应用程序的一般流程。

pipeline-flow.png

图 1 本项目实施的管道流程

在本文中,我将展示如何在 NVIDIA Jetson 平台上高效地实现这些常见任务。具体来说,我介绍了 jetmulticam ,一个易于使用的 Python 软件包,用于创建多摄像头管道。我在一个带有环绕摄像头系统的机器人上演示了一个特定的用例。

多摄像头硬件

选择相机时要考虑的参数有很多:分辨率、帧速率、光学、全局/滚动快门、界面、像素大小等。

在这个特定的多摄像头设置中,可以使用以下硬件:

NVIDIA Jetson Xavier NX 单元

Leopard Imaging 提供的支持 GMSL2 的 carrier board

Leopard Imaging 的 3 × IMX185 GMSL2 cameras

IMX185 摄像头的视野约为 90 °。如图 2 所示,以 270 °的总视场相互垂直安装。

cameras-mounted-maximize-horizontal-fov.png

图 2 安装摄像头是为了最大限度地提高水平视野

摄像头使用 GMSL 接口,该接口在距离 Jetson 模块几米远的位置提供了很大的灵活性。在这种情况下,可以将摄像头升高约 0.5 米,以获得更大的垂直视野。

gmsl-interface.png

图 3 GMSL 接口可以灵活地将摄像头定位在远离 Jetson 模块的位置

开始使用 Jetmulticam

首先,在 Jetson 板上下载并安装 NVIDIA Jetpack SDK 。然后,安装jetmulticam软件包:

$ git clone https://github.com/NVIDIA-AI-IOT/jetson-multicamera-pipelines.git $ cd jetson-multicamera-pipelines
$ bash scripts/install_dependencies.sh
$ pip3 install Cython
$ pip3 install .

基本多摄像机流水线

安装完成后,可以使用CameraPipeline类创建基本管道。通过 initializer 参数传递要包含在管道中的摄影机列表。在下面的示例中,元素[0, 1, 2]对应于设备节点/dev/video0/dev/video1/dev/video2

from jetmulticam import CameraPipeline
p = CameraPipeline([0, 1, 2])

就这样,管道已经初始化并启动。现在,您可以从管道中的每个摄像头读取图像,并以numpy阵列的形式访问它们。

img0 = p.read(0) # img0 is a np.array
img1 = p.read(1)
img2 = p.read(2)

通常,在一个循环中读取相机是很方便的,如下面的代码示例所示。管道从主线程异步运行,read始终获取最新的缓冲区。

while True:
 img0 = p.read(0)
 print(img0.shape) # >> (1920, 1080, 3)
 time.sleep(1/10)

更复杂的人工智能管道

现在,您可以构建更复杂的管道。这一次,使用CameraPipelineDNN类组成更复杂的管道,以及NGC目录PeopleNetDashCamNet中的两个预训练模型。

import time
from jetmulticam import CameraPipelineDNN
from jetmulticam.models import PeopleNet, DashCamNet

if __name__ == "__main__":

 pipeline = CameraPipelineDNN(
 cameras=[2, 5, 8],
 models=[
 PeopleNet.DLA1,
 DashCamNet.DLA0,
 # PeopleNet.GPU
 ],
 save_video=True,
 save_video_folder="/home/nx/logs/videos",
 display=True,
 )

 while pipeline.running():
 arr = pipeline.images[0] # np.array with shape (1080, 1920, 3)
 dets = pipeline.detections[0] # Detections from the DNNs
 time.sleep(1/30)

下面是管道初始化的分解:

  • 摄像机
  • 模型
  • 硬件加速
  • 保存视频
  • 显示视频
  • 主回路

摄像机

首先,与前面的示例类似,cameras参数是传感器列表。在这种情况下,使用与设备节点关联的摄像头:

  • /dev/video2
  • /dev/video5
  • /dev/video8
cameras=[2, 5, 8]

模型

第二个参数 models 使您能够定义要在管道中运行的预训练模型。

 models=[
 PeopleNet.DLA1,
 DashCamNet.DLA0,
 # PeopleNet.GPU
 ],

在这里,您将从NGC部署两个经过预训练的模型:

  • PeopleNet:一种能够识别人、脸和包的物体检测模型。
  • DashCamNet:能够识别四类对象的模型:汽车、人、路标和自行车。

有关更多信息,请参阅 NGC 中的model cards

硬件加速

模型使用NVIDIA 深度学习加速器( DLA )实时运行。具体来说,可以在 DLA0 ( DLA Core 0 )上部署 PeopleNet ,在 DLA1 上部署 DashCamNet 。

在两个加速器之间分配模型有助于提高管道的总吞吐量。此外, DLA 甚至比 GPU 更节能。因此,在最高时钟设置的满载情况下,系统消耗的电量仅为~ 10W 。最后,在这种配置中, Jetson GPU 仍然可以使用 Jetson NX 上的 384 CUDA 内核自由加速更多任务。

下面的代码示例显示了当前支持的模型/加速器组合的列表。

pipeline = CameraPipelineDNN(
 # ...
 models=[
 models.PeopleNet.DLA0,
 models.PeopleNet.DLA1,
 models.PeopleNet.GPU,
 models.DashCamNet.DLA0,
 models.DashCamNet.DLA1,
 models.DashCamNet.GPU
 ]
 # ...
)

保存视频

接下来的两个参数指定是否存储编码的视频,并定义用于存储的文件夹。

save_video=True,
save_video_folder="/home/nx/logs/videos",

显示视频

作为最后的初始化步骤,将管道配置为在屏幕上显示视频输出,以便进行调试。

display=True

主回路

最后,定义主循环。在运行期间,图像在pipeline.images下可用,检测结果在pipeline.detections下可用。

while pipeline.running():
 arr = pipeline.images[0] # np.array with shape (1080, 1920, 3)
 dets = pipeline.detections[0] # Detections from the DNNs
 time.sleep(1/30)

下面的代码示例显示了结果检测。对于每次检测,您都会得到一个包含以下内容的字典:

  • 对象类
  • 以像素坐标定义为[左、宽、顶、高]的对象位置
  • 检测置信度
>>> pipeline.detections[0]
[
 # ...
 {
 "class": "person",
 "position": [1092.72 93.68 248.01 106.38], # L-W-T-H
 "confidence": 0.91
 },
 #...
]

用自定义逻辑扩展人工智能管道

作为最后一步,您可以使用 DNN 输出扩展主循环以构建自定义逻辑。具体来说,您可以使用摄像头的检测输出在机器人中实现基本的人员跟随逻辑。源代码可在 NVIDIA-AI-IOT/jetson-multicamera-pipelines GitHub repo 中找到。

要找到要跟踪的人,请解析管道。检测输出。此逻辑在 find_closest_human 函数中实现。

根据 dets2steer 中边界框的位置计算机器人的转向角。

如果人在左图中,最大限度地左转。

如果人在正确的形象中,尽量向右转。

如果人在中心图像中,则按边界框中心的 X 坐标成比例旋转。

生成的视频将保存到/home/nx/logs/videos,正如您在初始化过程中定义的那样。

解决方案概述

下面简要介绍一下在下面的示例中配置jetmulticam works. The package dynamically creates and launches a GStreamer pipeline with the number of cameras that your application requires. Figure 4 shows how the underlying GStreamer管道时的外观。如您所见,系统中所有关键操作(由绿色方框表示)都受益于硬件加速。

图 4 系统的内部组件 jetmulticam package

首先,使用多个摄像头nvarguscamerasrc在视频图上捕获。使用nvvidconv或nvvideoconvert重新缩放每个缓冲区并将其转换为 RGBA 格式。接下来,使用服务器提供的component对帧进行批处理 DeepStream SDK 。默认情况下,批次大小等于系统中的摄像头数量。

要部署 DNN 模型,请利用 nvinfer 元素。在演示中,我在 Jetson Xavier NX 上提供的两种不同加速器 DLA core 1 和 DLA core 2 上部署了两种型号, PeopleNet 和 DashCamNet 。然而,如果需要的话,可以将更多的模型堆叠在彼此之上。

生成的边界框被nvosd元素覆盖后,使用nvoverlaysink将其显示在 HDMI 显示屏上,并使用硬件加速的 H264 编码器对视频流进行编码。保存到。 mkv 文件。

Python 代码中可用的图像(例如pipeline.images[0])通过回调函数或 probe 解析为numpy数组,并在每个视频转换器元素上注册。类似地,在最后一个nvinfer元素的 sinkpad 上注册了另一个回调函数,该元素将元数据解析为用户友好的检测列表。有关源代码或单个组件配置的更多信息,请参阅 create_pipeline 函数。

结论

NVIDIA Jetson 平台上的硬件加速与 NVIDIA SDKS 结合,可以实现卓越的实时性能。例如,下面的示例在三个摄像头流上实时运行两个对象检测神经网络,同时保持 CPU 利用率 低于 20% 。

本文展示的Jetmulticam包使您能够用 Python 构建自己的硬件加速管道,并在检测之上包含自定义逻辑。

关于作者

Tomasz Lewicki 是 NVIDIA 的嵌入式工程实习生。他拥有圣何塞州立大学计算机工程硕士学位,华沙工业大学华沙工业大学机器人工程学学士学位。他的兴趣集中在计算机视觉和机器人应用的深度学习上。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    5496

    浏览量

    109110
  • 摄像头
    +关注

    关注

    61

    文章

    5059

    浏览量

    102461
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    自动驾驶既然有双目摄像头了,为什么还要三目摄像头

    [首发于智驾最前沿微信公众号]在自动驾驶领域,纯视觉方案一直受到不少人的认可。双目摄像头由于模拟了人眼的工作方式,能够通过视差计算还原三维信息,在距离判断和空间感知上具有天然优势,因此被广泛应用于纯
    的头像 发表于 12-09 08:59 419次阅读
    自动驾驶既然有双目<b class='flag-5'>摄像头</b>了,为什么还要三目<b class='flag-5'>摄像头</b>?

    实战指南:用摄像头模块实现场景智能拍摄全流程!

    想通过摄像头模块实现场景智能拍摄?本指南为你提供全流程实战指引。从前期准备、模块集成,到场景拍摄测试与优化,每一步都结合实际操作细节展开,让你清晰掌握摄像头模块在不同场景(如安防监
    的头像 发表于 11-21 17:59 73次阅读
    实战指南:用<b class='flag-5'>摄像头</b>模块实现<b class='flag-5'>多</b>场景智能拍摄全流程!

    场景智能拍摄实战:摄像头模块集成与调试指南!

    摄像头模块集成是实现场景智能拍摄的基础,而调试则是保障系统稳定的关键。本指南聚焦实战,详细讲解摄像头模块的硬件集成方法与场景调试技巧,包括常见故障排查、性能优化方案等,让你在实战中
    的头像 发表于 11-21 17:58 88次阅读
    <b class='flag-5'>多</b>场景智能拍摄实战:<b class='flag-5'>摄像头</b>模块集成与调试指南!

    何在NVIDIA Jetson AGX Thor上通过Docker高效部署vLLM推理服务

    继系统安装与环境配置后,本期我们将继续带大家深入 NVIDIA Jetson AGX Thor 的开发教程之旅,了解如何在 Jetson AGX Thor 上,通过 Docker 高效
    的头像 发表于 11-13 14:08 3104次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>NVIDIA</b> <b class='flag-5'>Jetson</b> AGX Thor上通过Docker高效部署vLLM推理服务

    创世SD NAND贴片卡:智能摄像头存储难题的完美解决方案 #人工智能 #智能摄像头 #摄像头

    摄像头
    深圳市雷龙发展有限公司
    发布于 :2025年08月05日 11:17:13

    红外摄像头模组是什么?科技时代的眼睛

    在现代科技迅速发展的背景下,红外摄像头模组逐渐成为各类智能设备中的重要组成部分。无论是在安防监控、智能家居还是汽车领域,红外摄像头模组以其独特的功能和优越的性能,正在改变我们的生活方式。本文将
    的头像 发表于 07-31 10:07 699次阅读
    红外<b class='flag-5'>摄像头</b>模组是什么?科技时代的眼睛

    360环视技术推荐的硬件平台:支持摄像头与三屏异显的理想选择

    在智能车载系统中,还是机器人视觉平台中,RK3576都能提供坚实的技术支撑。 米尔RK3576核心板资源框图 它在360环视方案中的关键优势包括:✅ 支持摄像头接入l 板载8路摄像头
    发表于 07-30 17:32

    Made with KiCad(126):Antmicro OV5640 双摄像头子板

    统一的 50 引脚 FFC 接口 用于驱动图像传感器的板载时钟发生器 OV5640 双摄像头电路板与 Antmicro 开发的各种处理平台电气兼容。下面列出了其中几种: 支持 NVIDIA
    发表于 05-12 18:13

    一拖四USB摄像头同步采集方案:高效数据处理的革新突破

    在现代摄像头应用场景中,高效的数据采集与实时处理是技术核心。基于USB接口的一拖四摄像头系统,通过集成化设计实现四路摄像头同步采集,结合
    的头像 发表于 04-25 15:20 968次阅读
    一拖四USB<b class='flag-5'>多</b><b class='flag-5'>摄像头</b>同步采集方案:高效数据处理的革新突破

    社区安装IPC摄像头,跟安装一般安防监控摄像头有什么区别?

    为了保护社区或其他公共场所的安全,往往需要安装监控摄像头。但随着越来越多的公共安全事件发生,传统只单纯拍摄和记录画面的监控摄像头已不能满足社区安防的需求,需要更多功能的安防监控摄像头来进行更智能化
    的头像 发表于 04-03 10:00 1633次阅读
    社区安装IPC<b class='flag-5'>摄像头</b>,跟安装一般安防监控<b class='flag-5'>摄像头</b>有什么区别?

    使用RTSP摄像头执行摄像头多目标Python演示,缺少输出帧是怎么回事?

    使用 RTSP 摄像头执行 摄像头多目标 Python 演示 。 现场视频每 5 秒出现一次启动和抖动,但帧缺失。 输出生产低 FPS (1 至 0.3 FPS)。 人员检测发生在各种位置,因为实时视频缺少帧。
    发表于 03-06 07:55

    如何使用摄像头作为OpenVINO™推理的输入?

    无法确定如何使用摄像头作为OpenVINO™推理的输入
    发表于 03-06 07:30

    米尔瑞芯微RK3576实测轻松搞定三屏八摄像头

    RK3576参数强劲RK3576是瑞芯微推出的一款高性能AIoT处理器,这款芯片以其卓越的计算能力、屏幕支持、强大的视频编解码能力和高效的协处理器而闻名。 三屏8摄像头轻松搞定米尔基于他们
    发表于 01-17 11:33

    安防监控摄像头气密性测试案例-连拓精密#摄像头气密检测设备

    摄像头
    连拓精密科技
    发布于 :2024年12月11日 15:00:21

    光谱火焰检测摄像头

    随着工业化进程的加快,火灾安全问题日益受到重视。传统的火焰检测技术主要依赖于温度传感器和烟雾探测器,但这些方法在某些情况下存在响应慢、误报率高等缺陷。为了解决这些问题,光谱火焰检测摄像头应运而生
    的头像 发表于 12-11 10:50 1097次阅读
    <b class='flag-5'>多</b>光谱火焰检测<b class='flag-5'>摄像头</b>