Пример #1
0
        public static Vector2 GetPositionOfInterestPoint(int ip_internal_id)
        {
            HandledArray <float> position = new HandledArray <float>(2);

            PikkartARCore.GetPositionOfInterestPoint(ip_internal_id, position.GetArray());
            return(new Vector2(position.GetArray()[0], position.GetArray()[1]));
        }
Пример #2
0
 /// <summary>
 /// Stops the recognition.
 /// </summary>
 public void StopRecognition()
 {
     stopTimers();
     PikkartARCore.StopEffect();
     PikkartARCore.StopRecognition();
     _recognitionRunning = false;
 }
        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*/);
        }
Пример #4
0
        public void ChangeRecognitionOptions(RecognitionOptions recognitionOptions)
        {
            if (_recognitionRunning)
            {
                if (_currentRecognitionOptions.getStorage() != recognitionOptions.getStorage())
                {
                    if (recognitionOptions.getStorage() != RecognitionOptions.RecognitionStorage.LOCAL)
                    {
                        PikkartARCore.StartEffect();
                    }
                    else
                    {
                        PikkartARCore.StopEffect();
                    }

                    PikkartARCore.ChangeMode(recognitionOptions.getStorage() != RecognitionOptions.RecognitionStorage.LOCAL);
                }

                if (_currentRecognitionOptions.getMode() != recognitionOptions.getMode())
                {
                    if (recognitionOptions.getMode() != RecognitionOptions.RecognitionMode.TAP_TO_SCAN)
                    {
                        stopTimers();
                    }
                    else
                    {
                        scheduleTimers();
                    }
                }
            }

            _currentRecognitionOptions = recognitionOptions;
        }
Пример #5
0
        /// <summary>
        /// Starts the native service recognition.
        /// </summary>
        /// <param name="recognitionOptions">Recognition options.</param>
        /// <param name="recognitionListener">Recognition listener(MainScript).</param>
        public void StartRecognition(RecognitionOptions recognitionOptions, IRecognitionListener recognitionListener)
        {
            StopRecognition();

            SyncMarkersWithFolder();

            _recognitionRunning = true;
            _active             = true;

            _currentRecognitionOptions = recognitionOptions;
            _recognitionListener       = recognitionListener;
            _dataProvider = new RecognitionDataProvider(recognitionOptions.getCloudInfo(), this, GetDeviceId());

#if !UNITY_EDITOR
            if (!LoadSavedCameraParams())
            {
                _dataProvider.ExecuteGetCameraParamFromServer(true);
            }
#endif

            PikkartARCore.ChangeMode(_currentRecognitionOptions.getStorage() != RecognitionOptions.RecognitionStorage.LOCAL);
            PikkartARCore.StartRecognition(_currentRecognitionOptions.getStorage() != RecognitionOptions.RecognitionStorage.LOCAL, false);

            PikkartARCore.StartEffect();

            _markerId = "";

            if (_currentRecognitionOptions.getMode() == RecognitionOptions.RecognitionMode.TAP_TO_SCAN)
            {
                scheduleTimers();
            }
        }
        public void DeleteOldestMarkers(int markerToDeleteCount, String markerToSaveId,
                                        bool isRecognitionRunning)
        {
            List <Marker> markers = dbu.MarkerQuery("SELECT markerId FROM " +
                                                    "Markers WHERE markerId<>'" + markerToSaveId + "' AND " +
                                                    "databaseId IN (SELECT id FROM MarkerDatabase " +
                                                    " WHERE cloud=1) ORDER BY lastAccessDate DESC LIMIT " + markerToDeleteCount);

            foreach (Marker marker in markers)
            {
                dbu.Delete <Marker>(marker.markerId);
                if (isRecognitionRunning)
                {
#if UNITY_EDITOR_OSX || (UNITY_IOS && !UNITY_EDITOR_WIN)
                    PikkartARCore.DeleteLocalMarker(marker.markerId, true);
#else
                    PikkartARCore.DeleteLocalMarker(new StringBuilder(marker.markerId), true);
#endif
                }
                else
                {
                    File.Delete(StorageUtils.GetApplicationPersistentDataPath() + "markers/" + marker.markerId + ".dat");
                }
            }
        }
        void OnScreenDataChange(ScreenData screen)
        {
            int angle = 0;

            switch (DeviceOrientationChange.GetDeviceOrientation())
            {
            case DeviceOrientation.LandscapeLeft:
                RotateLandscapeLeft();
                angle = 0;
                break;

            case DeviceOrientation.LandscapeRight:
                RotateLandscapeRight();
                angle = 180;
                break;

            case DeviceOrientation.Portrait:
                RotatePortrait();
                angle = 90;
                break;

            case DeviceOrientation.PortraitUpsideDown:
                RotatePortaitUpsideDown();
                angle = 270;
                break;
            }
            PikkartARCore.UpdateViewport((int)screen.resolution.x, (int)screen.resolution.y, angle);
        }
Пример #8
0
        public static String GetInterestPointPublicID(int ip_internal_id)
        {
            IntPtr ipFoundPtr = Marshal.AllocHGlobal(512);
            int    size       = PikkartARCore.GetInterestPointPublicID(ip_internal_id, ipFoundPtr);
            String ipFound    = Marshal.PtrToStringAnsi(ipFoundPtr, size - 1);

            return(ipFound);
        }
 public void UploadCameraDataAsOpenGLTexture()
 {
     if (webcamTexture != null && webcamTexture.isPlaying)
     {
         IntPtr gl_id = webcamTexture.GetNativeTexturePtr();
         PikkartARCore.CopyNewFrameFromGL(gl_id, Constants.CAMERA_REQUESTED_WIDTH, Constants.CAMERA_REQUESTED_HEIGHT);
     }
 }
 public void UploadCameraDataAsColor32()
 {
     if (webcamTexture != null && webcamTexture.isPlaying)
     {
         webcamTexture.GetPixels32(data);
     }
     PikkartARCore.CopyNewFrame32(data, Constants.CAMERA_REQUESTED_WIDTH, Constants.CAMERA_REQUESTED_HEIGHT);
 }
Пример #11
0
        public void ForceMarkerSearch(string markerId)
        {
            ChangeRecognitionOptions(new RecognitionOptions(RecognitionOptions.RecognitionStorage.LOCAL, RecognitionOptions.RecognitionMode.CONTINUOUS_SCAN, null));
#if UNITY_EDITOR_OSX || (UNITY_IOS && !UNITY_EDITOR_WIN)
            PikkartARCore.ForceMarkerSearch(markerId.ToString());
#else
            PikkartARCore.ForceMarkerSearch(new StringBuilder(markerId.ToString()));
#endif
        }
        /// <summary>
        /// Deletes the marker.
        /// </summary>
        /// <param name="marker">Marker object.</param>
        public void DeleteMarker(Marker marker)
        {
#if UNITY_EDITOR_OSX || (UNITY_IOS && !UNITY_EDITOR_WIN)
            PikkartARCore.DeleteLocalMarker(marker.markerId, true);
#else
            PikkartARCore.DeleteLocalMarker(new StringBuilder(marker.markerId), true);
#endif
            dbu.Delete <Marker>(marker);
        }
Пример #13
0
        public static bool LoadDiscoverModel(string modelname)
        {
            Debug.Log("Loading discover model " + modelname);
#if UNITY_EDITOR_OSX || (UNITY_IOS && !UNITY_EDITOR_WIN)
            String sbId = modelname.ToString();
#else
            StringBuilder sbId = new StringBuilder(modelname.ToString());
#endif
            return(PikkartARCore.LoadDiscoverModel(sbId));
        }
Пример #14
0
        public static int[] GetActiveInterestPoints()
        {
            HandledArray <int> ipIds = new HandledArray <int>(10);
            int sz = PikkartARCore.GetActiveInterestPoints(ipIds.GetArray());

            int[] ret = new int[sz];
            for (int i = 0; i < sz; ++i)
            {
                ret[i] = ipIds.GetArray()[i];
            }
            return(ret);
        }
        public void UpdateVisibleFrame()
        {
#if UNITY_EDITOR
            PikkartARCore.UpdateCameraTexture(imagePtr_receive);
#endif
            if (textureToShow != null)
            {
                textureToShow.LoadRawTextureData(imagePtr_receive, Constants.CAMERA_REQUESTED_WIDTH * Constants.CAMERA_REQUESTED_HEIGHT * 4);
                textureToShow.Apply();
                if (rawImage != null)
                {
                    rawImage.texture = textureToShow;
                }
            }
        }
        public void InitWebcam(bool front_facing)
        {
            if (rawImage == null)
            {
                rawImage = GetComponent <RawImage>();
                if (rawImage != null)
                {
                    rawImage.texture = Texture2D.blackTexture;
                }
            }
            if (textureToShow == null)
            {
                textureToShow = new Texture2D(Constants.CAMERA_REQUESTED_WIDTH,
                                              Constants.CAMERA_REQUESTED_HEIGHT,
                                              TextureFormat.RGBA32,
                                              false);
                textureToShow.Apply();
            }
#if !UNITY_EDITOR
            PikkartARCore.CameraUpdateUnityTextureId_GL(textureToShow.GetNativeTexturePtr());
#endif

#if UNITY_EDITOR
            PikkartARCore.UpdateViewport((int)Constants.CAMERA_REQUESTED_WIDTH, (int)Constants.CAMERA_REQUESTED_HEIGHT, 0);
#endif

            DeviceOrientationChange.OnScreenDataChange += OnScreenDataChange;
            portraitScale = new Vector3(
                (float)Constants.CAMERA_REQUESTED_HEIGHT / (float)Constants.CAMERA_REQUESTED_WIDTH,
                (float)Constants.CAMERA_REQUESTED_HEIGHT / (float)Constants.CAMERA_REQUESTED_WIDTH,
                1.0f);

            data = null;

            imagePtr_send    = IntPtr.Zero;
            imagePtr_receive = Marshal.AllocHGlobal(Constants.CAMERA_REQUESTED_WIDTH * Constants.CAMERA_REQUESTED_HEIGHT * 4);

            webcamTexture = GetManagedWebCamTexture(front_facing);

            if (rawImage != null)
            {
                rawImage.texture = textureToShow;
            }
            initialized_manager = true;

            OnScreenDataChange(DeviceOrientationChange.GetUpdatedDeviceOrientation());
        }
Пример #17
0
        public void GetCameraParamCallback(double[] cam_params, bool save)
        {
            if (cam_params[0] != -1.0)
            {
                if (save)
                {
                    SaveCameraParams(cam_params);
                }

                PikkartARCore.SetProjectionMatrix2((float)cam_params[0],
                                                   (float)cam_params[1],
                                                   (float)cam_params[2],
                                                   (float)cam_params[3]);

                _pikk_camera.SetCameraParameters(cam_params[0], cam_params[1], cam_params[2], cam_params[3]);
            }
        }
