| カテゴリ | |
| 対象製品 |
※本資料は SDK-AcapLib2 Ver.9.10.0 の内容に基づいて記述しています。
このFAQでわかること
目次
TapGeometry とは、カメラが画像を出力するときの画素の並び方(分割方式)です。
1X_1Y
画像を分割せず、1行目から最終行まで順番に出力します。
1X_2YE
画像を上下2つの領域に分割し、上端と下端から中央へ向かって交互に出力します。
カメラの出力順 : 1行目 → 最終行 → 2行目 → (最終-1)行 → 3行目 → ...
受信したデータをそのままバッファに並べると、画像が上下入り混じった状態になります。正しい画像にするには並び替えが必要です。
1X_2YE は、伝送に使用する Stream 数によって次の2種類に分かれます。
| 1X_2YE_SingleStream | 上下2領域を 1つの Stream で伝送する |
|---|---|
| 1X_2YE_MultiStream | 上下2領域を 2つの Stream に分けて伝送する |
どちらになるかはカメラの仕様で決まります。AcapLib2 側にも、それぞれに対応した設定が必要です。
AcapLib2 の設定値を決める前に、カメラが実際にどの構成で出力しているかを GenICam Feature で確認してください。
| Feature 名 | 確認する内容 |
|---|---|
DeviceTapGeometry |
現在の TapGeometry。「Geometry_1X_2YE」等であれば 1X_2YE です。 |
DeviceStreamChannelCount |
カメラが使用する Stream 数。1 なら SingleStream、2 なら MultiStream。 |
Image1StreamID |
Stream1 の ID。ACL_CXP_STREAM1_ID に設定します。 |
Image2StreamID |
Stream2 の ID。ACL_CXP_STREAM2_ID に設定します。 |
Feature の読み出しは、AIPTool の GenICam Feature 表示、または Sample\CameraSetting\GenICam_FeatureAccess で行えます。
ご注意:カメラ側の Feature 実装はメーカー・機種によって異なります
カメラメーカーの仕様書で TapGeometry と Stream 構成を確認してください。
| 設定ID | 設定値・意味 |
|---|---|
ACL_CXP_TAPGEOMETRY(0x1118) |
1 : 1X_1Y 20 : 1X_2YE_SingleStream 21 : 1X_2YE_MultiStream 20 / 21 を設定した場合の並び替えはボードによって異なります。 APX-36124系:20 / 21 を設定した場合、並び替えられた画像が入力されます。 APX-36C1系:20 / 21 を設定しても、並び替えは行われません。 詳しくは「4. お使いのボードの系統を確認してください」を参照してください。 |
ACL_CXP_STREAM1_ID(0x1119) |
Stream1 の ID 1X_2YE_MultiStream の場合のみ設定します。 |
ACL_CXP_STREAM2_ID(0x111A) |
Stream2 の ID 1X_2YE_MultiStream の場合のみ設定します。 |
ACL_VERTICAL_REMAP(0x1042) |
0 : 無効 1 : VerticalRemap 有効 DMA 転送時に上下交互の並びを復元します。 AcapOpen 時、カメラの DeviceTapGeometry の値に「1X」と「2YE」の両方が含まれていれば、自動的に 1 になります。1X_2YE カメラを使用する場合の設定値はボードによって異なります。「4.」を参照してください。 |
重要:AcapSetInfo の第4引数 nMemNum の意味
| 0 以上 | その場で設定を反映します(内部で初期化処理が実行されます) |
|---|---|
| 負数 | 反映せず、内部パラメータに保持するだけです |
1X_2YE 関連の設定は、必ず nMemNum に -1 を指定して保持し、すべて設定し終えてから AcapReflectParam でまとめて反映してください。設定が途中まで反映された中間状態をボードに入れないためです。
1X_2YE の設定値は、ボードによって異なります。お使いのボードの設定値を確認し、詳しい手順は該当する章を参照してください。
| ボード | SingleStream | MultiStream |
|---|---|---|
| APX-36124A APX-36124G4 APX-36124-DF → 5. 設定手順 |
ACL_CXP_TAPGEOMETRY = 20ACL_VERTICAL_REMAP = 0Stream ID の設定は不要 |
ACL_CXP_TAPGEOMETRY = 21ACL_VERTICAL_REMAP = 0ACL_CXP_STREAM1_ID = ※ACL_CXP_STREAM2_ID = ※ |
| APX-36C1 (V1R3以降) APX-36C1-DF → 6. 設定手順 |
ACL_CXP_TAPGEOMETRY = 1ACL_VERTICAL_REMAP = 1Stream ID の設定は不要 |
ACL_CXP_TAPGEOMETRY = 21ACL_VERTICAL_REMAP = 1ACL_CXP_STREAM1_ID = ※ACL_CXP_STREAM2_ID = ※ |
※ カメラの Image1StreamID / Image2StreamID の値を設定します。値はカメラによって異なります(「2.」参照)。
APX-36C1(V1R0〜V1R2)をお使いの場合
このバージョンのボードでは 1X_2YE の設定自体がエラーとなり、使用できません。V1R3 以降にアップデートしてください。アップデート方法はこちらを参照してください。ボードのバージョンがご不明な場合はAIPToolのボード情報表示にてご確認いただけます。
36124系のボードでは、SingleStream / MultiStream とも ACL_CXP_TAPGEOMETRY で並び替えるため、ACL_VERTICAL_REMAP は 0(無効)にします。
AcapOpen(...); AcapSelectFile(hDev, nCh, iniFilePath, 0); // ここから nMemNum = -1 で保持のみ行う AcapSetInfo(hDev, nCh, ACL_CXP_TAPGEOMETRY, -1, 21); // 1X_2YE_MultiStream AcapSetInfo(hDev, nCh, ACL_CXP_STREAM1_ID, -1, 0); // Stream1 の ID AcapSetInfo(hDev, nCh, ACL_CXP_STREAM2_ID, -1, 1); // Stream2 の ID AcapSetInfo(hDev, nCh, ACL_VERTICAL_REMAP, -1, 0); // 36124系は0(無効) AcapReflectParam(hDev, nCh); // ここで一括反映
Image1StreamID / Image2StreamID に合わせてください。上の例は 0 と 1 の場合です。ACL_VERTICAL_REMAP は AcapOpen 時に自動で有効になります。ACL_CXP_TAPGEOMETRY による並び替えと二重に処理されるのを防ぐため、この例では明示的に 0(無効)に設定しています(「7.」参照)。ACL_CXP_TAPGEOMETRY に 20(1X_2YE_SingleStream)を設定して並び替えます。
AcapOpen(...); AcapSelectFile(hDev, nCh, iniFilePath, 0); // ここから nMemNum = -1 で保持のみ行う AcapSetInfo(hDev, nCh, ACL_CXP_TAPGEOMETRY, -1, 20); // 1X_2YE_SingleStream AcapSetInfo(hDev, nCh, ACL_VERTICAL_REMAP, -1, 0); // 36124系は0(無効) AcapReflectParam(hDev, nCh); // ここで一括反映
ACL_VERTICAL_REMAP は AcapOpen 時に自動で有効になります。ACL_CXP_TAPGEOMETRY による並び替えと二重に処理されるのを防ぐため、この例では明示的に 0(無効)に設定しています(「7.」参照)。AcapSetInfo を使わず、ini ファイルに記述しておくこともできます。この方法であれば、AcapSelectFile による上書き(「7.」参照)を気にする必要がありません。
1X_2YE_MultiStream の場合
[CXP] USER_CXP_TAPGEOMETRY=21 USER_CXP_STREAM1_ID=0 USER_CXP_STREAM2_ID=1 [USER] USER_VERTICAL_REMAP_ENABLE=0
1X_2YE_SingleStream の場合
[CXP] USER_CXP_TAPGEOMETRY=20 [USER] USER_VERTICAL_REMAP_ENABLE=0
36C1系のボードでは ACL_CXP_TAPGEOMETRY による並び替えが行われないため、SingleStream / MultiStream とも ACL_VERTICAL_REMAP は 1(有効)にします(36124系の 0 とは異なります)。
AcapOpen(...); AcapSelectFile(hDev, nCh, iniFilePath, 0); // ここから nMemNum = -1 で保持のみ行う AcapSetInfo(hDev, nCh, ACL_CXP_TAPGEOMETRY, -1, 21); // 1X_2YE_MultiStream AcapSetInfo(hDev, nCh, ACL_CXP_STREAM1_ID, -1, 0); // Stream1 の ID AcapSetInfo(hDev, nCh, ACL_CXP_STREAM2_ID, -1, 1); // Stream2 の ID AcapSetInfo(hDev, nCh, ACL_VERTICAL_REMAP, -1, 1); // 36C1系は1(有効) AcapReflectParam(hDev, nCh); // ここで一括反映
Image1StreamID / Image2StreamID に合わせてください。上の例は 0 と 1 の場合です。ACL_VERTICAL_REMAP は AcapOpen 時に自動で有効になりますが、AcapSelectFile を呼び出した場合は ini ファイルの値(既定 0)に上書きされます。この例では AcapSelectFile の後に明示的に 1 を設定し直しています(「7.」参照)。ACL_CXP_TAPGEOMETRY は変更せず(1X_1Y のまま)、ACL_VERTICAL_REMAP で並び替えて取り込みます。
AcapOpen(...); AcapSelectFile(hDev, nCh, iniFilePath, 0); AcapSetInfo(hDev, nCh, ACL_VERTICAL_REMAP, -1, 1); // 並び替えを有効化 AcapReflectParam(hDev, nCh);
ACL_VERTICAL_REMAP は AcapOpen 時に自動で有効になりますが、AcapSelectFile を呼び出した場合は ini ファイルの値に上書きされます。この例では ini に記述がないことを想定し、AcapSelectFile の後に設定し直しています(「7.」参照)。AcapSetInfo を使わず、ini ファイルに記述しておくこともできます。この方法であれば、AcapSelectFile による上書き(「7.」参照)を気にする必要がありません。
1X_2YE_MultiStream の場合
[CXP] USER_CXP_TAPGEOMETRY=21 USER_CXP_STREAM1_ID=0 USER_CXP_STREAM2_ID=1 [USER] USER_VERTICAL_REMAP_ENABLE=1
1X_2YE_SingleStream の場合
[USER] USER_VERTICAL_REMAP_ENABLE=1
AcapOpen を実行したとき、AcapLib2 はカメラの DeviceTapGeometry を読み出し、その値に「1X」と「2YE」が含まれていれば VerticalRemap を自動的に有効にします。
ただし、AcapOpen の後に AcapSelectFile を呼び出すと、次の設定が ini ファイルの値で上書きされます。ini に記述がない項目も、下表の既定値で上書きされます(AcapOpen 時の値は維持されません)。
| ini キー | ini に記述がない場合の既定値 |
|---|---|
[USER] USER_VERTICAL_REMAP_ENABLE |
0(無効) |
[CXP] USER_CXP_TAPGEOMETRY |
1(1X_1Y) |
[CXP] USER_CXP_STREAM1_ID |
-1(Stream ID の指定なし) |
[CXP] USER_CXP_STREAM2_ID |
-1(Stream ID の指定なし) |
画像が上下入り混じったまま取得される場合は、この上書きによって設定が変わっていないか確認してください。
対処方法(いずれか1つ)
| (a) | AcapSelectFile の後に、「4.」の表の値を AcapSetInfo で設定し直す(「5.」「6.」の設定例の方法) |
|---|---|
| (b) | ini ファイルに 「4.」の表の値を記述しておく(「5-3.」「6-3.」参照) |
(1) 誤った設定のまま撮像しないでください
MultiStream / SingleStream の設定を誤ったまま撮像した場合、その後に正しい設定へ戻しても復帰せず、PC の再起動が必要になる場合があります。設定値は必ずカメラの Feature または仕様書で確認してから適用してください。
(2) テストパターンは 1X_1Y で出力されるカメラがあります
自然画は 1X_2YE、テストパターンは 1X_1Y という機種があります。テストパターンの表示結果だけで並び替えの設定を判断せず、カメラの DeviceTapGeometry の値または仕様書に従ってください。
SDK-AcapLib2 Library Manual
ACL_CXP_TAPGEOMETRY(TapGeometry 設定)ACL_CXP_STREAM1_ID(Stream1ID の設定)ACL_CXP_STREAM2_ID(Stream2ID の設定)ACL_VERTICAL_REMAP(VerticalRemap 対応 DMA)AcapSerialWrite / AcapSerialRead(GenICam コマンドを使用したカメラアクセス)AcapGetCameraCategoryFeatureList(カメラの Feature 名一覧の取得)SDK-AcapLib2 IniFile Manual
[CXP] USER_CXP_TAPGEOMETRY / USER_CXP_STREAM1_ID / USER_CXP_STREAM2_ID[USER] USER_VERTICAL_REMAP_ENABLEAIPTool UsersManual
サンプルプログラム(SDK-AcapLib2 インストールフォルダ内)
Sample\Acquisition\Grab_VerticalRemap … VerticalRemap の使用例Sample\CameraSetting\GenICam_FeatureAccess … カメラ Feature の読み書きNow Loading...