3. Basler相机带宽需求计算

在 GigE 视觉系统中,带宽不是“够用就行”的模糊概念,而是一条可以被精确计算的硬约束。一台 Basler ace 或 dart 系列相机,只要分辨率、帧率和像素格式确定,它每秒产生的原始数据量就是一个确定值。把这个值与网卡、交换机、线缆和主机处理能力逐段比对,才能判断瓶颈究竟出现在哪里。本节从数据量的基本公式出发,逐步推导到实际可用的带宽预算方法。

一、原始数据量的基本计算

相机输出的原始数据量由三个参数直接决定:水平分辨率、垂直分辨率和像素位深。像素格式决定了每个像素占用的位数,例如 Mono 8 为 8 bit,Bayer BG 8 为 8 bit,Bayer BG 12 为 12 bit,RGB 8 为 24 bit。单帧数据量的计算式为:

单帧字节数 = 水平像素数 × 垂直像素数 × 每像素位数 ÷ 8
每秒数据量 = 单帧字节数 × 帧率

以一台 Basler acA1920-40gm 为例,其分辨率为 1920 × 1200,像素格式为 Mono 8,满帧率 40 fps。单帧数据量为 1920 × 1200 × 8 ÷ 8 = 2,304,000 字节,约 2.20 MiB;满帧率下每秒数据量为 2,304,000 × 40 = 92,160,000 字节/秒,约 87.9 MiB/s,换算成比特率约为 737 Mbps。这个数值已经接近千兆以太网的可用上限,说明该相机在 Mono 8 满帧下几乎吃满一条千兆链路。

如果换成 Bayer BG 12 格式,每像素 12 bit,单帧数据量变为 1920 × 1200 × 12 ÷ 8 = 3,456,000 字节,约 3.30 MiB;40 fps 下每秒约 131.8 MiB/s,比特率约 1,105 Mbps,已经超过千兆以太网的理论线速。这意味着在千兆链路上,该相机无法以 Bayer BG 12 格式跑满 40 fps,必须降帧率或改用更高带宽的接口。

二、像素格式对带宽的放大效应

像素格式是带宽计算中最容易被低估的变量。很多用户只关注分辨率和帧率,却忽略了从 Mono 8 切换到 RGB 8 时,数据量会直接变为三倍。下表列出同一台 1920 × 1200 相机在不同像素格式下的带宽需求,便于快速对照。

像素格式 每像素位数 单帧数据量 40 fps 带宽 千兆链路可行性
Mono 8 8 bit 2.20 MiB 约 737 Mbps 可行,余量很小
Bayer BG 8 8 bit 2.20 MiB 约 737 Mbps 可行,余量很小
Bayer BG 12 12 bit 3.30 MiB 约 1,105 Mbps 不可行,需降帧
RGB 8 24 bit 6.59 MiB 约 2,211 Mbps 不可行,需万兆或多链路

需要说明的是,GigE Vision 在传输原始图像时通常使用流通道(Stream Channel)发送原始像素数据,Bayer 格式不会在相机内部先做插值再传输,因此 Bayer BG 8 与 Mono 8 的带宽相同。RGB 8 则通常是相机内部完成去马赛克和色彩转换后输出的三通道数据,带宽显著增加。若应用允许,优先在主机端做色彩转换,可以大幅降低链路压力。

三、从理论带宽到可用带宽

千兆以太网的理论线速为 1000 Mbps,但实际可用带宽要扣除以太网帧头、IP 头、UDP 头和 GigE Vision 流协议开销。以常见的 1500 字节 MTU 为例,每个以太网帧的有效载荷约为 1440 字节左右,协议开销约占 6% 至 8%。因此千兆链路的实际图像数据吞吐通常按 900 至 940 Mbps 估算。若启用巨帧(Jumbo Frame,MTU 9000),有效载荷比例提高,可用带宽可接近 960 Mbps。

这意味着前面那台 Mono 8 满帧 737 Mbps 的相机,在千兆链路上虽然理论可行,但留给其他流量(如相机控制、心跳、ARP、其他设备)的余量只有约 160 至 200 Mbps。如果同一网卡上还接了第二台相机,或者主机同时在做其他网络通信,丢包和重传的概率会明显上升。工程上通常建议单条千兆链路承载的图像带宽不超过 800 Mbps,以保留足够的稳定裕量。

四、带宽瓶颈的定位方法

