EasyAR4.0使用說明(Unity3D)(二)----平面圖像跟蹤

總體說明

平面圖像跟蹤對圖像有一定的要求,紋理細節豐富,紋理不是簡單重複,長寬比不能太大。 官方提供了圖像檢測工具,將圖像上傳到指定地址,可以知道可識別度。

地址: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;    //卸載圖像
        }
    }

視頻版地址:

https://www.bilibili.com/video/BV1VZ4y147kj/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章