Пример #1
0
        public void OpenCamera(bool isBack)
        {
            if (easyarCamera == null)
            {
                return;
            }
            easyarCamera.close();
            easyarCamera.Dispose();
            easyarCamera = CameraDeviceSelector.createCameraDevice(CameraDevicePreference.PreferObjectSensing);
            easyarCamera.setFocusMode(CameraFocusMode);
            bool openResult = false;

            if (isBack)
            {
                openResult = easyarCamera.openWithType(CameraDeviceType.Back);
                Debug.Log("[EasyAR] open camera back result " + openResult);
                if (openResult)
                {
                    GL.invertCulling = false;
                }
            }
            else
            {
                openResult = easyarCamera.openWithType(CameraDeviceType.Front);
                Debug.Log("[EasyAR] open camera front result " + openResult);
                if (openResult)
                {
                    GL.invertCulling = true;
                }
            }

            easyarCamera.setSize(new Vec2I((int)CameraSize.x, (int)CameraSize.y));
            easyarCamera.start();
            easyarCamera.inputFrameSource().connect(iFrameThrottler.input());
        }
Пример #2
0
        /// <summary>
        /// Initialize the EasyAR component graph.
        /// See https://help.easyar.com/EasyAR%20Sense/v3/Getting%20Started/Getting-Started-with-EasyAR.html
        /// </summary>
        void CreateEasyAr()
        {
            camera          = CameraDeviceSelector.createCameraDevice(CameraDevicePreference.PreferObjectSensing);
            throttler       = InputFrameThrottler.create();
            inputFrameFork  = InputFrameFork.create(2);
            join            = OutputFrameJoin.create(2);
            oFrameBuffer    = OutputFrameBuffer.create();
            i2OAdapter      = InputFrameToOutputFrameAdapter.create();
            i2FAdapter      = InputFrameToFeedbackFrameAdapter.create();
            outputFrameFork = OutputFrameFork.create(2);

            bool status = camera.openWithPreferredType(CameraDeviceType.Back);

            camera.setSize(new Vec2I(1280, 720));
            camera.setFocusMode(CameraDeviceFocusMode.Continousauto);
            camera.setBufferCapacity(5 + 7);
            if (!status)
            {
                return;
            }
            ImageTracker tracker = ImageTracker.create();

            LoadFromImage(tracker, "almondblossoms.jpg", "almondblossoms");
            LoadFromImage(tracker, "irises.jpg", "irises");
            LoadFromImage(tracker, "starrynight.jpg", "starrynight");
            tracker.setSimultaneousNum(6);
            trackers.Add(tracker);

            feedbackFrameFork = FeedbackFrameFork.create(trackers.Count);

            camera.inputFrameSource().connect(throttler.input());
            throttler.output().connect(inputFrameFork.input());
            inputFrameFork.output(0).connect(i2OAdapter.input());
            i2OAdapter.output().connect(join.input(0));

            inputFrameFork.output(1).connect(i2FAdapter.input());
            i2FAdapter.output().connect(feedbackFrameFork.input());
            int k = 0;

            foreach (ImageTracker _tracker in trackers)
            {
                feedbackFrameFork.output(k).connect(_tracker.feedbackFrameSink());
                _tracker.outputFrameSource().connect(join.input(k + 1));
                k++;
            }

            join.output().connect(outputFrameFork.input());
            outputFrameFork.output(0).connect(oFrameBuffer.input());
            outputFrameFork.output(1).connect(i2FAdapter.sideInput());
            oFrameBuffer.signalOutput().connect(throttler.signalInput());

            arComponent = fgScene.CreateComponent <EasyARComponent>();
            arComponent.ARFrameUpdated   += OnARFrameUpdated;
            arComponent.OutputFrameBuffer = oFrameBuffer;
        }
Пример #3
0
        void Init()
        {
            initialized = true;

            iFrameThrottler = InputFrameThrottler.create();
            oFrameBuffer    = OutputFrameBuffer.create();
            i2fAdapter      = InputFrameToFeedbackFrameAdapter.create();
            inputFrameFork  = InputFrameFork.create(ForkOutputNum);
            i2OAdapter      = InputFrameToOutputFrameAdapter.create();
            oFrameJoin      = OutputFrameJoin.create(JoinNum);

            if (FrameSourceType == FrameSource.easyar)
            {
                if (CameraDevice.isAvailable())
                {
                    Debug.Log("[EasyAR] use ezar camera device");
                    easyarCamera = CameraDeviceSelector.createCameraDevice(EasyarCameraPrefer);
                    var openResult = false;
                    if (UseSecondCamera)
                    {
                        openResult = easyarCamera.openWithIndex(1);
                    }
                    else
                    {
                        openResult = easyarCamera.openWithType(CameraDeviceType.Default);
                    }
                    easyarCamera.setFocusMode(CameraFocusMode);

                    if (!openResult)
                    {
                        Debug.Log("[EasyAR] open camera failed");
                        initialized = false;
                        return;
                    }
                    easyarCamera.setSize(new Vec2I((int)CameraSize.x, (int)CameraSize.y));
                    easyarCamera.inputFrameSource().connect(iFrameThrottler.input());
                    easyarCamera.start();
                }
                else
                {
                    initialized = false;
                    Debug.Log("[EasyAR] ezar camera device can not work");
                    return;
                }
            }

            iFrameThrottler.output().connect(inputFrameFork.input());
            inputFrameFork.output(0).connect(i2OAdapter.input());
            i2OAdapter.output().connect(oFrameJoin.input(0));
            outputFrameFork = OutputFrameFork.create(1);

            int index = 0;

            if (ImgTracker != null)
            {
                index++;
                outputFrameFork = OutputFrameFork.create(2);
                inputFrameFork.output(index).connect(i2fAdapter.input());
                i2fAdapter.output().connect(ImgTracker.Input());
                ImgTracker.Output().connect(oFrameJoin.input(index));
                outputFrameFork.output(1).connect(i2fAdapter.sideInput());
            }

            if (SfTracker != null)
            {
                index++;
                inputFrameFork.output(index).connect(SfTracker.Input());
                SfTracker.Output().connect(oFrameJoin.input(index));
            }

            if (CloudImageRecognizer != null)
            {
                index++;
                inputFrameFork.output(index).connect(CloudImageRecognizer.Input());
            }

            oFrameJoin.output().connect(outputFrameFork.input());
            outputFrameFork.output(0).connect(oFrameBuffer.input());
            oFrameBuffer.signalOutput().connect(iFrameThrottler.signalInput());

            args = new ARSessionUpdateEventArgs();
        }
Пример #4
0
        public override void Open()
        {
            willOpen = true;
            CameraDevice.requestPermissions(EasyARController.Scheduler, (Action <PermissionStatus, string>)((status, msg) =>
            {
                if (!willOpen)
                {
                    return;
                }
                if (status != PermissionStatus.Granted)
                {
                    throw new UIPopupException("Camera permission not granted");
                }

                Close();
                Device = CameraDeviceSelector.createCameraDevice(CameraPreference);
                if (DeviceCreated != null)
                {
                    DeviceCreated();
                }

                bool openResult = false;
                switch (CameraOpenMethod)
                {
                case CameraDeviceOpenMethod.DeviceType:
                    openResult = Device.openWithPreferredType(CameraType);
                    break;

                case CameraDeviceOpenMethod.DeviceIndex:
                    openResult = Device.openWithIndex(CameraIndex);
                    break;

                default:
                    break;
                }
                if (!openResult)
                {
                    Debug.LogError("Camera open failed");
                    Device.Dispose();
                    Device = null;
                    return;
                }

                Device.setFocusMode(FocusMode);
                Device.setSize(new Vec2I((int)CameraSize.x, (int)CameraSize.y));
                if (parameters != null)
                {
                    Device.setCameraParameters(parameters);
                }
                if (bufferCapacity != 0)
                {
                    Device.setBufferCapacity(bufferCapacity);
                }

                if (sink != null)
                {
                    Device.inputFrameSource().connect(sink);
                }

                if (DeviceOpened != null)
                {
                    DeviceOpened();
                }

                if (enabled)
                {
                    OnEnable();
                }
            }));
        }