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