海康机器人官方工业相机配套上位机软件MVS,用于海康全系列工业相机的设备发现、图像采集、参数调试、图像保存,是机器视觉项目调试标准工具。
  在这里插入图片描述

左侧设备树栏
GigE:千兆网口工业相机适配网卡列表,包含物理网卡、虚拟机虚拟网卡、无线网卡 WLAN;
USB:USB3.0/USB XHC 工业相机控制器通道;
Camera Link、GenTL:兼容第三方工业相机通用协议通道;
当前状态提示「无设备信息」:代表电脑未接入任何海康工业相机,未识别到采集设备。
主视觉展示区
  背景为海康全产品线硬件阵列,覆盖完整机器视觉硬件生态:

底层:微型小靶面工业相机、紧凑型面阵相机;
中层:大靶面高分辨率面阵相机(CS 系列主流机型,黑白 / 彩色、全局 / 卷帘快门全覆盖);
上层:视觉光源控制器(恒流调光电源,配套视觉打光系统);
右下角:PCIe 图像采集卡,适配 Camera Link、CoaXPress 等高速接口相机。
硬件产品
CS 系列面阵工业相机(核心产品)
像素覆盖:160万~1.5亿超高分辨率;
接口类型:GigE、USB3.0、CoaXPress;
快门类型:全局快门(高速运动物体无拖影)、卷帘快门(静态检测高性价比);
应用:尺寸测量、缺陷检测、外观分拣、3D 视觉、半导体检测。
光源控制器
  多通道数字调光电源,支持频闪、亮度分级调节,配合环形 / 条形 / 同轴光源完成工件打光。

PCIe高速采集卡
  针对超大靶面、超高帧率相机,提供独立带宽,解决千兆网带宽瓶颈。

虚拟相机
  MVS软件提供了虚拟相机的软件,这个方便软件的同时也同样方便我们调试sdk。
  在这里插入图片描述

添加一个usb相机和gige相机:
  在这里插入图片描述

提取SDK搭建Qt基础模板Demo
步骤一:确认带了开发sdk
  下载mvs软件的时候,是否包含了开发sdk需要确认(下载好像会有说明),或者安装好后看,安装好包含sdk如下:
  在这里插入图片描述

在这里插入图片描述

步骤二:新建Qt工程
  Qt5.15.2,msvc2019x64版本。
  在这里插入图片描述

在这里插入图片描述

步骤三:部署sdk
  在这里插入图片描述

在这里插入图片描述

模块引入sdk:

INCLUDEPATH += PWDDEPENDPATH+=PWD DEPENDPATH += PWDDEPENDPATH+=PWD

HEADERS +=
$$PWD/HikvisionICamManager.h

SOURCES +=
$$PWD/HikvisionICamManager.cpp

海康sdk

HIKI_SDK_DIR = PWD/mvsv4.3.2sdkv4.4.0.4developmentINCLUDEPATH+=PWD/mvs_v4.3.2_sdk_v4.4.0.4_development INCLUDEPATH += PWD/mvsv4.3.2sdkv4.4.0.4developmentINCLUDEPATH+=HIKI_SDK_DIR/Includes

LIBS += -L$$HIKI_SDK_DIR/Libraries/win64
LIBS += -lMvCameraControl
步骤四:Demo代码
  参考流程:
  在这里插入图片描述

实现搜索设备,展示对应信息:

