總體說明
平面圖像跟蹤對圖像有一定的要求,紋理細節豐富,紋理不是簡單重複,長寬比不能太大。 官方提供了圖像檢測工具,將圖像上傳到指定地址,可以知道可識別度。
地址:https://www.easyar.cn/targetcode.html
平面圖像跟蹤主要是ImageTracker和ImageTarget這兩個遊戲對象,每個ImageTarget對應一個被跟蹤的圖像,場景中也可以同時出現多個ImageTracker。
ImageTracker遊戲對象相關
- 【enable】屬性可以用於獲取當前跟蹤器狀態,也可以用於啓用/禁用當前跟蹤器從而實現啓用/禁用平米圖像識別的功能。
- 【Tracker Mode】選項設置跟蹤的時候是質量優先還是性能優先,默認是質量優秀(Prefer Quality)。
- 【Simultaneous Target Number】設置指定當前的跟蹤器同時跟蹤目標的最大數量。一個場景中,能同時被跟蹤的圖像數量是所有ImageTracker的Simultaneous Target Number屬性值的和。
ImageTarget遊戲對象相關
- 【Tracker】設置, 每個ImageTarget遊戲對象必須指定一個ImageTracker遊戲對象才能被跟蹤,可以通過修改該設置實現對圖像的加載和卸載。
- 【Active Control】選項用於設置ImageTarget遊戲對象是否激活和激活方式。
- 【Source Type】選項用於設置跟蹤類型,除了可以直接跟蹤圖片“Image File”,還可以跟蹤只包含關鍵信息文件大小小很多的“Target Data File”。
“Target”則是用來獲取雲識別的結果的。 - 【事件】ImageTargetController類提供了4個事件,分別是圖像被識別“TargetFound”,被識別圖像從視野消失“TargetLost”,圖像加載完成“TargetLoad”和圖像卸載完成“TargetUnload”。
單個圖像跟蹤
新建一個場景,設置場景中的Main Camera的Clear Flags屬性爲Solid Color。
將EasyAR_ImageTracker-1預製件拖到場景中。
將ImgaeTarget預製件拖到場景中。
設置利用圖片文件進行跟蹤,設置Source Type屬性爲Image File,設置Path Type爲StreamingAssets,設置Paht爲“bus.jpg”,即跟蹤圖像相對路徑,設置Scale屬性爲“0.2”。
注意,這裏的Scale的大小是指圖像在被跟蹤的時候,在現實空間的寬度,單位爲米。
在ImageTarget遊戲對象下添加要顯示的3D模型。
運行效果如下:
EasyAR還可以利用Data文件進行跟蹤。點擊菜單EasyAR–Image Target Data,在彈出窗口中,設置Generate From爲Image。將要跟蹤的圖像拖到Image Path中。設置Name和Scale屬性,然後點擊Generate按鈕。點擊之後,默認會在項目的SteamingAssets目錄下生成“.etd”文件。
設置Source Type屬性爲Target Data File,設置Path Type爲StreamingAsset】,設置Paht爲“birds.etd”,即跟蹤數據文件相對路徑。
同時跟蹤多個圖像
在上面的例子中,修改Simultaneous Target Number值,將其從默認1改爲2即可。
運行效果如下:
當視野中的圖像數量小於等於跟蹤數量的時候,則所有圖像都會被跟蹤。當視野中的圖像數量大於跟蹤數量的時候,最先被跟蹤的圖像會被跟蹤。
EasyAR還可以使用多個Tracker進行跟蹤
運行效果如下:
EasyAR也可以同時跟蹤同一圖像的多個副本
運行效果如下:
平面圖像跟蹤程序控制
public ImageTrackerFrameFilter tracker;
public ImageTargetController targetController;
void Awake()
{
if (targetController)
{
targetController.TargetFound += () =>
{
Debug.LogFormat(...); //當圖像被跟蹤到
};
targetController.TargetLost += () =>
{
Debug.LogFormat(...); //當圖像從視野消失
};
targetController.TargetLoad += (Target target, bool status) =>
{
Debug.LogFormat(...); //加載圖像
};
targetController.TargetUnload += (Target target, bool status) =>
{
Debug.LogFormat(...); //卸載圖像
};
}
}
public void SetTracker(bool status)
{
tracker.enabled = status; //設置是否跟蹤
}
public void SetTarget(bool status)
{
if (status)
{
targetController.Tracker = tracker; //加載圖像
}
else
{
targetController.Tracker = null; //卸載圖像
}
}
視頻版地址: