圖像追蹤

圖像追蹤示例

此示例演示了(le)如何檢測和(hé)增強真實世界中的(de)圖像目标。

有關自定義可(kě)追蹤對(duì)象更新和(hé) Unreal Engine 的(de) AR Trackable Notify 組件的(de)基本信息,請參閱 Unreal Engine 文檔,要使用(yòng)此功能,需要在 OpenXR 插件設置中啓用(yòng),路徑爲:Project Settings > Snapdragon Spaces 插件。

 

示例工作原理(lǐ)

默認情況下(xià),當示例運行并識别到圖像時(shí),會在物(wù)理(lǐ)目标上生成一個(gè)小工具。當前示例僅能識别一個(gè)圖像,并在地圖中包含的(de) UI 面闆上顯示該圖像的(de)世界位置。

 

圖片30.png


圖像 AR

BP_ImageTrackingManager 藍圖資産(位于 SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > ImageTracking > Placeable)負責通(tōng)過事件系統創建和(hé)銷毀 BP_Gizmo_AugmentedImage 參與者,它将來(lái)自 AR Trackable Notify 組件的(de)事件綁定起來(lái),以響應 AR 可(kě)追蹤圖像的(de)變化(huà),當系統檢測到圖像時(shí),會觸發 On Add/Update/Remove Tracked Image 事件。在示例藍圖中,如果要啓動檢測,需将 Toggle AR Capture 設置爲 ON;如果要停止檢測并銷毀所有生成的(de) AR 圖像,則将其設置爲 OFF,也(yě)可(kě)以使用(yòng) Toggle Spaces Feature 作爲啓用(yòng)該功能的(de)替代方法。此外,必須将 Scene Understanding 設置爲該節點的(de)捕捉類型。

 

圖像 AR 會話(huà)配置

系統使用(yòng) D_SpacesSessionConfig_ImageTracking 資産(位于 SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > ImageTracking > Core)來(lái)檢測圖像。該資産是從 SpacesSessionConfig 類派生的(de)數據資産。

 

會話(huà)配置文件提供了(le)三個(gè)字段:一個(gè)用(yòng)于定義圖像的(de)大(dà)小,一個(gè)用(yòng)于指定應跟蹤的(de)最大(dà)同時(shí)圖像數量,另一個(gè)用(yòng)于引用(yòng)候選圖像進行跟蹤。

 

圖像跟蹤器的(de)創建是在異步線程中進行的(de),以避免在跟蹤圖像數量非常多(duō)時(shí)出現凍結問題。因此,圖像跟蹤有時(shí)可(kě)能會出現啓動延遲。請監聽(tīng) On Spaces Image Tracking Is Ready 委托,以了(le)解圖像何時(shí)準備好進行跟蹤。


圖片31.png

 

AR 候選圖像

Unreal Engine 使用(yòng)名爲 AR Candidate Image(https://dev.epicgames.com/documentation/en-us/unreal-engine/BlueprintAPI/ARSettings/AddCandidateImage?application_version=4.27) 的(de)專用(yòng)資産類型來(lái)創建 XR 系統需要跟蹤的(de)圖像引用(yòng),開發者可(kě)以添加任意數量的(de) AR Candidate Images,并将它們分(fēn)配到 AR Session Config 中指定的(de)數組。

 

要創建 AR Candidate Image,首先需要将要跟蹤的(de)圖像導入爲紋理(lǐ)資産到 Content 文件夾中。創建的(de)紋理(lǐ)資産應在壓縮設置中選擇 UserInterface2D (RGBA),并建議(yì)關閉 mip maps。

 

圖片32.png


提示!

您可(kě)以在“測試圖像目标”部分(fēn)找到所使用(yòng)的(de)參考圖像。


接下(xià)來(lái)需要創建 AR Candidate Image 資産,其中 Candidate Texture 字段需要引用(yòng)已創建的(de)紋理(lǐ)資産,每個(gè) AR Candidate Image 應該有一個(gè)唯一的(de)标識符,可(kě)以在 Friendly Name 字段中設置,如果在同一個(gè) AR Session Config 中使用(yòng)了(le)相同的(de)名稱,将會導緻哈希碼沖突。

 

最後一步是通(tōng)過寬度/高(gāo)度字段定義圖像的(de)物(wù)理(lǐ)尺寸(以厘米爲單位),準确的(de)尺寸對(duì)于正确的(de)姿态估計和(hé)後續的(de)增強顯示非常重要。這(zhè)些數據會根據圖像的(de)比例和(hé) Orientation 字段中定義的(de)方向自動填充,不幸的(de)是,Unreal Engine 當前的(de)方向設置是颠倒的(de),因此開發者需要将 Portrait 設置爲用(yòng)于橫向圖像,将 Landscape 設置爲用(yòng)于縱向圖像。

 

如果 AR Candidate Image 資産的(de)父級是 Spaces AR Candidate Image,Snapdragon Spaces 插件提供了(le)幾種不同的(de)跟蹤模式供選擇:

 

● 動态模式:每幀更新跟蹤圖像的(de)位置,适用(yòng)于移動和(hé)靜态目标。如果無法找到跟蹤圖像,則不會報告位置或姿态。默認使用(yòng)此模式。

● 自适應模式:周期性地更新靜态圖像的(de)位置(大(dà)約每 5 幀更新一次),當圖像稍微移動時(shí)進行更新。這(zhè)在靜态圖像的(de)功耗和(hé)準确性之間找到平衡。

 

● 靜态模式:适用(yòng)于已知爲靜态的(de)圖像,在此模式下(xià),圖像在首次檢測時(shí)會固定位置,之後不會更新,這(zhè)可(kě)以減少功耗并提高(gāo)性能,但如果圖像發生漂移,位置将不會更新。

 

跟蹤模式可(kě)以在應用(yòng)程序運行時(shí)通(tōng)過以下(xià)節點更改,而無需停止或重啓 AR 會話(huà):

 

● 按友好名稱設置圖像目标跟蹤模式(Set Image Target Tracking Mode by Friendly Name)

● 按候選圖像設置圖像目标跟蹤模式(Set Image Target Tracking Mode by Candidate Image)

● 按友好名稱設置圖像目标跟蹤模式(Set Image Targets Tracking Mode by Friendly Name)

● 按候選圖像設置圖像目标跟蹤模式(Set Image Targets Tracking Mode by Candidate Image)

 

SetImageTrackedModeByID 已在 0.15.0 版本中棄用(yòng)。

 

圖片33.png


示例使用(yòng)了(le) D_SpacesARCandidateImage_SpaceTown 藍圖資産(位于 SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > ImageTracking > Placeable)。該圖像目标在打印成 DIN A4 或 US letter 尺寸時(shí),高(gāo)度爲 26 厘米。BP_Gizmo_AugmentedImage 藍圖資産(位于 SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > ImageTracking > Placeable)在物(wù)理(lǐ)圖像目标上渲染一個(gè) gizmo,指示其在識别和(hé)跟蹤後的(de)方向。

 

圖片34.png