识别瓶颈不能只看相机参数,而要把整条链路拆成若干段逐一核算。下图给出了一条典型的单相机 GigE 链路,从相机传感器到主机应用,每一段都有各自的带宽上限和可能的瓶颈点。

单相机 GigE 链路带宽分段核算 Basler 相机 1920×1200 Mono 8 / 40 fps 输出 737 Mbps Cat6 线缆 千兆物理层 MTU 1500 上限 1000 Mbps 千兆交换机 背板带宽 端口缓存 需 ≥ 2 Gbps 全双工 主机网卡 接收缓冲区 中断合并 可用约 900 Mbps 主机应用 Pylon / 采集 CPU 处理 需 ≥ 800 Mbps 典型瓶颈点 ① 像素格式升级导致数据量翻倍 ② 多相机共享同一网卡 ③ 交换机端口缓存不足引发丢包 带宽预算公式 所需带宽 = 水平像素 × 垂直像素 × 位深 ÷ 8 × 帧率 × 协议开销系数(约 1.06~1.08)

图中每一段都有明确的上限:相机输出由参数决定,线缆和交换机受物理层限制,网卡受驱动和缓冲区影响,主机应用受 CPU 和内存带宽制约。实际排查时,先算出相机输出值,再逐段与上限比较,最先被逼近的那一段就是瓶颈。例如相机输出 737 Mbps,网卡可用约 900 Mbps,看似网卡有余量;但如果同一网卡上还有第二台 500 Mbps 的相机,合计 1237 Mbps,网卡和交换机端口就会成为瓶颈,表现为丢包、帧率下降或图像撕裂。

五、多相机场景的带宽叠加

多相机系统不能简单地把每台相机的带宽相加后与单端口带宽比较,还要考虑流量汇聚路径。假设四台相机各输出 200 Mbps,分别接入同一台千兆交换机的四个端口,每台相机到交换机的链路都只承载 200 Mbps,没有问题;但交换机上联到主机的端口需要承载 800 Mbps,加上协议开销后接近 850 Mbps,仍在千兆可用范围内,但余量已经不大。如果其中一台相机切换到 Bayer BG 12 格式,输出升至 300 Mbps,上联端口总流量变为 900 Mbps,加上开销后超过 950 Mbps,丢包风险显著增加。

因此多相机系统的带宽核算应遵循“逐链路、逐端口”的原则:每条相机到交换机的链路单独核算,交换机上联端口按所有相机流量之和核算,主机网卡按所有上联端口流量之和核算。任何一段超过其可用带宽的 80%,就应视为需要优化或升级。

六、降低带宽需求的常用手段

当核算发现带宽不足时,可以从以下几个方向调整,按对图像质量的影响从小到大排列:

  • 降低帧率:带宽与帧率成正比,从 40 fps 降到 30 fps,带宽直接降至 75%。适用于运动速度不高的检测场景。
  • 缩小 ROI:只传输感兴趣区域,水平或垂直方向裁切后,数据量按面积比例下降。例如只保留中间 1200 × 800 区域,数据量降至原来的 41.7%。
  • 改用低位深格式:从 Bayer BG 12 降到 Bayer BG 8,带宽降至 66.7%。需评估灰度层次是否满足检测要求。
  • 启用相机端压缩:部分 Basler 型号支持无损或有损压缩,可在不改变分辨率的前提下降低链路数据量,但会增加相机 CPU 负担和主机解压开销。
  • 升级链路:改用万兆网卡和万兆交换机,或使用多网卡分流,将不同相机分配到不同网卡。
在实际项目中,建议先按满帧率和目标像素格式计算理论带宽,再乘以 1.2 的安全系数,得到带宽预算值。用这个预算值去选网卡、交换机和线缆,而不是等系统跑起来出现丢包后再补救。对于 1920 × 1200 级别的相机,千兆链路在 Mono 8 下可以稳定运行,但一旦涉及彩色或高位深,就应优先考虑万兆或多链路方案。

带宽计算的最终目的不是得到一个数字,而是建立一条从相机参数到链路容量的完整判断链。只要掌握了“单帧数据量 = 像素数 × 位深 ÷ 8”和“所需带宽 = 单帧数据量 × 帧率 × 开销系数”这两个关系,再结合每一段链路的实际上限,就能在选型和调试阶段快速定位瓶颈,避免把时间花在反复试错上。