博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高通vuforia动态加载、卸载、对焦、翻转摄像头、控制识别数模板
阅读量:4147 次
发布时间:2019-05-25

本文共 5595 字,大约阅读时间需要 18 分钟。

我目前用的是高通6117版本的SDK,最新版函数改动不多,大体上一致,话不多说上代码

using UnityEngine;using System.Collections;using Vuforia;using System.Collections.Generic;using System.IO;using UnityEngine.UI;public class Vuforia_Template : MonoBehaviour{    private string sz_DataPath = null;    private bool b_LoadDataSet = false;    private ObjectTracker m_ObjectTracker = null;    private DataSet m_DataSet = null;    private ImageTargetBehaviour[] m_ImageTargetBehaviours = null;    private static Vuforia_Template _insttance = null;    ///     /// 是否为使用本地识别库数据    ///     [Header("是否为使用本地识别库数据")]    public bool b_Location = false;    public static Vuforia_Template Instance    {        get { return _insttance; }    }    public string GetDataPath    {        get { return sz_DataPath; }        set { sz_DataPath = value; }    }    private void Awake()    {        _insttance = this;    }    void Start()    {        //string path = Application.isEditor ? Application.persistentDataPath.Replace("/" + Application.productName, "") : Application.persistentDataPath;        //GetDataPath = path + "/" + "Capable" + ".xml";        VuforiaBehaviour.Instance.RegisterVuforiaStartedCallback(RegisterVuforiaStartedCallback);    }    void RegisterVuforiaStartedCallback()    {        StartCoroutine(LoadDataSet());    }    public void StartLoadDataSet(string data_name)    {        sz_DataPath = data_name;        StartCoroutine(LoadDataSet());    }    #region Public_Method    IEnumerator LoadDataSet()    {            Debug.Log(sz_DataPath);            yield return new WaitUntil(delegate {                return !string.IsNullOrEmpty(sz_DataPath);            });        yield return new WaitForSecondsRealtime(0.5f);        if (VuforiaRuntimeUtilities.IsVuforiaEnabled())        {            m_ObjectTracker = TrackerManager.Instance.GetTracker
(); m_DataSet = m_ObjectTracker.CreateDataSet(); if (m_DataSet == null && !b_Location) { b_LoadDataSet = m_DataSet.Load(sz_DataPath, VuforiaUnity.StorageType.STORAGE_ABSOLUTE);//绝对路径 一般用来网络下载的识别库 } else { b_LoadDataSet = m_DataSet.Load(sz_DataPath);//本地预制的识别库 } } yield return null; if (b_LoadDataSet) { m_ObjectTracker.ActivateDataSet(m_DataSet); } yield return new WaitUntil(() => FindObjectsOfType
().Length>0); UpdateImageTarget(); CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_TRIGGERAUTO); yield return new WaitForSeconds(.5f); CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO); m_ObjectTracker.Start();//开启识别器 (可以理解为摄像头) } void UpdateImageTarget() { m_ImageTargetBehaviours = FindObjectsOfType
(); for (int i = 0; i < m_ImageTargetBehaviours.Length; i++) { ImageTargetBehaviour imageTargetBehaviour = m_ImageTargetBehaviours[i]; GameObject temp_cube = GameObject.CreatePrimitive(PrimitiveType.Cube); temp_cube.transform.localPosition = new Vector3(0, 0.4f, 0); temp_cube.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f); temp_cube.transform.SetParent(imageTargetBehaviour.transform,false); imageTargetBehaviour.name = m_ImageTargetBehaviours[i].ImageTarget.Name + "Target"; imageTargetBehaviour.gameObject.AddComponent
(); imageTargetBehaviour.gameObject.AddComponent
(); } } public void UnLoadDataSet(ImageTargetBehaviour[] imageTargetBehaviours = null) { if (m_ImageTargetBehaviours != null && m_ImageTargetBehaviours.Length>0&& imageTargetBehaviours ==null) { imageTargetBehaviours = m_ImageTargetBehaviours; } bool isVuforiaEnabled = VuforiaRuntimeUtilities.IsVuforiaEnabled(); if (isVuforiaEnabled) { ObjectTracker tracker = TrackerManager.Instance.GetTracker
(); tracker.Stop(); tracker.DeactivateDataSet(m_DataSet); IEnumerable
dataSets = tracker.GetActiveDataSets(); IEnumerator
dEnumerator = dataSets.GetEnumerator(); List
list = new List
(); while (dEnumerator.MoveNext()) { list.Add(dEnumerator.Current); } for (int i = 0; i < list.Count; i++) { tracker.DeactivateDataSet(list[i]); tracker.DestroyDataSet(list[i], true); } for (int i = 0; i < imageTargetBehaviours.Length; i++) { TrackerManager.Instance.GetStateManager().DestroyTrackableBehavioursForTrackable(imageTargetBehaviours[i].Trackable); } } } public IEnumerator SetFocusMode() { CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_TRIGGERAUTO); yield return new WaitForSeconds(.5f); CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO); } public void SetCameraDirection(CameraDevice.CameraDirection CameraDirection) { CameraDevice.Instance.Stop(); CameraDevice.Instance.Deinit(); CameraDevice.Instance.Init(CameraDirection); CameraDevice.Instance.Start();#if UNITY_IPHONE if (CameraDirection == CameraDevice.CameraDirection.CAMERA_FRONT) StartCoroutine(shuaxin());#elif UNITY_ANDROID#endif } IEnumerator shuaxin() { yield return new WaitForEndOfFrame(); Camera.main.transform.localEulerAngles = new Vector3(0, 0, 180.0f); } public void SetTrackedImageCount(int TrackedCount) { VuforiaUnity.SetHint(VuforiaUnity.VuforiaHint.HINT_MAX_SIMULTANEOUS_IMAGE_TARGETS, TrackedCount); } public void SetTrackedObjectCount(int TrackedCount) { VuforiaUnity.SetHint(VuforiaUnity.VuforiaHint.HINT_MAX_SIMULTANEOUS_OBJECT_TARGETS, TrackedCount); } #endregion}

转载地址:http://pljti.baihongyu.com/

你可能感兴趣的文章
OpenCV gpu模块样例注释:video_reader.cpp
查看>>
就在昨天,全球 42 亿 IPv4 地址宣告耗尽!
查看>>
Mysql复制表以及复制数据库
查看>>
Linux分区方案
查看>>
如何使用 systemd 中的定时器
查看>>
git命令速查表
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
Ribbon 学习(二):Spring Cloud Ribbon 加载配置原理
查看>>
Ribbon 学习(三):RestTemplate 请求负载流程解析
查看>>
深入理解HashMap
查看>>
XML生成(一):DOM生成XML
查看>>
XML生成(三):JDOM生成
查看>>
Ubuntu Could not open lock file /var/lib/dpkg/lock - open (13:Permission denied)
查看>>
collect2: ld returned 1 exit status
查看>>
C#入门
查看>>
C#中ColorDialog需点两次确定才会退出的问题
查看>>
数据库
查看>>