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 の公式 Web サイトにアクセスして、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の二次開発

Haikang の自社開発キャプチャカードの二次開発には 2 つの開発方法があり、それぞれに独自の長所と短所があります。

3.1 産業用カメラSDKをベースに、GenTLを通じて二次開発を実施(GIGE取得カード推奨、CXPカードも使用可能)

CXP 開発:
利点:
1. 産業用カメラ SDK 開発は、産業用ネットワーク ポート カメラ コードに基づいたシンプルでペースの速い開発であり、変更量は非常に少ない (変更は 10 行を超えない) 2. 他のブランドの CXP 取得
カードMIL rapxio シリーズ、kaya、eursys などの取得カードも、BasicDemoByGenTL サンプル プログラムを参照して開発でき、コードの互換性も良好です。欠点: 取得カードの関連パラメータを一時的に設定できなくなり
ます。カメラをトリガーするために取得カードを使用するのは不便です (ソフト トリガー カメラ、連続ストリーミングにはこの欠点はありませんが、カードにはこの欠点がありません) 産業用カメラ ルーチン 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);
        }

上記 2 つのコードを比較してみると、カメラをオンにする前はインターフェイスにわずかな違いがありますが、opendevice 後はカメラの操作と画像取得はまったく同じであり、コードの開発量が少なくなります。

3.2 キャプチャカードSDKをベースとした二次開発

長所:キャプチャ カードのすべてのパラメータに完全にアクセスして制御でき、キャプチャ カードのすべての機能を使用できます
短所:
1. SDK インターフェイスを新たに理解した 0 から開発したため、開発量が少し多くなります
2.インターフェイスはHaikangキャプチャカードとのみ互換性があり、他のブランドのキャプチャカードは互換性がありません
ここに画像の説明を挿入

キャプチャ カード インターフェイス呼び出しのフレーム図、白い領域はキャプチャ カード関連のインターフェイス、水色の領域はカメラ関連のインターフェイス、薄赤色の領域はストリーム関連のインターフェイス、薄緑色の領域はキャッシュ関連のインターフェイス、緑色の領域はユーザー定義の操作です

サンプルプログラムのパス: C:\Program Files (x86)\MVS\Development\MVFG
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_23107577/article/details/120840490