void HikvisionICamManager::testEnv()
{
int ret = 0;
// 步骤一: 初始化sdk资源: 调用MV_CC_Initialize()初始化该SDK的运行环境,以便于提前申请和分配所必须的系统资源。
ret = MV_CC_Initialize();
if(ret != MV_OK)
{
LOG << “Failed to MV_CC_Initialize()”;
return;
}

// 步骤二: 枚举所有设备: (可选)调用 MV_CC_EnumDevices() 枚举子网内指定传输协议对应的所有设备。 可通过nTLayerType在结构 MV_CC_DEVICE_INFO() 中获取设备信息。
MV_CC_DEVICE_INFO_LIST deviceInfoList;
memset(&deviceInfoList, 0, sizeof(MV_CC_DEVICE_INFO_LIST));
//
ret = MV_CC_EnumDevices(MV_GIGE_DEVICE          // Gige设备
                        | MV_USB_DEVICE         // USB设备
                        | MV_VIR_GIGE_DEVICE    //
                        | MV_VIR_USB_DEVICE,    // 虚拟USB设备
                        &deviceInfoList);
if(ret != MV_OK)
{
    LOG << "Failed to MV_CC_EnumDevices()";
    return;
}
// 步骤三:打印所有摄像头信息
if(deviceInfoList.nDeviceNum > 0)
{
    for(int index = 0; index < deviceInfoList.nDeviceNum; index++)
    {
        MV_CC_DEVICE_INFO *pDeviceInfo = deviceInfoList.pDeviceInfo[index];
        if(!pDeviceInfo)
        {
            break;
        }
        switch(pDeviceInfo->nTLayerType)
        {
        case MV_GIGE_DEVICE:                                            // GigE设备
            LOG << index << "type is" << "MV_GIGE_DEVICE" << "GigE设备";
            {
                int ip1 = ((pDeviceInfo->SpecialInfo.stGigEInfo.nCurrentIp & 0xff000000) >> 24);
                int ip2 = ((pDeviceInfo->SpecialInfo.stGigEInfo.nCurrentIp & 0x00ff0000) >> 16);
                int ip3 = ((pDeviceInfo->SpecialInfo.stGigEInfo.nCurrentIp & 0x0000ff00) >> 8);
                int ip4 = ( pDeviceInfo->SpecialInfo.stGigEInfo.nCurrentIp & 0x000000ff);
                LOG << QString("%1.%2.%3.%4").arg(ip1).arg(ip2).arg(ip3).arg(ip4);
                LOG << QString("Name: %1").arg(QString((const char *)pDeviceInfo->SpecialInfo.stGigEInfo.chUserDefinedName));
            }
            break;
        case MV_1394_DEVICE:                                            // 1394-a/b 设备
            LOG << index << "type is" << "MV_1394_DEVICE" << "1394-a/b 设备";
            break;
        case MV_USB_DEVICE:                                             // USB设备
            LOG << index << "type is" << "MV_USB_DEVICE" << "USB设备";
            {
                LOG << QString("Name: %1").arg(QString((const char *)pDeviceInfo->SpecialInfo.stGigEInfo.chUserDefinedName));
                LOG << QString("Serial number: %1").arg(QString((const char *)pDeviceInfo->SpecialInfo.stUsb3VInfo.chSerialNumber));
                LOG << QString("Device number: %1").arg(QString((const char *)pDeviceInfo->SpecialInfo.stUsb3VInfo.nDeviceNumber));
            }
            break;
        case MV_CAMERALINK_DEVICE:                                      // CameraLink设备
            LOG << index << "type is" << "MV_CAMERALINK_DEVICE" << "CameraLink设备";
            break;
        case MV_VIR_GIGE_DEVICE:                                        // 虚拟Gige设备
            LOG << index << "type is" << "MV_VIR_GIGE_DEVICE" << "虚拟Gige设备";
            break;
        case MV_VIR_USB_DEVICE:                                         // 虚拟USB设备
            LOG << index << "type is" << "MV_VIR_USB_DEVICE" << "虚拟USB设备";
            break;
        case MV_GENTL_GIGE_DEVICE:                                      // 自研网卡下GigE设备
            LOG << index << "type is" << "MV_GENTL_GIGE_DEVICE" << "自研网卡下GigE设备";
            break;
        case MV_GENTL_CAMERALINK_DEVICE:                                // CameraLink相机设备
            LOG << index << "type is" << "MV_GENTL_CAMERALINK_DEVICE" << "CameraLink相机设备";
            break;
        case MV_GENTL_CXP_DEVICE:                                       // CoaXPress设备
            LOG << index << "type is" << "MV_GENTL_CXP_DEVICE" << "CoaXPress设备";
            break;
        case MV_GENTL_XOF_DEVICE:                                       // XoF设备
            LOG << index << "type is" << "MV_GENTL_XOF_DEVICE" << "XoF设备";
            break;
        default:                                                        // 未知设备类型,保留意义
            LOG << index << "type is" << "MV_UNKNOW_DEVICE" << "未知设备类型,保留意义";
            break;
        }
    }
}
// 步骤四: 释放SDK资源: 调用 MV_CC_Finalize()释放SDK资源。
MV_CC_Finalize();
LOG;

}
步骤五:运行结果
  在这里插入图片描述

模块化
hikvisionICamManager,.pri
INCLUDEPATH += PWDDEPENDPATH+=PWD DEPENDPATH += PWDDEPENDPATH+=PWD

HEADERS +=
$$PWD/HikvisionICamManager.h

SOURCES +=
$$PWD/HikvisionICamManager.cpp

海康sdk

HIKI_SDK_DIR = PWD/mvsv4.3.2sdkv4.4.0.4developmentINCLUDEPATH+=PWD/mvs_v4.3.2_sdk_v4.4.0.4_development INCLUDEPATH += PWD/mvsv4.3.2sdkv4.4.0.4developmentINCLUDEPATH+=HIKI_SDK_DIR/Includes

LIBS += -L$$HIKI_SDK_DIR/Libraries/win64
LIBS += -lMvCameraControl

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