[AR]ImageTarget(圖像識別)


ImageTarget

前言

ImageTarget 顧名思義,就是圖像識別,本文記錄下作者最近學習vuforia中的imageTarget筆記與心得。

vuforia guide:https://library.vuforia.com/articles/Training/Image-Target-Guide

vuforia sample  - 選擇 Core Features下載,導入ImageTarget.unitypackagehttps://developer.vuforia.com/downloads/samples

image

vuforia 基礎知識:高通Vuforia Getting Started

 

開發環境

Vuforia 6.0.112

Unity 5.3.6f1 x64  (Android平台)

Windows 7 x64

 

名詞說明

下面列舉下本文中所列出的幾個名詞,可能每個人對這些英文的理解不一樣,這些解釋僅僅代表個人觀點。

Database(數據集、圖集):大體都是指多張圖片組合在一起的那個東西

ImageTarget(識別圖):具體的某張識別圖像

 

自帶Demo簡單分析

1、從Demo中可以看出,當有多個ImageTarget時,每個ImageTarget之間是有間距的,可以簡單理解為每個ImageTarget的坐標值不一樣【(x,z)平面】,如下所示:

image

2、Demo中把需要識別的圖,全部以ImageTarget的形式,放置在場景中

image

image

3、Word Center Mode默認的模式選擇的是 FirstTarget

image

4、如果需要同時識別多個ImageTarget,需要設置最大識別數量

image

 

World Center Mode

FirstTarget

相機在運動,第一個Found的ImageTarget坐標不動,其它ImageTarget會輕微地運動

Camera

ImageTarget在運動,相機不動

自己搭建的簡單步驟

1、上傳識別圖到管理后台(單張圖像不超過2mb大小,如果是灰度圖,建議使用jpg格式),管理后台會智能地標注出圖像的識別點(如何讓圖像更具可識別性?有針對圖像的設計指南)

2、下載識別圖package,導入到Unity中,package中包括數據集(xxx.data),xml(xxx.xml),識別圖(xxx_scale.jpg,xxx_scale.png)

3、根據Demo的示例創建一個新場景,里面有ARCamera,ImageTarget,在ImageTarget的屬性面板選擇database識別圖(ImageTarget)

4、運行程序,當攝像頭識別到步驟3的選定的識別圖之后,就會觸發OnFound事件,而當識別圖移開或者被遮擋,會觸發OnLost事件

具體的業務邏輯,在OnFound和OnLost中進行處理

void OnFound(string trackableName){
//TODO 識別成功的邏輯處理,參數trackableName就是xml中的name
}


void OnLost(string trackableName){
//TODO 丟失的邏輯處理,參數trackableName就是xml中的name
}

xml 分析

下載的package中的xml內容如下

<?xml version="1.0" encoding="UTF-8"?>
<QCARConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="qcar_config.xsd">
  <Tracking>
    <ImageTarget name="798_01" size="1.000000 1.434034" />
    <ImageTarget name="799_01" size="1.000000 1.434034" />
  </Tracking>
</QCARConfig>

分析:這里面的內容就是我們上傳的識別圖的圖片名,長寬的比例。

默認這份xml是放在 StreamAssets\database\database.xml,當然如果不需要那么多的識別圖,而又不想在管理中刪除多余的識別圖,那么有個簡單的方法,刪除xml中的幾行數據,就會刪除相應的識別圖了。

查看圖像識別點

登錄vuforia的管理后台 https://developer.vuforia.com/targetmanager/singleDeviceTarget/deviceSingleImageTargetDetails

選擇TargetManager - 選擇具體的 Database - 具體的 Image  - Show Feature 可以看到識別圖的識圖點

Tips

同一張識別圖,彩圖和灰白圖的識別點是一樣的,如下所示我上傳的是張彩色的圖,但Show Features顯示的是張灰白圖。

image

識別任意張圖代碼實現

需求說明

假設共有20張圖像,當用戶掃描其中任意一張圖,都可以成功被識別,再比如圖集中有500張圖像,當掃描任意張圖像時都可以被成功識別

思路分析

通過上面的操作步驟,我們知道只有在場景中存在的ImageTarget,在攝像頭掃描到時,才可以觸發識別成功事件

那么我們需要做的就是:把database中的識別圖全部實例成ImageTarget,可能你會想,那就把ImageTarget的prefab實例化20或500個,每個實例的ImageTarget不同唄。

思想是這樣的,但還有更簡捷的方法。

Load Database

在ARCamera的Database Load Behaviour中勾選了需要的 database之后,運行就會把database中所有的imagetarget都生成出來,並自動已選擇好了不同的ImageTarget

image

image

測試代碼

通過上面的實踐,我們知道既然Vuforia會自動把所有的ImageTarget都生成出來,那么我們就可以更加方便了

下面這段代碼可以獲取所有的識別對象

IEnumerable<TrackableBehaviour> trackableBehaviours = TrackerManager.Instance.GetStateManager().GetTrackableBehaviours();

Tips

1、經測試多圖識別中,在丟失之后最好重設下ImageTarget的位置到初始值,否則可能出現奇怪現象。

2、可以獲取ImagetTargetBehaviour的Size,設置每個ImageTarget的位置

測試代碼:https://github.com/zhaoqingqing/blog_samplecode/tree/master/ar-vr-mr/vuforia/imagetarget


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM