Vuforia自定义识别/动态生成识别图的简单操作步骤

利用自定义识别可以不用上传图片到Vuforia官网,也可以动态生成/修改识别图来达到在本地修改识别图的目的。

利用Vuforia进行自定义图片的识别(自定义识别是不支持虚拟按键的)

1.新建工程并将Vuforia插件导入Unity

2.因为是自定义识别图,不用将图片上传到官网,也就不用下载相应的图片数据包

3.将原始场景中的MainCamera删除,并拖入vuforia预制件中的ARCameraImageTargetUserDefinedTargetBuilder拖入

4.导一个模型进去并放到ImageTarget下面...

 

5.在ARCamera下面的VuforiaBehaviour下点击OpenVuforiaConfiguration,输入LicenseKey,然后将ImageTarget的类型设置为UserDefined

 

6.写脚本,这里脚本名字叫做UDTTest,挂到UserDefinedTargetBuilder下,然后将UserDefinedTargetBuilder脚本的Start scanning auto勾上,表示开启自动扫描

这个脚本,需要用到Vuforia命名空间, System.Linq命名空间,需要实现接口

IUserDefinedTargetEventHandler,具体代码框架如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using Vuforia;


public class UDTTest : MonoBehaviour,IUserDefinedTargetEventHandler
{
    ObjectTracker m_objectTracker;
    DataSet m_BuildDataSet;
    ImageTargetBuilder.FrameQuality m_FrameQuality;
    public int m_TargetCounter;
    public ImageTargetBehaviour ImageTargetTemplate;
    UserDefinedTargetBuildingBehaviour m_TargetBuildingBehaviour;
// Use this for initialization
void Start () {

        m_TargetBuildingBehaviour = this.GetComponent<UserDefinedTargetBuildingBehaviour>();  
        if (m_TargetBuildingBehaviour!=null)  
        {  
            m_TargetBuildingBehaviour.RegisterEventHandler(this);  
        }  
}

// Update is called once per frame
void Update () {

}


    public void OnFrameQualityChanged(ImageTargetBuilder.FrameQuality frameQuality)
    {
        m_FrameQuality = frameQuality;
        if (m_FrameQuality == ImageTargetBuilder.FrameQuality.FRAME_QUALITY_LOW)
        {
            Debug.Log("Low Camera Image Quality ");
        }  
    }


    public void OnInitialized()
    {
         m_objectTracker = TrackerManager.Instance.GetTracker<ObjectTracker>();  
         if (m_objectTracker != null)  
         {  
             m_BuildDataSet = m_objectTracker.CreateDataSet();  
             m_objectTracker.ActivateDataSet(m_BuildDataSet);    //激活数据集  
         }  
    }


    public void OnNewTrackableSource(TrackableSource trackableSource)
    {
        m_objectTracker.Stop();  //停止追踪才能激活数据集  
        m_TargetCounter++;  
        m_objectTracker.DeactivateDataSet(m_BuildDataSet);//创建一个新的数据集  
        //如果trackable满了或者已经定义了5个识别对象,那么删除旧的DataSet  
        if (m_BuildDataSet.HasReachedTrackableLimit() || m_BuildDataSet.GetTrackables().Count() > 5)  
        {  
            IEnumerable<Trackable> trackables = m_BuildDataSet.GetTrackables();  
            Trackable oldest = null;  
            foreach (Trackable trackable in trackables)  
            {  
                if (oldest ==null  || trackable.ID < oldest.ID)  
                {  
                    oldest = trackable;  
                }  
           }  
  
           if (oldest != null)  
           {  
               m_BuildDataSet.Destroy(oldest, true);  
           }  
       }  
  
  
       //定义Trackable并实例化  
        ImageTargetBehaviour imageTargetCopy = Instantiate(ImageTargetTemplate);
           //Instantiate<ImageTargetBehaviour>()(ImageTargetTemplate);  
       imageTargetCopy.gameObject.name = "UserDefinedTarget-" + m_TargetCounter;  
       //复制一个Trckable到imageTargetCopy上并让它激活  
       m_BuildDataSet.CreateTrackable(trackableSource, imageTargetCopy.gameObject);  
       m_objectTracker.ActivateDataSet(m_BuildDataSet);  
       m_objectTracker.Start();    
    }    


    public void OnBuildButtonClick()  
    {  
        m_TargetBuildingBehaviour.BuildNewTarget("Test2", 50);  

    } 


  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值