Пример #1
0
        public LocalCameraSource(ILogger <LocalCameraSource> logger, KBWrapper.IKbWrapper kb)
        {
            _kb = kb;
            // Engagment event received, start or stop the capture
            kb.OnMessage += (sender, e) => {
                if (e.Value)
                {
                    this.Start();
                }
                else
                {
                    this.Stop();
                }
            };

            _logger = logger;
            _logger.LogInformation("Local camera source loaded.");

            IsAvailable = true;

            // Starts the timer
            _timer = new Timer(1000.0 / _framerate)
            {
                AutoReset = true, Enabled = false
            };
            _timer.Elapsed += OnTimerTick;
        }
Пример #2
0
        private short _frameStopTalking = 0;   //number of frame without talking


        public KinectVideoSource(ILogger <KinectVideoSource> logger, IAudioSource audioSource, KBWrapper.IKbWrapper kb)
        {
            _logger = logger;
            _logger.LogInformation("Kinect video source loaded.");
            _audioSource = audioSource;
            _KB          = kb;

            _kinect = KinectSensor.GetDefault();
            //kinect availability callback
            _kinect.IsAvailableChanged += Sensor_IsAvailableChanged;
            //frame of color camera and bodies callback
            _multiSourceFrameReader = _kinect.OpenMultiSourceFrameReader(FrameSourceTypes.Color);

            //features needed of a face
            FaceFrameFeatures faceFrameFeatures = FaceFrameFeatures.BoundingBoxInColorSpace | FaceFrameFeatures.MouthMoved | FaceFrameFeatures.MouthOpen;

            //BodyCount == 6, we need arrays for detect up to 6 faces at time
            _faceFrameSources = new FaceFrameSource[_kinect.BodyFrameSource.BodyCount];
            _faceFrameReaders = new FaceFrameReader[_kinect.BodyFrameSource.BodyCount];
            _faceFrameResults = new FaceFrameResult[_kinect.BodyFrameSource.BodyCount];

            _bodies          = new Body[_kinect.BodyFrameSource.BodyCount];
            _bodyFrameReader = _kinect.BodyFrameSource.OpenReader();


            for (int i = 0; i < _kinect.BodyFrameSource.BodyCount; i++)
            {
                _faceFrameSources[i] = new FaceFrameSource(_kinect, 0, faceFrameFeatures);
                _faceFrameReaders[i] = _faceFrameSources[i].OpenReader();
            }
            if (!_kinect.IsOpen)
            {
                _kinect.Open();
            }

            if (!float.TryParse(ConfigurationManager.AppSettings["Framerate"], out _framerate))
            {
                _framerate = 20f;
            }

            _timer = new System.Timers.Timer(1000.0 / _framerate)
            {
                AutoReset = true, Enabled = false
            };
            _timer.Elapsed += OnTimerTick;
        }
Пример #3
0
        private static void KBWrapperInit(KBWrapper.IKbWrapper kb, ILogger logger)
        {
            bool isConnected = false;
            int  backoff     = 2;

            kb.OnOpen += (sender, e) => {
                isConnected = true;
                logger.LogInformation("Wrapper: onOpen");
            };

            kb.OnClose += (sender, e) => {
                isConnected = false;
                while (!isConnected)
                {
                    logger.LogError("Kb connection closed, try to reconnect.");
                    backoff *= backoff;
                    if (backoff > 30)
                    {
                        backoff = 30;
                    }
                    Thread.Sleep(backoff * 1000);
                    kb.Connect();
                }
            };

            kb.OnConnected += (sender, e) => {
                logger.LogTrace("Wrapper: OnConnected");
            };

            kb.OnMessage += (sender, e) => {
                logger.LogTrace("Wrapper: onMessage: " + e.Value);
            };

            kb.OnError += (sender, e) => {
                logger.LogTrace("Wrapper: onError " + e.message);
            };
            int i = 0;

            kb.Connect();
        }