OpenCV の機能の一つに、ArUco マーカーによる座標検出があります
今回は、UnrealEngine で ArUco マーカーを検出する方法について解説します
プラグイン有効化 #
UE5 時点で、OpenCV がビルトインのプラグインとして実装されています インカメラ VFX で使用されているためですね
まずは OpenCV プラグインを有効化します

ノード解説 #
OpenCV ArUco Detect Markers
というノードを使って検知をします
入力
名前 | 詳細 |
---|---|
In Render Target | 検出対象の画像入力 |
In Dictionary | ArUco マーカーの Dictionary タイプ |
In Dictionary Size | ArUco マーカーの Dictionary サイズ |
Debug Draw Markers | 検出した情報を出力テクスチャに書き込むか |
EstimatePose | 検出したマーカーの位置情報を出力するか |
In Marker Length in Meters | マーカーの実サイズ |
In Lens Distortion Parameters | レンズの歪み補正パラメータ |
出力
名前 | 詳細 |
---|---|
Out Debug Texture | 検出結果確認用のデバッグテクスチャ |
Out Detected Markers | 検出したマーカーの情報(ID、コーナー位置、Transform) |
Return Value | 検出したマーカーの数 |
歪み補正パラメータは必須です
とりあえずは空の構造体を入れておきましょう
Dictionary のタイプとサイズは、OpenCV の定義に準拠します
ここが違うと、ID 等が一致しないので、実際に使用するマーカーの形式に合わせてください
実装例 #
RenderTarget に検出したい画像を転写し、 OpenCV ArUco Detect Markers
ノードに入力します
サンプルでは、WebCamera の入力を取得し、それを RenderTarget に転写するようにしています
動作例 #
実用するにあたっての課題 #
検知するだけであれば、BP のみで実装することが可能です
EstimatePose
を On にし、 In Marker Length in Meters
を適切な値にすれば、カメラからの位置を取得するのも容易です
ただし、もともと検出しているのが、UnrealEngine と座標系の異なる OpenCV 座標系であり、UnrealEngine に持ち込む際には座標系をあわせるだけの変換しかかかっていないので
UnrealEngine 内で扱うには少々難のある Rotation が出力されます
また、出力される Transform はあくまでもカメラからの相対位置であるため、別途カメラの向きを取得する方法を用意するか
何らかの変換をかけて、扱いやすい位置関係に読み替える必要があります
サンプル #
https://drive.google.com/file/d/1VzetByV4rK3cSyhCdv4LPBnoQg1vgdSu/view?usp=share_link
参考資料 #
https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html
https://docs.unrealengine.com/5.1/en-US/BlueprintAPI/OpenCV/ArUco/OpenCVArUcoDetectMarkers/