一丶ARCamera(AR的靈魂)
1.World Center Mode
- SPECIFIC_TARGET:制定一個物體作為世界中心坐標
- FIRST_TARGET:攝像機所照射到的第一個需要識別的目標為世界中心坐標
- CAMERA:攝像機為世界中心的坐標
2.Open Vuforia Engine Configuration
a.Camera Device Mode:
- MODE_OPTIMIZE_QUALITY:質量優先
- MODE_OPTIMIZE_SPEED:速度優先
- MODE_DEFAULT:默認
b.最大識別數量:
- MaxSimultaneous Tracked Images:最大識別的圖片數量
- MaxSimultaneous Tracked Objects:最大識別的物體數量
c.Camere Direction:
-
CAMERA_DEFAULT:默認攝像機
-
CAMERA_BACK:指定后置攝像頭
-
CAMERA_FRONT:指定前置攝像頭
特別注意:電腦端調試時打開的都是前置攝像頭
d.Device Type:
-
Handle:手持
-
Difital Eyewear:眼鏡
-
Phone+Viewer:用於MR(混合現實)
二丶Default Trackable Event Handler腳本(后續的開發只需要繼承ITrackableEventHandler接口即可)
// 找到了需要識別的物體
protected virtual void OnTrackingFound();
// 丟失了需要識別的物體
protected virtual void OnTrackingLost();
// 狀態切換
public void OnTrackableStateChanged(
TrackableBehaviour.Status previousStatus,
TrackableBehaviour.Status newStatus)
{
m_PreviousStatus = previousStatus;
m_NewStatus = newStatus;
if (newStatus == TrackableBehaviour.Status.DETECTED ||
newStatus == TrackableBehaviour.Status.TRACKED ||
newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
{
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found");
OnTrackingFound();
}
else if (previousStatus == TrackableBehaviour.Status.TRACKED &&
newStatus == TrackableBehaviour.Status.NO_POSE)
{
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");
OnTrackingLost();
}
else
{
// For combo of previousStatus=UNKNOWN + newStatus=UNKNOWN|NOT_FOUND
// Vuforia is starting, but tracking has not been lost or found yet
// Call OnTrackingLost() to hide the augmentations
OnTrackingLost();
}
}
我們實現功能只需在OnTrackingFound和OnTrackingLost兩個函數上實現即可
Turn off Behaviour腳本
鏈接到設備的攝像頭后銷毀Mesh Renderer和Mesh Filter組件
三丶功能
- Image Target:這是最常用、也是最簡單的識別對象,即單一靜態的平面圖像
- Multi-Targets(立方體識別):多對象識別,可以同時識別多張Image Targets,並且可以把它們和幾何立體物體結合起來,比如一個紙盒子,或者任意形狀的平面
- Cylinder Targets(圓柱體識別):是形狀類似於圓柱形的圖片,可以將這些圖片貼到一些圓柱形物體上比如瓶子、杯子等等,進行識別
- Text Recognization:文字識別,但是很遺憾,不支持中文漢字識別,只支持英文(但同時官方文檔給了下面的提示)
而這里使用的是Vuforia8.0.10,所以在這不推薦使用這個功能了
-
Object Recognization:實物識別
- Object Sacnner:對象掃描儀,目前只支持一部分的三星和谷歌手機,所以設備有很大的限制,因此我暫時不會使用這個功能
- Scan3D:在Google Play下載,可以掃描真實世界的物體
- Vuforia Engine數據庫最多可以容納20個對象目標
-
VuMark:這是Vuforia自己研發的一種新型條形碼,並且被稱為下一代條形碼,你能夠自己隨意設計這種條形碼的樣式,並且在其中融入相關的數據信息(自由度高);可用於識別零件和設備等
-
Model Target: 模型目標使使用Vuforia Engine構建的應用程序能夠根據對象的形狀識別和跟蹤現實世界中的特定對象
1.各種各樣的物體可以用作 模型目標,從家用電器和玩具到車輛,到大型工業設備甚至建築地標
2.對象必須:
-
幾何剛性(即它不能變形或可延展)。
-
呈現穩定的表面特征(不支持光亮表面)。
-
根據其所處的環境進行修復。
-
-
Virtual Buttons(虛擬按鈕):這是唯一一個交互的功能(與現實交互) 虛擬按鈕部分要選擇特征點比較豐富的部位
1.接口:VirtualButtonEventHandler和IVirtualButtonEventHandler
public void OnButtonPressed(VirtualButtonAbstractBehaviour vb) public void OnButtonReleased(VirtualButtonAbstractBehaviour vb)
實現功能時和普通按鈕一樣,可實現長按短按,雙擊等操作
-
Cloud Recognition:雲識別 (免費1000個標記)
1.Server Access Keys:用來上傳圖片和管理圖片
2.Client Access Keys:APP中圖片識別服務而搜索數據庫
3.元數據:元數據保存Json文件地址,而數據保存在Json文件中
4.Book案例(官方定位的最佳體驗)
-
Ground Plane Detection:(Smart Terrain的一部分)
1.檢測和跟蹤水平表面(地板)
2.在水平表面上生成3D物體
3.但暫時也是有一定的設備限制
Vuforia Fusion Supported Devices
4.可用於家庭家具購物和應用游戲和設計可視化等
-
User Defined Targets(用戶自定義目標):
1.實現原理:通過兩個新的類::ImageTargetBuilder 和 ImageTargetBuilderState 實現創建
2.UserDefinedTargetEventHandler腳本
三個選項:
1.Start scanning automatically:當開始攝像頭,自動檢測攝像頭畫面的特征點
2.Stop tracker while scanning:當掃描的時候自動終止跟蹤,當停止掃描,跟蹤自動開啟。
3.Stop scanning after creating a target:當新的target創建之后,自動停止掃描
PS:默認選擇第一項,這種方式一直掃描狀態,當Target創建之后會被立刻跟蹤。因此,模型出現更快。並且選擇這種,可以識別多個標志。
四丶圖片識別機制
通過檢測自然特性點的匹配來完成的,將Target Manager中的Image檢測出的特征點保存在數據庫中,然后實時檢測初真實圖像中的特征點與數據庫中模板圖片的特征點數據進行匹配
1.服務器對上傳圖片進行灰度處理,圖片變為黑白圖像
2.提取黑白圖形特征點: 圖片中尖銳可辯、輪廓分明的地方為特征點
3.將特征點數據打包;
4.程序運行時對比特征點數據包
注意事項
1.最好時無光澤,較硬材質的卡片
2.包含豐富的細節,較高的對比度(顏色相差較大)以及無重復的圖像
3.整幅圖片的8%寬度為功能排斥緩沖區,不會被識別
4.帶有輪廓分明、有棱角的圖案
5.圖像目標應在漫反射燈光照射的適度明亮的環境中,圖片表面應被均勻照射
作者:Ligo丶
出處:https://www.cnblogs.com/Ligo-Z/
本文版權歸作者和博客園共有,歡迎轉載,但必須給出原文鏈接,並保留此段聲明,否則保留追究法律責任的權利。