Hikvision 로봇 이미지 수집 카드 설치 및 사용


이 기사의 적용 범위에는 Haikang CoaXPress: GX1004, Gige 캡처 카드: GE1004, Cameralink: GC1002가 포함되며 작동 방법은 약간의 차이를 제외하고 유사합니다.

1. 설치 환경 요구사항

1.1 마더보드 하드웨어 구성 요구 사항

여기에 이미지 설명 삽입
그림은 다음을 보여줍니다: cxp 캡처 카드 산업용 컴퓨터: 마더보드는 PCIE Gen2 x8 , 메모리 8GB 이상을
지원해야 합니다 . 운영 체제: windows7 /10 64비트 (linux와 같은 다른 운영 체제는 아직 지원되지 않음)

1.2 소프트웨어 설치

1.2.1 MVS 소프트웨어 설치

드라이버 다운로드 및 설치: Hikvision Robotics 공식 웹사이트로 이동하여 MVS를 다운로드하고 설치할 수 있습니다.
다른 버전의 mvs가 있는 경우 제거한 다음 다시 설치하는 것이 좋습니다.
MVFG 및 기타 소프트웨어를 설치한 경우 제거 권장, MVFG가 제거됨

기본 설치 후 설치가 성공한 후 장치 관리자를 열면 아래 그림과 같이 설치가 완료되었음을 나타내는 획득 카드 장치가 나타납니다. 그림은 CXP 캡처 카드를 보여줍니다. 그림은 CML 캡처를 보여
CXP6 캡처 카드
줍니다
여기에 이미지 설명 삽입
. 카드

2. 소프트웨어 사용

2.1 카메라 열거 및 스트림 가져오기

MVS 소프트웨어를 열고 클라이언트에서 [GenTL]을 마우스 오른쪽 버튼으로 클릭한 다음 "cti 파일 선택"을 클릭합니다.
여기에 이미지 설명 삽입

경로에서 해당 CTI 경로를 선택합니다. * C:\Program Files (x86)\Common Files\MVS\Runtime\Win64_x64*
여기에 이미지 설명 삽입
"MvFGProducerCML.cti" 파일을 선택한 후 MVS 클라이언트는 GenTL을 새로 고친 후 캡처 카드를 열거할 수 있습니다.

여기에 이미지 설명 삽입
캡쳐카드 목록 우측의 링크 버튼을 클릭하여 캡쳐카드를 열면 해당 캡쳐카드의 파라미터와 현재 캡쳐카드 아래에 있는 카메라가 나타납니다
여기에 이미지 설명 삽입
. 카메라를 열기 위해 연결할 카메라 목록
여기에 이미지 설명 삽입

3. 소프트웨어 SDK 2차 개발

하이강 자체 개발 캡처카드의 2차 개발 방식은 2가지 개발 방식이 있는데, 각각 장단점이 있습니다.

3.1 산업용 카메라 SDK 기반으로 GenTL을 통한 2차 개발 진행 (GIGE 획득 카드 권장, CXP 카드 사용 가능)

CXP 개발:
장점:
1. 산업용 카메라 SDK 개발이 간단하고 빠르게 진행되며 산업용 네트워크 포트 카메라 코드를 기반으로 변경 사항이 매우 적습니다(변경 사항이 10줄을 초과하지 않음) 2. 다른 브랜드의 CXP 획득
카드 MIL rapxio 시리즈와 같은 kaya 및 eursys 획득 카드는 BasicDemoByGenTL 샘플 프로그램을 참조하여 개발할 수도 있으며 코드 호환성이 좋습니다.단점: 일시적으로
획득 카드의 관련 매개 변수를 구성할 수 없습니다. 예를 들어, 획득 카드를 사용하여 카메라를 트리거하는 것이 불편함(소프트 트리거 카메라, 연속 스트리밍에는 이러한 단점이 없음, gige 카드에는 이러한 단점이 없음)
산업용 카메라 루틴 BasicDemoByGenTL 참조 ,
루틴 경로: " C:\Program Files (x86)\MVS\Development\Samples\VC\VS\BasicDemoByGenTL "
여기에 이미지 설명 삽입
여기에 이미지 설명 삽입
Gentl 열거 카드를 기반으로 카메라 코드를 열거합니다.

		MV_GENTL_IF_INFO_LIST m_stIFInfoList;
		memset(&m_stIFInfoList, 0, sizeof(MV_GENTL_IF_INFO_LIST));
		MV_GENTL_DEV_INFO_LIST m_stDeviceList;
		memset(&m_stDeviceList, 0, sizeof(MV_GENTL_DEV_INFO_LIST));
		// ch:基于GenTL枚举Interface | en:Enum Interface Based On GenTL
		nRet = MV_CC_EnumInterfacesByGenTL(&m_stIFInfoList, "C:/Program Files/KAYA Instruments/Common/bin/KYFGLibGenTL_vc141.cti");
		if (MV_OK != nRet)
		{
    
    
			printf("Enum InterfacesByGenTL fail! nRet [0x%x]\n", nRet);
		}
		if (m_stIFInfoList.nInterfaceNum == 0)
		{
    
    
			printf("nInterfaceNum 0\n");
		}
		for (unsigned int i = 0; i < m_stIFInfoList.nInterfaceNum; i++)//打印枚举到的采集卡
		{
    
    
			char strUserName[256];
			MV_GENTL_IF_INFO* pstIFInfo = m_stIFInfoList.pIFInfo[i];
			sprintf_s(strUserName, "Interface[%d]:%s %s (%s) (%d)", i, pstIFInfo->chTLType, pstIFInfo->chInterfaceID, pstIFInfo->chDisplayName, pstIFInfo->nCtiIndex);
			printf("strUserName:%s\n", strUserName);
		}
		// ch:枚举板卡
		nRet = MV_CC_EnumDevicesByGenTL(m_stIFInfoList.pIFInfo[0], &m_stDeviceList);
		if (MV_OK != nRet)
		{
    
    
			printf("Enum DevicesByGenTL fail! nRet [0x%x]\n", nRet);
		}
		if (m_stDeviceList.nDeviceNum == 0)
		{
    
    
			printf("nDeviceNum 0\n");
		}
		// ch:选择设备并创建句柄 | en:Select device and create handle
		int index = 0;
		nRet = MV_CC_CreateHandleByGenTL(&handle, m_stDeviceList.pDeviceInfo[index]);
		if (MV_OK != nRet)
		{
    
    
			printf("Create Handle fail! nRet [0x%x]\n", nRet);
		}
		// ch:打开设备 | en:Open device
		nRet = MV_CC_OpenDevice(handle);
		if (MV_OK != nRet)
		{
    
    
			printf("Open Device fail! nRet [0x%x]\n", nRet);
		}

