public void SaveLocalMarkerThread(Marker marker, bool isRecognitionManagerRunning, bool replace, string appdatapath, bool sync_after_save) { if (replace || !File.Exists(appdatapath + "markers/" + marker.markerId + ".dat")) { string dstMarkerPath = appdatapath + "markers/"; if (!Directory.Exists(dstMarkerPath)) { Directory.CreateDirectory(dstMarkerPath); } if (isRecognitionManagerRunning) { #if UNITY_EDITOR_OSX || (UNITY_IOS && !UNITY_EDITOR_WIN) String sbId = marker.markerId.ToString(); String sbDescriptor = marker.markerDescriptor; #else StringBuilder sbId = new StringBuilder(marker.markerId.ToString()); StringBuilder sbDescriptor = new StringBuilder(marker.markerDescriptor); #endif PikkartARCore.SaveLocalMarker(sbId, sbDescriptor); } else { SaveLocalMarkerFile(marker.markerId, Convert.FromBase64String(marker.markerDescriptor)); } if (sync_after_save) { PikkartARCore.SyncMarkersWithFolder(); } } marker.markerDescriptor = null; _localRecognitionService.SaveMarker(marker, true /*_localRecognitionService.GetMarker(marker.markerId) != null*/); }
/// <summary> /// Init this instance. Initialize and start RecongnitionManager, PikkartCamera and NatCamManager. /// </summary> protected IEnumerator InitRecognition() { foreach (var device in WebCamTexture.devices) { Debug.Log("Name: " + device.name); } yield return(Application.RequestUserAuthorization(UserAuthorization.WebCam)); if (Application.HasUserAuthorization(UserAuthorization.WebCam)) { Debug.Log("webcam found"); } else { #if UNITY_EDITOR if (EditorUtility.DisplayDialog("Camera error!", "You cannot use our SDK without a camera!\n" + "Please connect a camera and try again.", "Ok")) { EditorApplication.isPlaying = false; } #endif Debug.Log("webcam error no webcam"); yield break; } #if UNITY_EDITOR if (!useWebcamOnEditor) { yield break; } #endif Screen.sleepTimeout = SleepTimeout.NeverSleep; foreach (CloudMarkerObject cloudMarker in _cloudMarkers) { cloudMarker.Init(); } foreach (MarkerObject marker in _markerObjects) { marker.Init(); } _camera = FindObjectOfType <PikkartARCamera>(); _webcam = FindObjectOfType <WebCamManager>(); if (_recognitionManager == null) { _recognitionManager = new RecognitionManager(this); _recognitionManager.LoadLocalMarkersOnStartup(true, _markerList, _discoverList); } else { PikkartARCore.SyncMarkersWithFolder(); } _camera.SetRecognitionManager(_recognitionManager); _recognitionOptions = new RecognitionOptions( recognitionStorage, recognitionMode, new CloudRecognitionInfo(databases)); if (_webcam.HasWebcam()) { _camera.LaunchWebcam(_webcam); } else { #if UNITY_EDITOR if (EditorUtility.DisplayDialog("Camera error!", "You cannot use our SDK without a camera!\n" + "Please connect a camera and try again.", "Ok")) { EditorApplication.isPlaying = false; } #endif Debug.Log("webcam error no webcam"); } #if UNITY_EDITOR if (_recognitionOptions.getMode() != RecognitionOptions.RecognitionMode.TAP_TO_SCAN) { if (FindObjectOfType <ScanButton>() != null) { FindObjectOfType <ScanButton>().gameObject.SetActive(false); } } #else if (FindObjectOfType <ScanButton>() != null) { FindObjectOfType <ScanButton>().gameObject.SetActive(false); } #endif _camera.SetMarkers(ref _markerObjects, ref _cloudMarkers); _camera.SetSeeThroughDevice(isSeeThroughDevice, seeThroughFramePrediction); if (_recognitionListener != null) { _recognitionListener.OnPikkartARStartupComplete(); } }
public static void SyncMarkersWithFolder() { PikkartARCore.SyncMarkersWithFolder(); }
public void LoadLocalMarkersOnStartup(bool isRecognitionManagerRunning, string[] markerIds, string[] discoverIds) { LoadLocalDiscoverModelsOnStartUp(discoverIds); if (markerIds.Length < 1) { return; } string srcMarkerPath = Application.streamingAssetsPath + "/markers/"; #if UNITY_EDITOR || UNITY_IOS if (!Directory.Exists(Application.streamingAssetsPath) || !Directory.Exists(srcMarkerPath)) { return; } #endif string dstMarkerPath = RecognitionManager.GetAppDataPath() + "markers/"; if (!Directory.Exists(dstMarkerPath)) { Directory.CreateDirectory(dstMarkerPath); } else { string[] files = Directory.GetFiles(dstMarkerPath); foreach (string ff in files) { File.Delete(ff); } } foreach (string markerId in markerIds) { Debug.Log("Loading marker " + markerId); if (markerId == "") { continue; } string markerString = null; #if UNITY_EDITOR || UNITY_IOS markerString = File.ReadAllText(srcMarkerPath + markerId + ".dat"); #else WWW reader = new WWW(srcMarkerPath + markerId + ".dat"); while (!reader.isDone) { } if (!String.IsNullOrEmpty(reader.error)) { continue; } markerString = reader.text; #endif if (markerString.Length > 0) { Debug.Log("Loading marker save " + markerId); WSMarkerResponse.WSMarker markerData = JsonUtilities.ToObject <WSMarkerResponse.WSMarker>(markerString); DateTime now = DateTime.Now.ToUniversalTime(); Marker marker = new Marker(markerData.markerId, markerData.markerDescriptor, markerData.markerCustomData, DateTime.Parse(markerData.markerUpdateDate), now, now, markerData.publishedFrom != null ? (DateTime?)DateTime.Parse(markerData.publishedFrom) : null, markerData.publishedTo != null ? (DateTime?)DateTime.Parse(markerData.publishedTo) : null, markerData.cacheEnabled, new MarkerDatabase(markerData.markerDatabase.id, markerData.markerDatabase.code, markerData.markerDatabase.customData, markerData.markerDatabase.cloud, now, now), markerData.arLogoEnabled); SaveLocalMarker(marker, isRecognitionManagerRunning, true, false); } } PikkartARCore.SyncMarkersWithFolder(); }