メインコンテンツへスキップ
  1. 記事/

ArUcoマーカーを使う(part1)

UnrealEngine UE5.0 AR

OpenCV の機能の一つに、ArUco マーカーによる座標検出があります
今回は、UnrealEngine で ArUco マーカーを検出する方法について解説します

プラグイン有効化 #

UE5 時点で、OpenCV がビルトインのプラグインとして実装されています インカメラ VFX で使用されているためですね

まずは OpenCV プラグインを有効化します

OpenCVプラグイン

ノード解説 #

OpenCV ArUco Detect Markers というノードを使って検知をします

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/

https://docs.unrealengine.com/4.27/ja/WorkingWithMedia/IntegratingMedia/MediaFramework/HowTo/UsingWebCams/

Related

CustomStencilを使ったマスク作成
UnrealEngine UE5.0 PostProcess
LumenのCardCaptureを差し替える
UnrealEngine UE5.0 Lumen
CharacterのCollisionをMeshの形状に合わせて追加する
UnrealEngine UE5.0 Character