以现实世界中的某物体、某介质为参照物,将AR内容固定到该参照物的相对位置,伴随参照物的移动而发生相对位置的改变,即所谓的AR跟踪。

2D图像追踪(ARKit和ARCore),通过检测环境中的特定2D图像,Tracked Image Manager可以自动创建表示所有已识别图像的GameObject,让你可以根据特定图像改动AR体验。

本项目示例源代码:

https://github.com/sueleeyu/ar-augment

一、创建项目工程

1.新建项目

2.重命名为ImagesScene,选择Window-Package Manager- Unity Register,依次下载:

XR Plugin Management 4.0.7

AR Foundation 4.1.10

ARCore XR Plugin 4.1.10

ARKit XR Plugin 4.1.10

3.如下:

二、添加AR组件

1.删除原有摄像机, 点击“+”,添加Session Origin,AR Session:

2.选择 AR Session Origin,Inspector中点击添加组件,搜索框输入art,选择AR Tracked Image Manager添加。

三、添加界面UI和模型

1.log Text,用来显示日志信息:Hierarchy-‘+’- UI –Text,新建Text组件,命名Log,设置:

2.添加Button,Hierarchy-Canvas右键,UI-Button,设置:

Button-Text设置:

四、创建参考图库

1.Project –Assets 右键,Create-Folder,新建文件夹,命名Images:

2.创建参考图库,Project –Assets –Images 右键,Create-XR-Reference Image Library:

3.复制多张图片到Images目录下:

4.添加参考图,选择ReferenceImageLibrary,点击右侧Inspector的Add Image

5.拖动图片到右侧贴图,依次完成参考图的添加:

添加如下:

参考图中属性的含义:

Name:每一个参考图有一个唯一的guid和一个name,Name可以用来实时匹配检测到的图片和参考图

Specify Size:指定图片的大小,一些平台下需要指定才能识别,所有最好选中。

Keep Texture at Runtime:是否使用纹理,如果要修改Prefab外观可以选中。

6. AR Tracked Image Manager添加Reference Library属性:选择Hierarchy-AR Session Origin,选择右侧Inspector的AR Tracked Image Manager项的Serialized Library右侧圆点,点击列表对应项添加:

五、需要的图片和预制件

1.Hierarchy下新建Cube,命名One(对应参考库中图片Name),拖动Images下One.png到场景中的Cube:

2.Assets下新建Resources/Prefabs文件夹,把立方体One拖动到Prefabs下,删除场景中的One,其他依次制作。

六、编写脚本

1. Project-Assets右键,新建Scripts文件夹,新建Logger.cs,用于查看log日志

2.Logger挂载

代码:

