TX2 摄像头CSI(一)

最近发现不少Jetson TX2用户都在考虑如何选择相机,尤其是关于CSI相机。Lady我在网上找到一篇不错的文章,来自于一位软件工程师,分享给大家

https://cloud.tencent.com/developer/article/1151984

在本文里,他将重点告诉大家:

为什么用CSI相机

如果您希望获得最佳性能(根据FPS,分辨率和CPU使用情况),或者需要对摄像机进行底层控制,并且您愿意支付一台摄像机,CSI摄像机应该是您的摄像机的主要选择这些功能的优质。

我个人使用CSI相机,因为我需要高分辨率的视频,同时保持可接受的帧率。 在TX2搭配 Leopard Imaging IMX377CS 摄像头,我轻松以〜20 fps的速度拖动4k视频, 真棒。 我也喜欢CSI相机上具备更换镜头的能力,通常使用小型C-Mount或M12镜头。 由于GoPro的流行,有很多C/CS-Mount镜头以及用于将数码单反相机镜头转换为C-Mount的镜头转接器.

另一方面,USB摄像头的价格非常便宜,通常通过V4L2协议即可使用,对于不需要高性能视频的应用来说,它是一个很好的选择。 你可以用$20买到720p视频罗技C270,正如加州州立理工大学在他们有据可查的文件中所做的’Jet’机器人套件,这足以让他们的机器人玩具车识别并收集物体、找到人脸、定位线条等。

一个在Nvidia开发人员论坛上发布了非常棒的文章用户Jazza指出USB和CSI相机之间的进一步比较:

USB相机:

· 优:很容易整合。

· 优:可以做很多的离线的图像工作(曝光控制,帧率等)。

· 优:提供输入/中断功能,可为您节省计算应用程序时间(例如,在新帧上中断)。

· 缺:由于USB总线使用CPU时间,如果使用100%CPU,这会影响您的应用程序。

· 缺:对于使用硬件视觉管线(硬件编码器等)不是最佳的。

· 优:可以长距离工作(最高可达USB标准)。

· 优:可以支持更大的图像传感器(1英寸或更高,以获得更好的图像质量和更少的噪音)。

CSI汇流排相机:

· 优:根据CPU和内存使用情况进行优化,以便将图像处理并存入内存。

· 优:可以充分利用硬件的视觉管线。

· 缺:支持较短距离(通常不超过10cm)。除非您使用序列化系统(GMSL,FPD Link,COAXPress,Ambarella),但这些系统目前尚不成熟并且需要定制。

· 缺:通常与手机相机模块的小型传感器一样,要不就得多花点钱去定制。通过TX1/2中的硬件去噪降低小传感器的额外噪音。

· 优:可执行底层访问与控制传感器/摄像头。

为什么CSI相机比USB摄像头更好?

USB的最大问题是带宽和处理需求。USB 3.0可以推送5Gbps,技术上足以接受60 fps/1080p或20fps/4K(3840p)未压缩的视频流(你自己看)。但是,这仅仅基于带宽,并没有揭示处理视频时额外处理和内存管理瓶颈的真相。 例如,See3CAM_CU130 USB 3.0相机应该可以达到60fps 1080p,但在TK1上真测结果,只能支持18 fps/1080p压缩格式,而未压缩的格式只有1fps。虽然在计算性能更强的机器上性能会更好,但这是问题的证据。

相反,Jetson TX1和TX2支持6个专用的MIPI CSI-2摄像机端口,每通道(lans)带宽可达2.5 Gb/s,双图像服务处理器(ISP)提供1.4 Gigapix/s处理能力,换句话说,它具有三个4k摄像机(或者六个30fps/1080p相机)带宽。当然,带宽并非全部,因为这些图像需要移动和处理,但通过使用硬件视觉管道,图像可以跳过加载到DRAM中,并通过独立于主CPU处理视频来减少CPU负载。根据我自己的经验,通过利用TX2上的这些硬件功能,我能够以接近20 fps速度运行4k视频。这就是为什么视频可以通过CSI摄像头如此高效地工作 - 专用于视频的独立硬件,就像GPU专门用于3D图形一样。

有哪些支持Jetson的CSI相机

在我的研究中,发现在关于CSI相机的资源很少。Jetson Wiki有一个全面的调查不同相机选项的页面,也许能让Jetson开发人员找到一些提示:

至于实际产品供应方面,有:

e-con Syetems,他们为Jetson设备提供CSI摄像头和USB摄像头。

Leopard Imaging,为Jetson提供订制的CSI相机。

这两家公司都是Nvidia的官方影像合作伙伴,并提供从相机提取数据所需的驱动程序和说明。

我个人使用Leopard Imaging的IMX377CS并发现它很给力,也提供不错的安装驱动程序说明。

可选择的摄像头

https://elinux.org/Jetson/Cameras

CSI 摄像头操作

底层控制需要用GStreamer框架访问,所以如果习惯用Opencv开启摄像头的话,需要自己编译Opencv的时候enable gstreamer模块。实际应用发现,opencv调用摄像头,各种设置(白平衡,曝光…)非常不好搞。

设置相关参数,最简单的办法,自己C语言调用GStreamer写吧。

具体怎么搞,英伟达提供了工具NVGSTCapture,官方的回答是,自己看代码吧。developer.nvidia.com/embedded/dlc/l4t-sources-24-2-1

还有两个命令行工具:gst-launch, gst-inspect,调试摄像头可用。

摄像头参数
https://developer.download.nvidia.com/embedded/L4T/r24_Release_v2.1/Docs/Accelerated_GStreamer_User_Guide_Release_24.2.1.pdf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值