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; }
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; }
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(); }