关于高通AR摄像机聚焦和调用前后摄像头的研究

来源:互联网 发布:数据库查找通配符 编辑:程序博客网 时间:2024/06/05 00:16

我们在做高通AR的时候会有一些设置的图片无法识别的情况,怎么解决呢?

 Vuforia有个Target Manager,这里主要负责处理待识别的Target,在最新的4.0版本中,可识别的标志包括以下四种类型: 
 
一般使用较多的是Single Image,那么如何提高这类图片的识别度呢?识别度关系到什么呢? 
比如识别之后,增强显示信息不稳定,会抖动;或者很难识别出Target,无法出现增强信息。 
1、星级 
Vuforia识别的原理是通过检测自然特征点的匹配来完成的。将Target Manager中的image检测出的特征点保存在数据库中,然后在实时检测出真实图像中的特征点与数据库中模板图片的特征点数据进行匹配。 
星级评判标准看这篇文章: 
https://developer.vuforia.com/library/articles/Solution/Natural-Features-and-Ratings 
当然,有时候会发现,即使1-2颗星也能很好的识别,但是为了保证稳定性,最好提高Target的星级。 
 
星级越高识别度越好。

关于如何增强局部对比度,看下面这篇文章: 
https://developer.vuforia.com/library/articles/Solution/Local-Contrast-Enhancement2、摄像头对焦 
Vuforia的demo中是设置为自动对焦的。当无法自动对焦时,拍摄到的实时场景是模糊的,这样对Target的识别有很大的影响。检测和跟踪的性能被大大降低了。 
1、开启现行对焦模式(FOCUS_MODE_CONTINUOUS_AUTO) 
这种模式可以使设备根据当前场景进行自动对焦 
2、Vuforia其他对焦模式 
并不是所有的设备都支持线性对焦的,所以需要启用其他对焦模式 
3、触发自动对焦(FOCUS_MODE_TRIGGER_AUTO) 
点击屏幕触发自动对焦模式,这个在Vuforia的demo中都有涉及到。更多关于摄像头对焦的模式看下面的文章: 
https://developer.vuforia.com/library/articles/Solution/Camera-Focus-Modes
3、光照 
在AR算法中,光照条件也是个不容忽视的问题。在很多论文中,当实验算法的稳定性时,都会对光照条件进行检测。因为光照条件将会在很大程度上影响检测和跟踪的效果。 
1、环境中光照足够,保证摄像头能够清晰地获取图像中的信息。 
2、保证光照的稳定和可控。 
这就是室内AR和室外AR在算法上有一定的区别的原因。Vuforia的应用大多是室内。 
3、活用闪光灯 
闪光灯的作用就是补光,不管是用作手电筒还是camera中。如果你的应用需要在黑暗的环境中运行,那么需要打开闪光灯才行。 
Vuforia API: 
CameraDevice.Instance.SetFlashTorchMode( true ); 
在Unity3d中: 
CameraDevice.Instance.SetFlashTorchMode( true ); 

具体代码如下
void  Start()    {        m_bIsFocus = false;        CameraDevice.Instance.SetFocusMode(CameraDevice. FocusMode.FOCUS_MODE_CONTINUOUSAUTO);    }    void  Update()    {        //自动对焦        //if (m_bIsFocus)#if UNITY_EDITOR        if (Input .GetMouseButtonUp( 0))#elif UNITY_ANDROID || UNITY_IPHONE        if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)#endif        {            CameraDevice.Instance.SetFocusMode(CameraDevice. FocusMode.FOCUS_MODE_CONTINUOUSAUTO);        }    }
调用前后摄像头
 public void  foneCamera(){            i++;            if (i==1)           {    CameraDevice.CameraDirection cameraDirection = CameraDevice.CameraDirection.CAMERA_FRONT;        CameraDevice.Instance.Stop();        CameraDevice.Instance.Deinit();        CameraDevice.Instance.Init(cameraDirection);        CameraDevice.Instance.Start();                      }                  if (i==2)            {                CameraDevice.CameraDirection cameraDirection = CameraDevice.CameraDirection.CAMERA_BACK;                CameraDevice.Instance.Stop();                CameraDevice.Instance.Deinit();                CameraDevice.Instance.Init(cameraDirection);                CameraDevice.Instance.Start();                i = 0;            }    }




1 0
原创粉丝点击