산업용 카메라 SDK를 기반으로 카메라 열거

		// ch:枚举设备 | Enum device
        MV_CC_DEVICE_INFO_LIST stDeviceList;
        memset(&stDeviceList, 0, sizeof(MV_CC_DEVICE_INFO_LIST));
        nRet = MV_CC_EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE, &stDeviceList);
        if (MV_OK != nRet)
        {
    
    
            printf("Enum Devices fail! nRet [0x%x]\n", nRet);
        }
        if (stDeviceList.nDeviceNum > 0)
        {
    
    
            for (unsigned int i = 0; i < stDeviceList.nDeviceNum; i++)
            {
    
    
                printf("[device %d]:\n", i);
                MV_CC_DEVICE_INFO* pDeviceInfo = stDeviceList.pDeviceInfo[i];
                if (NULL == pDeviceInfo)
                {
    
    
                    break;
                } 
                PrintDeviceInfo(pDeviceInfo);            
            }  
        } 
        else
        {
    
    
            printf("Find No Devices!\n");
            break;
        }

        printf("Please Input camera index(0-%d):", stDeviceList.nDeviceNum-1);
        unsigned int nIndex = 0;
        scanf_s("%d", &nIndex);
        if (nIndex >= stDeviceList.nDeviceNum)
        {
    
    
            printf("Input error!\n");
        }
        // ch:选择设备并创建句柄 | Select device and create handle
        nRet = MV_CC_CreateHandle(&handle, stDeviceList.pDeviceInfo[nIndex]);
        if (MV_OK != nRet)
        {
    
    
            printf("Create Handle fail! nRet [0x%x]\n", nRet);
        }
        // ch:打开设备 | Open device
        nRet = MV_CC_OpenDevice(handle);
        if (MV_OK != nRet)
        {
    
    
            printf("Open Device fail! nRet [0x%x]\n", nRet);
        }

위의 두 코드를 비교할 수 있습니다.카메라를 켜기 전에는 인터페이스에 약간의 차이가 있습니다.opendevice 후에는 카메라 작동과 이미지 획득이 정확히 동일하며 코드 개발량이 적습니다.

3.2 캡쳐카드 SDK 기반 2차 개발

장점: 캡처 카드의 모든 매개변수에 완전히 액세스하고 제어할 수 있으며, 캡처 카드의 모든 기능을 사용할 수 있습니다.
단점:
1. 0에서 개발, sdk 인터페이스에 대한 새로운 이해, 개발 양이 약간 큽니다.
2. 인터페이스가 Haikang 캡처 카드와만 호환되며 다른 브랜드의 캡처 카드는 호환되지 않습니다.
여기에 이미지 설명 삽입

캡처 카드 인터페이스 호출의 프레임 다이어그램, 흰색 영역은 캡처 카드 관련 인터페이스, 하늘색 영역은 카메라 관련 인터페이스, 연두색 영역은 스트림 관련 인터페이스, 연녹색 영역은 캐시 관련 인터페이스, 녹색 영역은 사용자 정의 작업입니다.

샘플 프로그램 경로: C:\Program Files (x86)\MVS\Development\MVFG
여기에 이미지 설명 삽입

Guess you like

Origin blog.csdn.net/qq_23107577/article/details/120840490