4. 图像采集环节的性能优化
在 MERLIC 的整条处理链中,图像采集是唯一直接受物理硬件约束的环节。相机接口带宽、曝光时间、触发时序、传输延迟,任何一项配置不当,都会让后续的匹配、测量、OCR 算子处于“等图”状态。本节围绕接口选型、参数调优、触发与帧率匹配、采集与处理并行化四条主线展开,目标是让采集环节不再成为整机节拍的瓶颈。
一、相机接口选择:先算带宽,再选接口
接口选择的核心依据是单帧数据量与目标帧率的乘积,即所需有效带宽。以一台 500 万像素(2448×2048)的 Mono8 相机为例,单帧原始数据约为 2448×2048×1 Byte ≈ 5.01 MB。若目标帧率为 30 fps,则所需带宽约为 5.01 MB × 30 ≈ 150 MB/s ≈ 1.2 Gbps。这个数字是判断接口是否够用的第一道门槛。
GigE Vision 采用千兆以太网,理论 1 Gbps,实际有效载荷约 110~115 MB/s,因此上述 500 万像素相机在 GigE 下通常只能稳定运行在 20 fps 左右;若改用 2.5G/5G/10G 以太网或链路聚合,带宽可成倍提升。USB3 Vision 理论 5 Gbps,实际有效载荷约 350~400 MB/s,可轻松承载 500 万像素 30 fps 甚至更高。Camera Link 的 Base 配置为 2.04 Gbps(约 255 MB/s),Medium 为 4.08 Gbps,Full 为 5.44 Gbps,其优势在于确定性延迟和低 CPU 占用,适合高速线阵或对时序抖动极敏感的场景。
选型时还需考虑线缆长度与电磁环境:GigE 可支持 100 m(Cat6),USB3 被动线缆通常不超过 3~5 m,Camera Link 一般不超过 10 m。若相机安装在运动机构附近、线缆需长距离走线,GigE 的布线灵活性明显占优;若相机与工控机同柜、追求最低抖动,Camera Link 更合适。
二、采集参数调优:曝光、增益与像素格式的取舍
曝光时间是采集环节最直接的节拍约束。若曝光时间为 10 ms,则单相机理论最高帧率不超过 100 fps;若曝光 30 ms,则上限约 33 fps。MERLIC 中可通过相机 GenICam 节点或采集接口设置 ExposureTime。调优顺序建议为:先固定增益为 0 dB,再逐步增加曝光时间直到图像亮度合适,最后若仍偏暗再小幅提升增益。增益会放大噪声,通常每增加 6 dB,信噪比下降约一半,因此应优先用光源和曝光解决亮度问题。
像素格式直接影响带宽与 CPU 负载。Mono8 每像素 1 Byte,BayerRG8 也是 1 Byte 但需主机端去马赛克,RGB8 为 3 Byte,是 Mono8 的三倍带宽。若 MERLIC 后续算子只做灰度匹配或测量,应优先使用 Mono8;若必须彩色,可考虑 YUV422 或 Bayer 格式在主机端转换,以降低传输压力。
此外,Packet Size(GigE)与 Stream Packet Size 影响丢包率。GigE 相机建议将 Packet Size 设为 8192 或更高,并启用 Jumbo Frame;若出现丢包,可适当降低 Packet Size 或启用相机的重传机制。USB3 相机则需关注 USB 控制器是否独占、是否与其他高带宽设备共享总线。
三、触发模式与帧率匹配
触发模式决定采集与运动、PLC 或光电传感器的同步关系。MERLIC 支持自由运行(Free Run)与外部触发(Hardware Trigger)。自由运行适合静态或慢速场景;外部触发适合传送带、转盘等需要位置对齐的场景。
触发模式与帧率匹配的关键是:触发频率不能超过相机在当前曝光、读出和传输条件下的最大可承受帧率。例如相机在 500 万像素、Mono8、曝光 8 ms 下最大帧率约为 45 fps,若 PLC 以 60 Hz 触发,则会出现触发丢失或图像延迟累积。此时应降低触发频率、缩短曝光、缩小 ROI 或降低分辨率。
ROI(Region of Interest)是提升帧率的有效手段。若只关心图像中央 1024×1024 区域,则数据量从 5.01 MB 降至约 1.05 MB,帧率可提升近 5 倍。MERLIC 中可在采集接口配置 ROI 偏移与尺寸,但需注意 ROI 改变后标定参数和算子坐标需同步更新。
四、采集与处理并行化策略
MERLIC 的采集与处理默认在同一线程中顺序执行,即“采集一帧→处理一帧→再采集”。当处理时间大于采集间隔时,帧率会被处理时间拖慢。并行化策略的核心是让采集线程与处理线程解耦,使用环形缓冲区(Ring Buffer)暂存图像。
典型配置为:采集线程以固定帧率将图像写入缓冲区,处理线程从缓冲区取图并执行 MERLIC 流程。缓冲区深度建议为 3~5 帧,过小会导致丢帧,过大则增加内存占用和延迟。若处理时间波动较大,可适当增加深度;若要求低延迟,则应减小深度并提升处理速度。
在 MERLIC 中,可通过“Acquisition”与“Processing”分离的配置方式实现并行。若使用 MERLIC 的 Recipe 与图像源接口,可将相机采集封装为独立线程,处理流程通过队列获取图像。实际工程中,建议先用 MERLIC 的采集时间统计与处理时间统计确认瓶颈位置,再决定是否启用并行化。
调优检查顺序建议:先确认接口带宽是否满足目标帧率,再检查曝光与增益是否合理,然后核对触发频率是否超过相机能力,最后评估处理时间是否成为瓶颈。每一步都用 MERLIC 的时间统计或相机端帧率计数器验证,避免凭感觉调整。
五、一个可参考的采集参数配置示例
以下示例针对 500 万像素 GigE 相机、传送带触发、MERLIC 灰度匹配场景,参数为合理假设,实际需根据现场调整:
相机:2448×2048 Mono8,GigE Vision
目标帧率:20 fps(传送带节拍 50 ms/件)
曝光时间:8 ms
增益:0 dB
Packet Size:8192,启用 Jumbo Frame
触发模式:Hardware Trigger,上升沿
ROI:全幅(若需提速可改为 2048×1536)
缓冲区深度:4 帧
处理线程:MERLIC Recipe 独立线程,从队列取图
在该配置下,单帧数据约 5.01 MB,20 fps 对应约 100 MB/s,低于 GigE 有效带宽上限,留有约 10% 余量。曝光 8 ms 远小于 50 ms 节拍,触发不会丢失。若实际运行中发现 MERLIC 处理时间达到 60 ms,则应将缓冲区深度增至 5~6 帧,或缩小 ROI、简化算子链,使处理时间回落到 50 ms 以内。
采集环节的优化不是一次性配置,而是随节拍、光照、工件变化持续调整的过程。把接口带宽、曝光增益、触发频率、并行缓冲四个变量放在同一张表里对照,才能快速定位瓶颈并给出可验证的调整方案。