工业相机“心跳”监测脚本(Python版)
支持海康 / Basler / 堡盟
产线上的相机突然“沉默”?是断线了?过热了?还是图像异常?
别等停机才发现!用这个 轻量 Python 脚本,给每台相机加个“心跳检测”。
✅ 监测什么?
📜 通用脚本框架(基于 GenICam)
三大品牌都支持 GenICam 标准,用 harvesters + 各自 GenTL 文件即可统一接入:
from harvesters.core import Harvesterimport numpy as npimport time# 初始化(需提前安装对应 GenTL producer)h = Harvester()h.add_file("C:/Program Files/Basler/pylon5/.../ProducerU3V.cti") # Basler# h.add_file("/opt/mv/.../MVGigEVisionTL.cti") # 海康# h.add_file("/usr/lib/baumer-gapi/.../bgapi.cti") # 堡盟h.update()cam = h.create_image_acquirer(0)cam.start_image_acquisition()while True: try: with cam.fetch_buffer(timeout=2000) as buffer: img = buffer.payload.components[0].data.reshape( buffer.payload.height, buffer.payload.width ) mean = np.mean(img) if mean < 5 or mean > 250: print(f"⚠️ 异常图像!均值={mean:.1f}") else: print(f"✅ 正常 | 均值={mean:.1f}") except Exception as e: print("❌ 相机无响应或超时!", e) time.sleep(2)
🔧 GenTL 文件路径参考:
- • Basler:
pylon 安装目录下的 ProducerU3V.cti(USB3)或 ProducerGEV.cti(GigE) - • 海康:MVS 安装目录中的
MVGigEVisionTL.cti 或 MVUSB3VisionTL.cti - • 堡盟:Baumer GAPI 安装后的
bgapi.cti
🛠️ 快速验证(无需 harvesters)
如果只想快速测试单品牌,也可用官方 SDK:
▶ Basler(pypylon)
from pypylon import pyloncam = pylon.InstantCamera(pylon.TlFactory.GetInstance().CreateFirstDevice())cam.Open()grab = cam.RetrieveResult(1000)
▶ 海康(mvsdk)
from mvsdk import *hCam = CameraInit(0)CameraPlay(hCam)pFrameInfo, pbyBuffer, nFrameLen = CameraGetImageBuffer(hCam, 1000)
▶ 堡盟(genicam)
from genicam.gentl import Producer# 通过 Baumer 提供的 GenTL 接入,逻辑同 harvesters
📌 部署建议
- • 脚本后台运行(Linux 用
systemd,Windows 用任务计划)
✅ 总结:一个脚本,三种品牌,早发现异常,少一次停机!