Пример #18
0
        public static Matrix4x4 GetAlternateLandscapeProjectionMatrix()
        {
            //Debug.Log("landscape hfov=" + Constants.CAM_LARGE_FOV + " vfov=" + Constants.CAM_SMALL_FOV);

            float[] mat_data = new float[16];
            PikkartARCore.GetProjectionMatrix(mat_data);

            /*alternateLandscapeProjectionMatrix.m00 = mat_data[0];
             * alternateLandscapeProjectionMatrix.m01 = mat_data[1];
             * alternateLandscapeProjectionMatrix.m02 = mat_data[2];
             * alternateLandscapeProjectionMatrix.m03 = mat_data[3];
             *
             * alternateLandscapeProjectionMatrix.m10 = mat_data[4];
             * alternateLandscapeProjectionMatrix.m11 = mat_data[5];
             * alternateLandscapeProjectionMatrix.m12 = mat_data[6];
             * alternateLandscapeProjectionMatrix.m13 = mat_data[7];
             *
             * alternateLandscapeProjectionMatrix.m20 = mat_data[8];
             * alternateLandscapeProjectionMatrix.m21 = mat_data[9];
             * alternateLandscapeProjectionMatrix.m22 = mat_data[10];
             * alternateLandscapeProjectionMatrix.m23 = mat_data[11];
             *
             * alternateLandscapeProjectionMatrix.m30 = mat_data[12];
             * alternateLandscapeProjectionMatrix.m31 = mat_data[13];
             * alternateLandscapeProjectionMatrix.m32 = mat_data[14];
             * alternateLandscapeProjectionMatrix.m33 = mat_data[15];*/

            //horizontal field of view = 2 atan(0.5 width / focallength)
            double v         = 1.0 / (double)(mat_data[0]);
            double at        = Math.Atan(v);
            double hfov      = 2.0 * at;
            float  camera_ar = Constants.CAMERA_REQUESTED_WIDTH / Constants.CAMERA_REQUESTED_HEIGHT;
            float  t         = ScreenUtilities.GetPortraitAspectRatio() * camera_ar * (float)Math.Tan(hfov / 2.0);
            float  a         = 2.0f * (float)Math.Atan((double)(t)) * 57.2958f;

            alternateLandscapeProjectionMatrix = Matrix4x4.Perspective(
                a,
                ScreenUtilities.GetLandscapeAspectRatio(),
                Constants.NEAR_CLIP_PLANE,
                Constants.FAR_CLIP_PLANE);

            return(alternateLandscapeProjectionMatrix);
        }
        public void GetCameraParamsCallbackOK(WSCameraParamsResponse response)
        {
            double[] cam_params = new double[4];
            byte[]   byte_array;
            byte_array = Convert.FromBase64String(response.data);
            float[] paramsf = new float[4];

            IntPtr byte_send;

            byte_send = Marshal.AllocHGlobal(20);
            Marshal.Copy(byte_array, 0, byte_send, 20);
            PikkartARCore.DecryptCalibParams(byte_send, paramsf);
            cam_params[0] = paramsf[0];
            cam_params[1] = paramsf[1];
            cam_params[2] = paramsf[2];
            cam_params[3] = paramsf[3];

            _dataProviderListener.GetCameraParamCallback(cam_params, true);
            _getMarkerRequestRunning = false;
        }
        /// <summary>
        /// Instructs the cloud recognition service to execute a FindMarker request.
        /// </summary>
        /// <param name="imageBase64">Image base64.</param>
        public void ExecuteFindMarkerRequest()
        {
            if (_findMarkerRequestRunning)
            {
                return;
            }

            _findMarkerRequestRunning = true;

            int size = PikkartARCore.GetUpdatedServerBuffer(_nativeArray);

            if (size == 0)
            {
                _findMarkerRequestRunning = false;
                return;
            }
            string imageDescriptor = Marshal.PtrToStringAnsi(_nativeArray);

            PikkartARHelper.Instance.LaunchCoroutine(_cloudRecognitionService.FindMarker(imageDescriptor, FindMarkerCallbackOK, FindMarkerCallbackKO));
        }
        /*
         *  CreateServerSignature
         */
        public static string AuthorizationCode(string method, string body, string date, string path)
        {
#if UNITY_EDITOR_OSX || (UNITY_IOS && !UNITY_EDITOR_WIN)
            PikkartARCore.CreateUnityServerSignature(method, body, date, path, signaturePtr);
            string signature_str = Marshal.PtrToStringAuto(signaturePtr);
#else
            PikkartARCore.CreateUnityServerSignature(new StringBuilder(method), new StringBuilder(body),
                                                     new StringBuilder(date), new StringBuilder(path), signaturePtr);
            string signature_str = Marshal.PtrToStringAnsi(signaturePtr);
#endif
            if (signature_str != null && signature_str.Length >= SIGNATURE_LENGTH)
            {
                string signature = signature_str.ToString().Substring(0, SIGNATURE_LENGTH);
                return(signature);
            }
            else
            {
                Debug.Log("signature=" + signature_str);
                return("");
            }
        }
