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();
            }
        }
Example #3
0
 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();
        }