using System.Collections.Generic;
using System.Text;
using UnityEngine.UI;namespace UnityEngine.XR.ARFoundation.Samples
{public class Logger : MonoBehaviour{[SerializeField]Text m_LogText;//挂载到Log Text组件public Text logText{get => m_LogText;set => m_LogText = value;}[SerializeField]int m_VisibleMessageCount = 40;public int visibleMessageCount{get => m_VisibleMessageCount;set => m_VisibleMessageCount = value;}int m_LastMessageCount;static List<string> s_Log = new List<string>();static StringBuilder m_StringBuilder = new StringBuilder();void Awake(){if (m_LogText == null){m_LogText = GetComponent<Text>();}lock (s_Log){s_Log?.Clear();}Log("Log console initialized.");}void Update(){lock (s_Log){if (m_LastMessageCount != s_Log.Count){m_StringBuilder.Clear();var startIndex = Mathf.Max(s_Log.Count - m_VisibleMessageCount, 0);for (int i = startIndex; i < s_Log.Count; ++i){m_StringBuilder.Append($"{i:000}> {s_Log[i]}\n");}var text = m_StringBuilder.ToString();if (m_LogText){m_LogText.text = text;}else{Debug.Log(text);}}m_LastMessageCount = s_Log.Count;}}public static void Log(string message){lock (s_Log){if (s_Log == null)s_Log = new List<string>();s_Log.Add(message);}}}
}

做关联:

3.新建MultiImageTracking.cs,编写代码。

加载预制件,在Strat中:

void Start()

{

//加载预制件

GameObject one = Resources.Load<GameObject>("Prefabs/One");

prefabs.Add("One", one);

GameObject two= Resources.Load<GameObject>("Prefabs/Two");

prefabs.Add("Two", two);

GameObject qrcode = Resources.Load<GameObject>("Prefabs/QRCode");

prefabs.Add("QRCode", qrcode);

Logger.Log("MultiImageTracking-Start");

}

4.注册ARTrackedImagesChangedEventArgs事件:

private void OnEnable()

{

ImgTrackedManager.trackedImagesChanged += OnTrackedImagesChanged;

}

OnTrackedImagesChanged中实现加载:

void OnTrackedImagesChanged(ARTrackedImagesChangedEventArgs eventArgs)

{

foreach (var trackedImage in eventArgs.added)

{

// Give the initial image a reasonable default scale

var minLocalScalar = Mathf.Min(trackedImage.size.x, trackedImage.size.y) / 2;

trackedImage.transform.localScale = new Vector3(minLocalScalar, minLocalScalar, minLocalScalar);//对模型缩放

Instantiate(prefabs[trackedImage.referenceImage.name], trackedImage.transform);//实例化预制件

//OnImagesChanged(trackedImage);

}

}

5.挂载MultiImageTracking.cs到AR Session Origin,选择AR Session Origin,Inspector中点击Add Component,输入并选择MultiImageTracking.cs,将Button-Text组件拖到MultiImageTracking的Toggle Text属性栏:

七、android打包

1.运行:

八、常见问题

1.ARFoundration打包会报错:“Failded to generated ARCore reference image library”

报错原因应该是图像质量不符合要求。

九、参考文献

1. Unity api:

Unity - Manual: Unity User Manual 2021.3 (LTS)

2.ARFoundation示例:

GitHub - Unity-Technologies/arfoundation-samples: Example content for Unity projects based on AR Foundation

3.ARCore 文档

为图像添加维度  |  ARCore  |  Google Developers

4.本项目示例源代码:

sueleeyu/ar-augment · GitHub

ARFoundation从零开始5-AR图像跟踪相关推荐

  1. Unity学习4:如何实现2D图像跟踪(涂色类AR项目实践1)

    Unity2D图像检测追踪 AR tracked image manager(2D图像检测追踪管理器) 准备:创建项目 第一步:创建参考图像库 第二步:挂载组件 小插曲:如何显示整个地球仪 第三步:为 ...

  2. ARFoundation从零开始1-ARFoundation简介

    一.AR.VR.MR VR:虚拟现实(Virtual Reality),利用计算机生成一种模拟环境,使用户沉浸到该环境中 AR:增强现实(Augmented Reality,简称 AR),是一种实时地 ...

  3. (3两个例子)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练

    从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练 1综述 http://www.cnblogs.com/jsxyhelu/p/7907241.html 2环境架设 http://www ...

  4. (2环境架设)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练

    从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练 1综述 http://www.cnblogs.com/jsxyhelu/p/7907241.html 2环境架设 http://www ...

  5. 从零开始写一个图像处理程序之四(Prewitt 算子分析)

    上一篇: 从零开始写一个图像处理程序之三(卷积原理简介)_星空_MAX的博客-CSDN博客 具体看看卷积核为什么能够得到图像信息呢 先看Prewitt算子的结构 分别过滤出来横向边缘和纵向边缘: 拿G ...

  6. ARFoundation从零开始8-Geospatial API(地理空间)开发

    ARCore Geospatial API为开发者带来了Live View的底层技术,包括大规模云锚点功能,以及全球视觉定位系统(VPS)的访问权限,可用于开发多人共享的AR应用. 该技术基于谷歌地球 ...

  7. python图像跟踪代码_python如何实现图像外边界跟踪 python实现图像外边界跟踪代码示例...

    python如何实现图像外边界跟踪?本篇文章小编给大家分享一下python实现图像外边界跟踪代码示例,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. share一些pytho ...

  8. 粒子滤波在图像跟踪领域的实践

    文章目录 前言 粒子滤波与卡尔曼滤波的介绍 卡尔曼滤波 粒子滤波 粒子滤波与卡尔曼滤波跟踪对比实验 小结 跋 前言 原文首发于微信公众号「3D视觉工坊」.     前两天在GitChat上总结了自己当 ...

  9. ARFoundation从零开始3-创建ARFoundation项目

    项目示例源代码: https://github.com/sueleeyu/framework 一.创建项目工程 1. unity版本2020.2.6f1,新建项目: 2.Hieraychy下Scene ...

最新文章

  1. 【公开课预告】AutoML知多少
  2. java 连接mysql 8.0,java连接mysql 8.0的问题
  3. Java线程池详解及常用方法
  4. 盛趣游戏 html5游戏,盛趣游戏谭雁峰:游戏破局的“精细”时代已来
  5. java语言中的数据是如何定义_java中的数据类型
  6. 解决使用MinGW编译C++代码报cannot find -lxxxx的问题
  7. 蔡崇信与马云的 20 年
  8. [Java]Socket和ServerSocket学习笔记
  9. 如何设置Java桌面程序界面外观(How to Set the Look and Feel) UIManager
  10. rabbitmq注意事项
  11. Matlab输出换行
  12. 多家多平台拿走的AD封装库Altium-3D封装库+超全原理图库含51+STM32库
  13. web前端性能优化的方法
  14. allegro中差分对设置
  15. LVGL lv_msgbox消息对话框(22)
  16. stm32通过ESP8266连接互联网服务器,手机通过网页实现远程控制灯亮灭
  17. pion最简单webrtc例子
  18. Android获取所有App信息
  19. 2021-4-8学习笔记
  20. 牛客网之SQL---持续更新

热门文章

  1. centos7合并home分区到root分区
  2. 解析新STEAM教育对国内中高考的影响
  3. DENSO GT-10Q-SU条码扫描器如何恢复出厂设置?
  4. 51单片机PWM控制电机
  5. 闭环管控体系与数据指标管理
  6. 网络黑道常用之拼音缩写用语前十名
  7. 机器学习实战笔记——第十章
  8. 安卓驱动设备节点权限设置
  9. 支持度、置信度、提升度、apriori算法理解(简易版)
  10. TortoiseSVN提交代码