private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            _faceRepository        = new FaceRepository("Faces");
            _faceDetector          = new FaceDetector("Assets\\haarcascade_frontalface_alt_tree.xml");
            _faceRecognizer        = new FaceRecognizer();
            _motionDetectorService = new MotionDetectorPublisher();

            _facePipeline = new FacePipeline(_faceDetector, _faceRecognizer, _faceRepository);
            _facePipeline.Prepare();

            _frameAggregator = new FrameAggregator();

            var mirrorClient = new MirrorClient();

            _mirrorUserStateMachine = new MirrorStateMachine(mirrorClient);

            Mediator.Default.Subscribe <MirrorUserChanged>(this, msg => {
                ChangeUI(() => Detected.Text = msg.Username);
            });

            var turnMonitorOnOff = new TurnMonitorOnOffAction();

            Task.Run(async() => await turnMonitorOnOff.Start());
            Mediator.Default.Subscribe <MotionDetected>(turnMonitorOnOff, turnMonitorOnOff.Proccess);

            Task.Factory.StartNew(async() => {
                try {
                    if (UseRealSense)
                    {
                        await StartRealSense();
                    }
                    else
                    {
                        await StartCamera();
                    }
                }
                catch (Exception ex) {
                    Log.Logger.Error(ex, "On StartCamera");
                    if (ex.InnerException != null)
                    {
                        Log.Logger.Error(ex.InnerException, "Inner exception");
                    }
                }
            }, TaskCreationOptions.LongRunning);
        }
 public MirrorService(string mirrorUrl)
 {
     _client = new MirrorClient(mirrorUrl);
 }