Пример #22
0
        public static Matrix4x4 GetAlternatePortraitProjectionMatrix()
        {
            //Debug.Log("portrait hfov=" + Constants.CAM_LARGE_FOV + " vfov=" + Constants.CAM_SMALL_FOV);

            float[] mat_data = new float[16];
            PikkartARCore.GetProjectionMatrix(mat_data);

            /*alternateLandscapeProjectionMatrix.m00 = mat_data[0];
             * alternateLandscapeProjectionMatrix.m01 = mat_data[1];
             * alternateLandscapeProjectionMatrix.m02 = mat_data[2];
             * alternateLandscapeProjectionMatrix.m03 = mat_data[3];
             *
             * alternateLandscapeProjectionMatrix.m10 = mat_data[4];
             * alternateLandscapeProjectionMatrix.m11 = mat_data[5];
             * alternateLandscapeProjectionMatrix.m12 = mat_data[6];
             * alternateLandscapeProjectionMatrix.m13 = mat_data[7];
             *
             * alternateLandscapeProjectionMatrix.m20 = mat_data[8];
             * alternateLandscapeProjectionMatrix.m21 = mat_data[9];
             * alternateLandscapeProjectionMatrix.m22 = mat_data[10];
             * alternateLandscapeProjectionMatrix.m23 = mat_data[11];
             *
             * alternateLandscapeProjectionMatrix.m30 = mat_data[12];
             * alternateLandscapeProjectionMatrix.m31 = mat_data[13];
             * alternateLandscapeProjectionMatrix.m32 = mat_data[14];
             * alternateLandscapeProjectionMatrix.m33 = mat_data[15];*/
            double v    = 1.0 / (double)(mat_data[0]);
            double at   = Math.Atan(v);
            double hfov = 2.0 * at * 57.2958;

            alternatePortraitProjectionMatrix = Matrix4x4.Perspective(
                (float)hfov,
                ScreenUtilities.GetPortraitAspectRatio(),
                Constants.NEAR_CLIP_PLANE,
                Constants.FAR_CLIP_PLANE);

            return(alternatePortraitProjectionMatrix);
        }
Пример #23
0
        public bool LoadSavedCameraParams()
        {
            bool ret = PlayerPrefs.HasKey("cam_param1") &&
                       PlayerPrefs.HasKey("cam_param2") &&
                       PlayerPrefs.HasKey("cam_param3") &&
                       PlayerPrefs.HasKey("cam_param4");

            if (ret)
            {
                float[] cam_params = new float[4];
                cam_params[0] = PlayerPrefs.GetFloat("cam_param1");
                cam_params[1] = PlayerPrefs.GetFloat("cam_param2");
                cam_params[2] = PlayerPrefs.GetFloat("cam_param3");
                cam_params[3] = PlayerPrefs.GetFloat("cam_param4");
                PikkartARCore.SetProjectionMatrix2(cam_params[0],
                                                   cam_params[1],
                                                   cam_params[2],
                                                   cam_params[3]);

                _pikk_camera.SetCameraParameters(cam_params[0], cam_params[1], cam_params[2], cam_params[3]);
            }
            return(ret);
        }
