Example #1
0
        public MainWindow()
        {
            InitializeComponent();

            var cameraSelection = new CameraSelection();

            if (cameraSelection.SelectedCamera == null)
            {
                cameraSelection.ShowDialog();
            }

            if (cameraSelection.SelectedCamera != null)
            {
                _processDataFlow = new ImageProcessDataflow(cameraSelection.SelectedCamera, cameraSelection.SelectedCamera.SelectedResolution.Item1,
                                                            cameraSelection.SelectedCamera.SelectedResolution.Item2, new IPEndPoint(IPAddress.Loopback, Port), tokenSrc.Token);

                var webCamImg = new OverlayImage(_processDataFlow, tokenSrc.Token);
                webCamImg.SetValue(Grid.RowProperty, 1);
                webCamImg.SetValue(Grid.ColumnProperty, 1);
                MainGrid.Children.Add(webCamImg);

                var updateLabelsBlock = new ActionBlock <DetectedData>(UpdateLabelsWithData, new ExecutionDataflowBlockOptions
                {
                    CancellationToken = tokenSrc.Token,
                    TaskScheduler     = TaskScheduler.FromCurrentSynchronizationContext()
                });

                _processDataFlow.DetectedDataBroadcast.LinkTo(updateLabelsBlock);
            }
            else
            {
                cameraSelection.Close();
                Close();
            }
        }
Example #2
0
        public OverlayImage(ImageProcessDataflow dataFlow, CancellationToken token)
        {
            _dataFlow = dataFlow;
            var cleanBlock  = new ActionBlock <LandmarkData>(_ => Clear());
            var bitmapBlock = new ActionBlock <WriteableBitmap>(bitmap => Source = bitmap, new ExecutionDataflowBlockOptions
            {
                CancellationToken = token,
                TaskScheduler     = TaskScheduler.FromCurrentSynchronizationContext()
            });
            var detectionBlock = new ActionBlock <DetectedData>(DetectedData);

            dataFlow.LandmarkDataBroadcast.LinkTo(cleanBlock, l => !l.DetectionSucceeded);
            dataFlow.BitmapBroadcast.LinkTo(bitmapBlock);
            dataFlow.DetectedDataBroadcast.LinkTo(detectionBlock);

            _pixelsPerDip = VisualTreeHelper.GetDpi(this).PixelsPerDip;
            InitializeComponent();
            OverlayLines            = new List <Tuple <Point, Point> >();
            OverlayPoints           = new List <Point>();
            OverlayPointsVisibility = new List <bool>();
            OverlayEyePoints        = new List <Point>();
            GazeLines = new List <Tuple <Point, Point> >();
        }