关于Vuforia扫描识别图片,最简单的设置识别区域

因为需要做个Vuforia扫描并设置识别区域,查了一些资料发现网上并没太多介绍这块内容。

有看到一个帖子上给了两个解决方案,一个是图片裁剪,但是这个方法太烦了。还有个是遮罩不过因为Vuforia插件中限定了ARCamera的Field of View属性,因此不能改ARCamera拍摄的范围,因此导致另一个Camera拍摄的做遮罩的范围和ARCamera拍摄的范围差不多,这样如果判定区域比较小的话还是会导致拍摄的扫描图在区域外时就进行识别。(除非找到改ARCamera的Field of View属性的接口,改Field of View的值来控制拍摄范围)

因此自己做了个最简单的判断。(萌新都能实现的功能,结果被当初的自己蠢哭了(/ω\))

实现逻辑:获取扫描图在屏幕空间的坐标,然后设置判定区域。判定扫描图的位置是否在判定区域内

如果在判定区域内就进行识别到后的操作,如果不在区域内就执行丢失扫描图的操作。

因为我获取的扫描图是在DefaultTrackableEventHandler脚本中写的因此直接是this获取

//获取扫描图的坐标并转换成屏幕坐标

Vector3 screenPos=Camera.main.WorldToViewportPoint(this.transform.position);

//也可用WorldToScreenPoint,两个函数转换后坐标值范围不同而已。WorldToViewportPoint转换后坐标值范围(0,1)WorldToScreenPoint转换后坐标值范围(0,Canvas的大小)

//设置判断区域(范围根据实际情况设置)

Rect rc=new Rect(0.3f,0.82f,0.7f,0.18f);

//接着就是做简单的比较判断

if(screenPos.x>rc.xMin&&screenPos.xrc.yMin&&screenPos.y

{

//满足条件时的操作

}

else

{

//不满足条件时的操作

}

//这么做后就实现在识别区域内扫描到后才会有操作。但是注意如果默认的一次只能扫描到一个图时,因为识别还是根据拍摄的范围进行识别的,所以会根据第一个识别到的对象操作,其他扫描到的对象可能会pass掉。因此需要设置下一次识别多张图。这样就能完美的实现在识别区域内扫描到才有相应的操作。

不过这个方法比较消耗性能的,但是我一个萌新也想不出什么好的方法了,将就着用吧。

如果有大佬有更好的方法,欢迎提出来。

(✺ω✺)

另外附带ARCamera的属性介绍:

AR交互场景的特殊相机,一般情况下,再创建了该相后,其他相机可以删除,除非你需要相机渲染特定的视图。

①World Center Mode:

SPECIFIC_TARGET:指定一个物体为世界中心的坐标,此物体必须继承Vuforia Behaviour

FIRST_TARGET: 摄像机所照射到的第一个需要识别的目标CAMERA 以摄像机为世界中心坐标

DEVICE_TRACKING:设备追踪,以设备正在追踪的物体,如平面识别

②Camera Device Mode(设备的模式):

MODE_OPTIMIZE_QUALITY: 质量优先,优化质量

MODE_OPTIMIZE_SPEED :速度优先,优化速度

MODE_DEFAULT :默认的模式,在以上两种间做一个平衡,在没有特殊需求时使用

③Max Simultaneous Tracked Images:最大追踪识别图片数量

④Max Simultaneous Tracked Objects:同上,只不过是识别物体。

⑤Digital Eyewear(设备类型):

Handheld :手持

Digital Eyewear : 微软眼镜

Phone + Viewer MR

⑥DataBases:数据库

⑦Mirror Video Background:镜像视频背景

⑧Device Tracker(设备追踪):

Track mode : 追踪模式:旋转,位置

Enable prediction : 启用预测运动

Model correction mode : 模型校正模式:NONE,头戴,手持

⑨CameraDevice(WebCam):网络摄像头

你可能感兴趣的:(ar,unity)