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 キャプチャを示してい
ます
。カード
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