一丶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/
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。