Пример #24
0
        /// <summary>
        /// Locals the marker found. Called by PikkartARCamera instance.
        /// </summary>
        /// <param name="markerId">Marker identifier.</param>
        public void LocalMarkerFound(string markerId, int marker_internal_id)
        {
            stopTimers();

            if (_markerId == "" || _markerId != markerId)
            {
                _currentMarker = new MarkerInfo(markerId, marker_internal_id, (double)PikkartARCore.GetMarkerWidthInternalID(marker_internal_id),
                                                (double)PikkartARCore.GetMarkerHeightInternalID(marker_internal_id));

                _dataProvider.ExecuteGetMarkerRequest(markerId, false, true);

                if (_currentRecognitionOptions.getMode() == RecognitionOptions.RecognitionMode.TAP_TO_SCAN)
                {
                    ForceMarkerSearch(markerId);
                    _recognitionRunning = false;
                }
            }
            else
            {
                _currentMarker.setARLogoCode(-1);
                _markerObjectListener.OnMarkerFound(_currentMarker);
                _recognitionListener.MarkerFound(_currentMarker);
            }
        }
        /// <summary>
        /// Deletes obsolete local data.
        /// </summary>
        /// <param name="cacheMilliseconds">Cache milliseconds.</param>
        /// <param name="isRecognitionManagerRunning">is recognition manager running.</param>
        public void DeleteObsoleteLocalData(bool deleteFilesNotInSqlite, bool isRecognitionManagerRunning)
        {
            List <string> markersFileNames = new List <string>();
            List <Marker> dbMarkers        = GetMarkersList();
            string        markersPath      = RecognitionManager.GetAppDataPath() + "markers";

            if (!Directory.Exists(markersPath))
            {
                Directory.CreateDirectory(markersPath);
            }

            if (dbMarkers.Count > 0)
            {
                foreach (Marker marker in dbMarkers)
                {
                    string   markerId       = marker.markerId;
                    string   markerFileName = markerId + ".dat";
                    DateTime?publishedTo    = marker.publishedTo;

                    markersFileNames.Add(markerFileName);

                    if (publishedTo == null)
                    {
                        continue;
                    }

                    if (publishedTo.Value.CompareTo(DateTime.Now.ToUniversalTime()) < 0)
                    {
                        if (isRecognitionManagerRunning)
                        {
#if UNITY_EDITOR_OSX || (UNITY_IOS && !UNITY_EDITOR_WIN)
                            PikkartARCore.DeleteLocalMarker(markerId, true);
#else
                            PikkartARCore.DeleteLocalMarker(new StringBuilder(markerId), true);
#endif
                        }
                        else
                        {
                            string markerFilePath = markersPath + "/" + markerFileName;
                            if (!Directory.Exists(markersPath))
                            {
                                Directory.CreateDirectory(markersPath);
                            }
                            if (File.Exists(markerFilePath))
                            {
                                File.Delete(markerFilePath);
                            }
                        }
                    }
                }
            }

            if (deleteFilesNotInSqlite)
            {
                var        info      = new DirectoryInfo(markersPath);
                FileInfo[] filesInfo = info.GetFiles();

                foreach (FileInfo fileInfo in filesInfo)
                {
                    if (fileInfo.Name.Contains(".dat") && !markersFileNames.Contains(fileInfo.Name))
                    {
                        fileInfo.Delete();
                    }
                }
            }

            dbu.DeleteObsoleteMarkers();
        }
        private IEnumerator CameraLoop()
        {
            camera_coroutine_running = true;
            while (camera_coroutine_running)
            {
                camera_loop_running = true;
                if (_webcam != null && _webcam.IsUpdated())
                {
                    //Debug.Log("webcam Pikkart Camera Loop camera updated");
                    PikkartARCore.SetCameraOriginalSize(Constants.CAMERA_REQUESTED_WIDTH, Constants.CAMERA_REQUESTED_HEIGHT);

                    PikkartARCore.CopyNewFrame(_webcam.GetDataAsIntPtr(), _webcam.GetCameraWidth(), _webcam.GetCameraHeight());
                    //PikkartARCore.CopyNewFrame32(_webcam.GetDataAsColor32(), Constants.CAMERA_REQUESTED_WIDTH, Constants.CAMERA_REQUESTED_HEIGHT);
                    //_webcam.UploadCameraDataAsColor32();

                    bool found_something = PikkartARCore.ImageProcessing();

                    if (Screen.currentResolution.width > Screen.currentResolution.height)
                    {
                        if (cam != null)
                        {
                            cam.projectionMatrix = MatrixUtils.GetAlternateLandscapeProjectionMatrix();
                        }
                    }
                    else
                    {
                        if (cam != null)
                        {
                            cam.projectionMatrix = MatrixUtils.GetAlternatePortraitProjectionMatrix();
                        }
                    }

                    String markerFound  = "";
                    int    logo_payload = -1;

                    int numTrackedMarkers = 0;
                    if (found_something)
                    {
                        numTrackedMarkers = PikkartARCore.GetTrackedInternalIDs(trackedMarkersData.GetArray());
                    }
                    //Debug.Log("markerFound=numTrackedMarkers " + numTrackedMarkers);
                    if (numTrackedMarkers > 0)
                    {
                        int size = PikkartARCore.GetMarkerNameFromInternalIDs(trackedMarkersData.GetArray()[0], markerFoundPtr);
                        markerFound = Marshal.PtrToStringAnsi(markerFoundPtr, size - 1);
                        if (IsSeethroughDevice)
                        {
                            size = PikkartARCore.GetMarkerPoseInternalID_WithPrediction(trackedMarkersData.GetArray()[0], PredictionFrames, viewMatrixData.GetArray());
                        }
                        else
                        {
                            size = PikkartARCore.GetMarkerPoseInternalID(trackedMarkersData.GetArray()[0], viewMatrixData.GetArray());
                        }
                        logo_payload = PikkartARCore.MarkerHasLogoInternalId(trackedMarkersData.GetArray()[0]);
                        if (logo_payload > 0)
                        {
                            recognitionManager.ARLogoFound(trackedMarkersData.GetArray()[0], logo_payload);
                        }
                        else
                        {
                            logo_payload = -1;
                        }
                    }
                    else
                    {
                        markerFound = "";
                    }

                    if (markerFound == "")
                    {
                        if (recognitionManager != null)
                        {
                            if (recognitionManager.IsRecognitionRunning())
                            {
                                recognitionManager.LocalMarkerNotFound();
                            }
                        }
                        viewMatrix = Matrix4x4.identity;
                    }
                    else if (markerFound != "")
                    {
                        if (IsSeethroughDevice)
                        {
                            if (previousMarkerFound != "" && markerFound != previousMarkerFound)
                            {
                                recognitionManager.MarkerTrackingLost(previousMarkerFound);
                            }
                        }
                        if (recognitionManager != null && previousMarkerFound == "")
                        {
                            recognitionManager.LocalMarkerFound(markerFound, trackedMarkersData.GetArray()[0]);
                        }
                        viewMatrix = MatrixUtils.GetViewMatrixFromArray(viewMatrixData.GetArray());

                        viewMatrix = MatrixUtils.GetRotationMatrixForOrientation() * viewMatrix;
                    }

                    if (!IsSeethroughDevice)
                    {
                        if (previousMarkerFound != "" && markerFound == "")
                        {
                            recognitionManager.MarkerTrackingLost(previousMarkerFound);
                        }
                    }
                    previousMarkerFound = markerFound;

                    MarkerUpdate();

#if UNITY_EDITOR
                    _webcam.UpdateVisibleFrame();
#else
                    if (!IsSeethroughDevice)
                    {
                        GL.IssuePluginEvent(PikkartARCore.GetRenderEventFunc(), 666);
                    }
#endif

                    //Debug.Log("markerFound=" + markerFound);
                }
                //yield return new WaitUntil(() => _webcam!=null && _webcam.IsUpdated() == true);
                //yield return null;
                yield return(new WaitForEndOfFrame());
            }
            camera_loop_running = false;
        }
 protected void StopRecognition()
 {
     PikkartARCore.StopRecognition();
 }
        /// <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();
            }
        }
