0、前言
工业视觉检测相关的项目应用很多,但是相关的资料较为零散,且多为C++部署的项目,Python相关的少之又少。故进行整理,此篇包含Python工业部署的诸多方面,如多线程下的多相机并行处理、相机的IO触发等。
所用相机为海康工业相机,镜头、光源等调试过程均略去,在此仅讨论程序方面。
1、设备枚举及排序
程序主体参考为海康MVS中附带的官方例程,安装MVS软件后,在.\MVS\Development\Samples\Python\路径中,可以找到相应的Python例程GrabImage.py,整体实现的功能包括取流,IO端口的读写等操作。
示例程序会读取与电脑连接的网口设备,并将设备的信息保存在deviceList中,然后会将设备的类型及IP地址打印出来。
为了便于算法指定相应的设备,根据设备的IP地址的末位进行排序,即使用sorted()函数,对nip4排序,重新生成设备列表。
相关程序如下
######对设备使用nip4 IP地址的最后一段进行重新排序
devices_with_nip4 = []
for i in range(0, deviceList.nDeviceNum):
mvcc_dev_info = cast(deviceList.pDeviceInfo[i], POINTER(MV_CC_DEVICE_INFO)).contents
if mvcc_dev_info.nTLayerType == MV_GIGE_DEVICE:
nip4 = (mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0x000000ff)
devices_with_nip4.append((mvcc_dev_info, nip4))
sorted_devices_with_nip4 = sorted(devices_with_nip4, key=lambda x: x[1])
# 重新生成 deviceList.pDeviceInfo
for i, (dev_info, nip4) in enumerate(sorted_devices_with_nip4):
deviceList.pDeviceInfo[i] = cast(pointer(dev_info), POINTER(MV_CC_DEVICE_INFO))
2、设备实例创建
进一步,根据重新生成的设