项目实战可看此篇文章
EasyAR项目图像识别与模型交互(全网首发,保姆级教程)_北村南的博客-CSDN博客
基础内容
编辑
编辑
可以在unity中调试运行:3D物体跟踪+平面图像跟踪
需要打包后在手机上运行:稀疏\稠密空间地图+运动跟踪+表面跟踪+录屏
easyar在unity的基本运行
编辑
平面追踪
功能:检测有丰富纹理的平面物体
准备:一张物体图片
原理:系统会根据图片自动计算特征数据
编辑
两种追踪模式
Constant | Value | Description |
PreferQuality | 0 | 优先质量 |
PreferPerformance | 1 | 优先性能 |
官方提供图片识别度:EasyAR -检测可识别度
单图像跟踪
使用ImageFile文件进行跟踪
1添加EasyAR_ImageTracker-1 Prefab到场景
2添加ImageTarget Prefab到场景
3配置Camera,设置MainCamera,Solid Color,黑色
4创建StreamingAssets文件夹并在其中添加识别图
5配置ImageTarget
编辑
注意:这里scale是现实世界中物体的宽度,单位是米
6添加跟随ImageTarget的3D内容
7可以直接在windows中运行
8也可以在Android设备上运行
使用data文件进行跟踪
1 EasyAR--Image Target Data
2编辑
多图像跟踪
1方法:修改Image Tracker中的Simultaneous Target Number值
2使用多Tracker进行跟踪:表示一些模型都是由我这个tracker来管理的
3一张图片也可有多个模型
编辑
c#脚本程序控制
1添加控制器
编辑
2添加脚本
编辑
3添加游戏对象
编辑
4代码对应的对象配置
编辑
编辑
C#语言实现点击出现和消失功能
using System.Collections; using System.Collections.Generic; using System; using UnityEngine; using easyar; public class ITcon : MonoBehaviour { // Start is called before the first frame update public ImageTrackerFrameFilter tracker; public ImageTargetController targetController; public void SetTracker(bool status) { tracker.enabled = status; //设置是否跟踪 } public void SetTarget(bool status) { if (status) { targetController.Tracker = tracker; //加载图像 } else { targetController.Tracker = null; //卸载图像 } } }
平面图像跟踪视频播放
3D物体跟踪
表面跟踪和运动跟踪
功能:在空间内出现3D物体,随着使用者位置的移动,3D物体位置不发生变化
表面跟踪基本结构
编辑
运动跟踪基本结构
编辑
使用方法:在手机上才能运行
表面跟踪基本配置
1 EasyAR_SurfaceTracker和WorldRoot拖入场景
2 选中EasyAR_SurfaceTracker游戏对象,将WorldRoot游戏对象拖到World Root Controller属性中为其赋值
编辑
3 在WorldRoot下放入需要使用的3D模型
4 调整3D物体在主摄像机的位置
实现效果
编辑
当设备小范围移动时,3D物体位置变化不大。当设备大范围移动时,3D物体也会跟着变化,也就是会受周围环境的影响。
总结:适合小范围的移动,实现效果不是很好
运动跟踪基本配置
1 EasyAR_MotionTracker和WorldRoot拖入场景
2 与平面跟踪基本配置一样
实现效果
编辑
编辑
总结:在大范围移动后,回头看3D物体位置基本没有变化,相比于表面跟踪其稳定性要好很多很多。
稀疏空间地图
背景:以运动跟踪为基础,将二维图像变成三维图像
作用:扫描环境形成三维视觉地图,提供视觉定位跟踪
可多个设备实时共享,实现多人互动
可同时加载多个地图
精度影响因素:纹理、透明度、色调、光照、角度、定位,有一定的环境要求,主要是光线不要太暗
编辑
对象解析
EasyAR+WorldRoot:标准运动跟踪
SparseSpatialMapWorker:游戏对象管理者
SparseSpatialMap:游戏对象,在同个场景可有多个
功能解析
SparseSpatialMapWorker:
BuilderMapController.Host:保存地图的方法,需输入地图名称和缩略图(可输入no)
BuilderMapController.MapHost:保存地图的返回值,关键可返回地图ID和名称,因为官方没有提供API可实现自动获取地图ID和名称
Localizer.start:开始定位
Localizer.stop:结束定位
SparseSpatialMap:
Source Type:Map Bulder(建立地图),Map Mannager(定位,若填上地图信息,则无需写程序,直接可以使用,系统自动下载地图并尝试定位)
参考资料