高通vuforia动态加载、卸载、对焦、翻转摄像头、控制识别数模板
来源:互联网 发布:2011年网络男歌手 编辑:程序博客网 时间:2024/05/05 14:03
我目前用的是高通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; /// <summary> /// 是否为使用本地识别库数据 /// </summary> [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<ObjectTracker>(); 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<ImageTargetBehaviour>().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<ImageTargetBehaviour>(); 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<DefaultTrackableEventHandler>(); imageTargetBehaviour.gameObject.AddComponent<TurnOffBehaviour>(); } } 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<ObjectTracker>(); tracker.Stop(); tracker.DeactivateDataSet(m_DataSet); IEnumerable<DataSet> dataSets = tracker.GetActiveDataSets(); IEnumerator<DataSet> dEnumerator = dataSets.GetEnumerator(); List<DataSet> list = new List<DataSet>(); 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}
阅读全文
1 0
- 高通vuforia动态加载、卸载、对焦、翻转摄像头、控制识别数模板
- 高通 Vuforia 最新6-2-10版本 API 动态加载、卸载识别库 闪光灯 对焦 翻转摄像头 动态更改识别数量等
- 高通Vuforia SDK在Unity设置对焦模式
- Vuforia 摄像头自动对焦问题测试
- 摄像头对焦Vuforia摄像机采集内容模糊
- vuforia 高通AR中 识别图与被加载的虚拟物体的关系(修正)
- 【Vuforia】Vuforia实现自动对焦
- 高通Vuforia:识别之后立即播放视频
- ios for 高通Vuforia图像识别+AR(一)
- ios for 高通Vuforia图像识别+AR(二)
- 关于高通AR在Android手机上摄像头对焦的问题
- 高通实现相机对焦
- Vuforia SDK---- Vuforia AR开发对焦模式
- 【Vuforia】Vuforia实现自动对焦的代码
- Vuforia SDK---- Vuforia AR开发对焦
- Unity+Vuforia 自动对焦功
- Vuforia实现相机自动对焦
- 高通AR之动态摄像头切换
- openjudge 3344 冷血格斗场
- 已知一个数组,每一行都按照从左到右递增的顺序排序, 每一列都按照从上到下递增的顺序排序。请完成一个函数, 输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
- wamp配置虚拟主机时可能遇到的问题
- 关于qemu的二三事(2)————qemu使用过程中的小tips
- java代码求阶乘
- 高通vuforia动态加载、卸载、对焦、翻转摄像头、控制识别数模板
- [笔记]Oracle、MySQL和DB2数据库分页查询的实现
- 学习淘淘商城第七十二课(网页静态化-业务逻辑及测试)
- 卡特兰数
- 搜索 H
- ios 只取消导航根控制器的LeftBarButtonItem
- 空间映射网络--Spatial Transformer Networks
- python 实现列主元消去算法
- 【Linux】共享内存--实现进程间通信