Exemplo n.º 1
0
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            CursorViewModel.LoadSettings();

            CursorViewModel.Create_Task();

            Closed += MainWindow_Closed;
        }
        /// <summary>
        /// This method must be called after CursorViewModel and List of ImageInformationSet are constructed.
        /// </summary>
        public void InitializeOnceAtStartup(CursorViewModel cursorViewModel, IList <ImageInformationSet> cursorImageInformationSetList)
        {
            Trace.Assert(cursorViewModel != null);
            Trace.Assert(cursorImageInformationSetList != null);

            refToCursorViewModel          = cursorViewModel;
            CursorImageInformationSetList = cursorImageInformationSetList;

            try
            {
                imagesDict = new Dictionary <ImageInformation, CursorImageWindowsFormsBitmap>();
                foreach (var cursorImageInformationSet in CursorImageInformationSetList)
                {
                    foreach (var cursorImageInformation in cursorImageInformationSet.ImageInformationList)
                    {
                        imagesDict[cursorImageInformation] = new CursorImageWindowsFormsBitmap();
                        var fullPath = Path.Combine(cursorImageInformationSet.FolderPath, cursorImageInformation.FileRelativePath);
                        var bmp      = (Bitmap)Bitmap.FromFile(fullPath);
                        imagesDict[cursorImageInformation].CursorBitmap = bmp;
                        imagesDict[cursorImageInformation].CursorHBitmapForUiAccessTrue = bmp.GetHbitmap(Color.FromArgb(0));
                    }
                }
            }
            catch (Exception ex)
            {
                if (ApplicationCommonSettings.IsDebugging)
                {
                    Debugger.Break();
                    MessageBox.Show(ex.Message);
                    MessageBox.Show("Application cannot find some image resources.");
                }
                throw;
            }

            setWindowPosition = new Win32SetWindowPosition(this.Handle);

            refToCursorViewModel.IsVisibleChanged += refToCursorViewModel_IsVisibleChanged;
            refToCursorViewModel.StateUpdated     += refToCursorViewModel_StateUpdated;

            // TODO: MUSTDO: Update these values when image set is updated.
            Width  = 256;
            Height = 256;
        }
 private void Window_Closed(object sender, System.EventArgs e)
 {
     CursorViewModel.Quit();
 }
 private void DefaultButton_Click(object sender, RoutedEventArgs e)
 {
     CursorViewModel.ResetToDefault();
 }
 private void Window_Loaded(object sender, RoutedEventArgs e)
 {
     CursorViewModel.LoadSettings();
 }