Пример #29
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PikkartAR.RecognitionManager"/> class.
        /// </summary>
        /// <param name="width">Frame Width.</param>
        /// <param name="height">Frame Height.</param>
        /// <param name="localRecognitionService">Object that implements the communication interface.</param>
        public RecognitionManager(IMarkerObjectListener markerObjectListener)
        {
            _markerObjectListener = markerObjectListener;
            _recognitionRunning   = false;

#if UNITY_ANDROID && !UNITY_EDITOR
            AndroidJavaClass  jc           = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject context      = jc.GetStatic <AndroidJavaObject>("currentActivity");
            AndroidJavaObject assetManager = context.Call <AndroidJavaObject>("getAssets");
#endif
            _deviceId = RecognitionManager.GetDeviceId();

            // Native Recognition Service Initialization
            if (!_nativeWrapperInitialized)
            {
                int res = PikkartARCore.InitRecognition(
#if UNITY_ANDROID && !UNITY_EDITOR
                    assetManager.GetRawObject(),
#endif
                    _localMarkerNotFoundEventMinIntervalMillisecs,
#if UNITY_EDITOR_OSX || (UNITY_IOS && !UNITY_EDITOR_WIN)
                    GetAppDataPath(),
#else
                    new StringBuilder(GetAppDataPath()),
#endif
#if UNITY_EDITOR_WIN
                    new StringBuilder(Application.streamingAssetsPath),
    #if UNITY_5_6_OR_NEWER
                    new StringBuilder(PlayerSettings.applicationIdentifier),
    #else
                    new StringBuilder(PlayerSettings.bundleIdentifier),
    #endif
#elif UNITY_EDITOR_OSX
                    Application.streamingAssetsPath,
    #if UNITY_5_6_OR_NEWER
                    PlayerSettings.applicationIdentifier,
    #else
                    PlayerSettings.bundleIdentifier,
    #endif
#endif
                    Constants.PROCESS_WIDTH,
                    Constants.PROCESS_HEIGHT,
                    ScreenUtilities.GetScreenInches(),
                    Constants.CAMERA_REQUESTED_WIDTH,
                    Constants.CAMERA_REQUESTED_HEIGHT,
                    false);

                if (res > 0)
                {
                    _licenceChecked = true;
                }
                else
                {
                    _licenceChecked = false;
                }
                if (res == 0)
                {
#if (UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR
                    if (MonoBehaviour.FindObjectOfType <LicenseMessage>() != null)
                    {
                        MonoBehaviour.FindObjectOfType <LicenseMessage>().gameObject.SetActive(true);
                    }
                    if (MonoBehaviour.FindObjectOfType <TrialMessage>() != null)
                    {
                        MonoBehaviour.FindObjectOfType <TrialMessage>().gameObject.SetActive(false);
                    }
#elif UNITY_EDITOR
                    if (MonoBehaviour.FindObjectOfType <TrialMessage>() != null)
                    {
                        MonoBehaviour.FindObjectOfType <TrialMessage>().gameObject.SetActive(false);
                    }
                    if (MonoBehaviour.FindObjectOfType <LicenseMessage>() != null)
                    {
                        MonoBehaviour.FindObjectOfType <LicenseMessage>().gameObject.SetActive(false);
                    }
                    if (EditorUtility.DisplayDialog("Licence error!",
                                                    "You cannot use our sdk without a valid licence UNLESS you are in a trial!\n" +
                                                    "Please register to developer.pikkart.com to obtain your own licence or set your application identifier to 'com.pikkart.trial' to evaluate our SDK.", "Ok"))
                    {
                        EditorApplication.isPlaying = false;
                    }
#endif
                }
                else if (res == 1)
                {
#if (UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR
                    if (MonoBehaviour.FindObjectOfType <TrialMessage>())
                    {
                        MonoBehaviour.FindObjectOfType <TrialMessage>().gameObject.SetActive(true);
                    }
                    if (MonoBehaviour.FindObjectOfType <LicenseMessage>())
                    {
                        MonoBehaviour.FindObjectOfType <LicenseMessage>().gameObject.SetActive(false);
                    }
#elif UNITY_EDITOR
                    if (MonoBehaviour.FindObjectOfType <TrialMessage>())
                    {
                        MonoBehaviour.FindObjectOfType <TrialMessage>().gameObject.SetActive(false);
                    }
                    if (MonoBehaviour.FindObjectOfType <LicenseMessage>())
                    {
                        MonoBehaviour.FindObjectOfType <LicenseMessage>().gameObject.SetActive(false);
                    }
                    if (EditorUtility.DisplayDialog("No valid license",
                                                    "No valid license or running as com.pikkart.trial, press Ok to run in trial mode", "Ok"))
                    {
                        EditorApplication.isPlaying = true;
                    }
#endif
                }
                else
                {
                    if (MonoBehaviour.FindObjectOfType <TrialMessage>())
                    {
                        MonoBehaviour.FindObjectOfType <TrialMessage>().gameObject.SetActive(false);
                    }
                    if (MonoBehaviour.FindObjectOfType <LicenseMessage>())
                    {
                        MonoBehaviour.FindObjectOfType <LicenseMessage>().gameObject.SetActive(false);
                    }
                }

                PikkartARCore.SetProjectionMatrix(Constants.CAM_LARGE_FOV, Constants.CAM_SMALL_FOV);

                _nativeWrapperInitialized = true;
                //_nativeArray = Marshal.AllocHGlobal(Constants.BASE_RES_WIDTH * Constants.BASE_RES_HEIGHT * 3);
            }
            else
            {
                if (MonoBehaviour.FindObjectOfType <TrialMessage>())
                {
                    MonoBehaviour.FindObjectOfType <TrialMessage>().gameObject.SetActive(false);
                }
                if (MonoBehaviour.FindObjectOfType <LicenseMessage>())
                {
                    MonoBehaviour.FindObjectOfType <LicenseMessage>().gameObject.SetActive(false);
                }
            }


            _dataProvider = new RecognitionDataProvider(null, this, _deviceId);
        }
Пример #30
0
 public static void StopDiscover()
 {
     PikkartARCore.EnableDiscover(false);
 }