Exemplo n.º 6
0
        public Form1()
        {
            InitializeComponent();

            // It shows some debugging information.
            ApplicationCommonSettings.IsDebugging = true;


            CameraViewImagePictureBox = new PictureBox()
            {
                Dock = DockStyle.Fill, SizeMode = PictureBoxSizeMode.CenterImage
            };
            this.Controls.Add(CameraViewImagePictureBox);
            this.Size = new Size(800, 600);


            Device = EgsDevice.GetDefaultEgsDevice();
            Device.Settings.FaceDetectionMethod.Value = Egs.PropertyTypes.FaceDetectionMethods.DefaultProcessOnEgsDevice;
            Device.Settings.IsToDetectFaces.Value     = true;
            Device.Settings.IsToDetectHands.Value     = true;
#if DEBUG
            Device.Settings.IsToDrawBordersOnCameraViewImageByDevice.Value = true;
            Device.Settings.CameraViewImageSourceBitmapSize.Value          = Egs.PropertyTypes.CameraViewImageSourceBitmapSizes.Size_640x480;
#else
            Device.Settings.IsToDrawBordersOnCameraViewImageByDevice.Value = false;
            Device.Settings.CameraViewImageSourceBitmapSize.Value          = Egs.PropertyTypes.CameraViewImageSourceBitmapSizes.Size_384x240;
#endif


            // CursorForm objects observe CursorViewModel objects in the OnePersonBothHandsViewModel object, and draw the "Gesture Cursor" on desktop.
            {
                CursorViewModels    = new CursorViewModel[Device.TrackableHandsCountMaximum];
                CursorViewModels[0] = new CursorViewModel();
                CursorViewModels[1] = new CursorViewModel();
                CursorViews         = new CursorForm[Device.TrackableHandsCountMaximum];
                CursorViews[0]      = new CursorForm();
                CursorViews[1]      = new CursorForm();
                var imageSetListRight = new List <ImageInformationSet>();
                var imageSetListLeft  = new List <ImageInformationSet>();
                imageSetListRight.Add(new ImageInformationSet()
                {
                    ImageSetIndex = 0, FolderPath = "Resources\\", SampleImageFileRelativePath = "Resources\\Sample.png"
                });
                imageSetListRight[0].AddImage((int)CursorImageIndexLabels.OpenHand, "Right_OpenHand.png");
                imageSetListRight[0].AddImage((int)CursorImageIndexLabels.CloseHand, "Right_CloseHand.png");
                imageSetListLeft.Add(new ImageInformationSet()
                {
                    ImageSetIndex = 0, FolderPath = "Resources\\", SampleImageFileRelativePath = "Resources\\Sample.png"
                });
                imageSetListLeft[0].AddImage((int)CursorImageIndexLabels.OpenHand, "Left_OpenHand.png");
                imageSetListLeft[0].AddImage((int)CursorImageIndexLabels.CloseHand, "Left_CloseHand.png");
                CursorViews[0].InitializeOnceAtStartup(CursorViewModels[0], imageSetListRight);
                CursorViews[1].InitializeOnceAtStartup(CursorViewModels[1], imageSetListLeft);
                Device.EgsGestureHidReport.ReportUpdated += EgsGestureHidReport_ReportUpdated;
            }

            // You can make your original camera view.
            Device.CameraViewImageSourceBitmapCapture.CameraViewImageSourceBitmapChanged += delegate
            {
                if (CameraViewImagePictureBox.Image != null)
                {
                    CameraViewImagePictureBox.Image.Dispose();
                }
                // Bitmap.Clone() is shallow copy method.
                var bmp = (System.Drawing.Bitmap)Device.CameraViewImageSourceBitmapCapture.CameraViewImageSourceBitmap.Clone();
                using (var g = Graphics.FromImage(bmp))
                {
                    if (Device.EgsGestureHidReport.IsStandingBy)
                    {
                    }
                    else if (Device.EgsGestureHidReport.IsFaceDetecting)
                    {
                        g.DrawRectangle(Pens.LightCyan, Device.EgsGestureHidReport.FaceDetectionArea);
                        for (int i = 0; i < Device.EgsGestureHidReport.DetectedFacesCount; i++)
                        {
                            g.DrawRectangle(Pens.LightGreen, Device.EgsGestureHidReport.Faces[i].Area);
                        }
                        if (Device.EgsGestureHidReport.SelectedFaceIndex >= 0)
                        {
                            g.DrawRectangle(Pens.LightYellow, Device.EgsGestureHidReport.Faces[Device.EgsGestureHidReport.SelectedFaceIndex].Area);
                        }
                        foreach (var hand in Device.EgsGestureHidReport.Hands)
                        {
                            g.DrawRectangle(Pens.OrangeRed, hand.DetectionArea);
                        }
                    }
                    else
                    {
                        g.DrawRectangle(Pens.LightYellow, Device.EgsGestureHidReport.Faces[Device.EgsGestureHidReport.SelectedFaceIndex].Area);
                        foreach (var hand in Device.EgsGestureHidReport.Hands)
                        {
                            g.DrawRectangle(Pens.OrangeRed, hand.ScreenMappedArea);
                            int ellipseRadius = hand.IsTouching ? 5 : 10;
                            g.DrawEllipse(Pens.OrangeRed, (int)hand.XInCameraViewImage - ellipseRadius, (int)hand.YInCameraViewImage - ellipseRadius, ellipseRadius * 2, ellipseRadius * 2);
                        }
                    }
                }
                CameraViewImagePictureBox.Image = bmp;
            };

            this.FormClosed += (sender, e) =>
            {
                // If you do not detach this event handler, exceptions can happen.
                Device.EgsGestureHidReport.ReportUpdated -= EgsGestureHidReport_ReportUpdated;

                // When the application quits, please stop face detection and hand detection.
                Device.Settings.IsToDetectFaces.Value = false;
                Device.Settings.IsToDetectHands.Value = false;
                Device.Settings.IsToDrawBordersOnCameraViewImageByDevice.Value = false;
                EgsDevice.CloseDefaultEgsDevice();

                CameraViewImagePictureBox.Dispose();
                foreach (var cursorView in CursorViews)
                {
                    cursorView.Close();
                }
            };
        }
Exemplo n.º 7
0
        public FixedHandDetectionAreasExample01App()
            : base()
        {
            Egs.BindableResources.Current.CultureChanged += delegate
            {
                ApplicationCommonSettings.HostApplicationName = "FixedHandDetectionAreasExample01";
            };

            Egs.BindableResources.Current.ChangeCulture("");

            if (DuplicatedProcessStartBlocking.TryGetMutexOnTheBeginningOfApplicationConstructor() == false)
            {
                Application.Current.Shutdown();
                return;
            }

            Device = EgsDevice.GetDefaultEgsDevice();
            Device.Settings.IsToDrawBordersOnCameraViewImageByDevice.Value = true;
            Device.Settings.IsToDetectFaces.Value                 = true;
            Device.Settings.IsToDetectHands.Value                 = true;
            Device.Settings.IsToFixHandDetectionRegions.Value     = true;
            Device.Settings.CameraViewImageSourceBitmapSize.Value = Egs.PropertyTypes.CameraViewImageSourceBitmapSizes.Size_640x480;

            {
                CursorViewModels    = new CursorViewModel[Device.TrackableHandsCountMaximum];
                CursorViewModels[0] = new CursorViewModel();
                CursorViewModels[1] = new CursorViewModel();
                CursorViews         = new CursorForm[Device.TrackableHandsCountMaximum];
                CursorViews[0]      = new CursorForm();
                CursorViews[1]      = new CursorForm();
                var imageSetListRight = new List <ImageInformationSet>();
                var imageSetListLeft  = new List <ImageInformationSet>();
                imageSetListRight.Add(new ImageInformationSet()
                {
                    ImageSetIndex = 0, FolderPath = "Resources\\", SampleImageFileRelativePath = "Resources\\Sample.png"
                });
                imageSetListRight[0].AddImage((int)CursorImageIndexLabels.OpenHand, "Right_OpenHand.png");
                imageSetListRight[0].AddImage((int)CursorImageIndexLabels.CloseHand, "Right_CloseHand.png");
                imageSetListLeft.Add(new ImageInformationSet()
                {
                    ImageSetIndex = 0, FolderPath = "Resources\\", SampleImageFileRelativePath = "Resources\\Sample.png"
                });
                imageSetListLeft[0].AddImage((int)CursorImageIndexLabels.OpenHand, "Left_OpenHand.png");
                imageSetListLeft[0].AddImage((int)CursorImageIndexLabels.CloseHand, "Left_CloseHand.png");
                CursorViews[0].InitializeOnceAtStartup(CursorViewModels[0], imageSetListRight);
                CursorViews[1].InitializeOnceAtStartup(CursorViewModels[1], imageSetListLeft);
                Device.EgsGestureHidReport.ReportUpdated += EgsGestureHidReport_ReportUpdated;
                CameraViewBackgroundWindowModel           = new CameraViewModel();
                CameraViewBackgroundWindow = new FixedHandDetectionAreasExample01MainWindow();
                CameraViewBackgroundWindowModel.InitializeOnceAtStartup(Device);
                Device.CameraViewImageSourceBitmapCapture.CameraViewImageSourceBitmapChanged += delegate
                {
                    // Unfortunately, DataBinding does not seem to be able to solve "different thread" InvalidOperationException.
                    CameraViewBackgroundWindow.CameraViewImage.Dispatcher.InvokeAsync(() =>
                    {
                        CameraViewBackgroundWindow.CameraViewImage.Source = CameraViewBackgroundWindowModel.CameraViewWpfBitmapSource;
                    });
                };
                CameraViewBackgroundWindow.KeyDown += (sender, e) =>
                {
                    switch (e.Key)
                    {
                    case System.Windows.Input.Key.Escape:
                        CameraViewBackgroundWindow.Close();
                        break;
                    }
                };
                base.MainWindow = CameraViewBackgroundWindow;
                CameraViewBackgroundWindow.Show();
            }

            InitializeFaceDetection();
        }
Exemplo n.º 8
0
 private void MainWindow_Closed(object sender, System.EventArgs e)
 {
     CursorViewModel.StopData();
 }
Exemplo n.º 9
0
 private void Window_Loaded(object sender, RoutedEventArgs e)
 {
     KinectReader.window = this;
     CursorViewModel.LoadSettings();
 }