public FaceDetectionCompletedEventExample1App() : base() { Egs.BindableResources.Current.CultureChanged += delegate { ApplicationCommonSettings.HostApplicationName = "FaceDetectionCompletedEventExample1"; }; Egs.BindableResources.Current.ChangeCulture(""); if (DuplicatedProcessStartBlocking.TryGetMutexOnTheBeginningOfApplicationConstructor() == false) { var msg = string.Format(System.Globalization.CultureInfo.InvariantCulture, Egs.EgsDeviceControlCore.Properties.Resources.CommonStrings_Application0IsAlreadyRunning, ApplicationCommonSettings.HostApplicationName); MessageBox.Show(msg, ApplicationCommonSettings.HostApplicationName); Application.Current.Shutdown(); return; } ApplicationCommonSettings.IsDebugging = true; Components = new EgsHostAppBaseComponents(); Components.InitializeOnceAtStartup(); Components.Device.Settings.FaceDetectionMethod.Value = Egs.PropertyTypes.FaceDetectionMethods.DefaultProcessOnEgsHostApplication; Components.CameraViewWindow.KeyDown += (sender, e) => { switch (e.Key) { case System.Windows.Input.Key.Escape: Components.CameraViewWindow.Close(); break; } }; Components.Device.FaceDetectionOnHost.FaceDetectionCompleted += FaceDetectionOnHost_FaceDetectionCompleted; Window = new FaceDetectionCompletedEventExample1MainWindow(); this.Exit += delegate { Window.Close(); if (Components != null) { Components.Dispose(); Components = null; } DuplicatedProcessStartBlocking.ReleaseMutex(); }; }
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(); }
public ZkooHostAppWithTutorialApplication() : base() { // TODO: Check the correct way to catch all exceptions and show it "We're sorry" dialog. But the next way is still meaningless now, and sometimes this code can cause a problem that application cannot exit. //AppDomain.CurrentDomain.UnhandledException += (sender, e) => { ShutdownApplicationByException((Exception)e.ExceptionObject); }; try { Egs.BindableResources.Current.CultureChanged += delegate { ApplicationCommonSettings.HostApplicationName = Egs.EgsDeviceControlCore.Properties.Resources.CommonStrings_Zkoo; Egs.ZkooTutorial.BindableResources.Current.ChangeCulture(Egs.EgsDeviceControlCore.Properties.Resources.Culture.Name); }; Egs.BindableResources.Current.ChangeCulture(ApplicationCommonSettings.DefaultCultureInfoName); if (DuplicatedProcessStartBlocking.TryGetMutexOnTheBeginningOfApplicationConstructor() == false) { var msg = string.Format(System.Globalization.CultureInfo.InvariantCulture, Egs.EgsDeviceControlCore.Properties.Resources.CommonStrings_Application0IsAlreadyRunning, ApplicationCommonSettings.HostApplicationName); MessageBox.Show(msg, ApplicationCommonSettings.HostApplicationName); if (Application.Current != null) { Application.Current.Shutdown(); } return; } hostAppComponents = new EgsHostAppBaseComponents(); hostAppComponents.InitializeOnceAtStartup(); hostAppComponents.HasResetSettings += delegate { // You can modify the application default settings here. hostAppComponents.Device.Settings.FaceDetectionMethod.Value = Egs.PropertyTypes.FaceDetectionMethods.DefaultProcessOnEgsHostApplication; hostAppComponents.IsToStartTutorialWhenHostApplicationStart = true; }; if (SettingsSerialization.LoadSettingsJsonFile(hostAppComponents) == false) { hostAppComponents.Reset(); } hostAppComponents.CameraViewWindow.Closed += delegate { hostAppComponents.Dispose(); }; hostAppComponents.Disposing += delegate { // NOTE: Save settings before Dispose(). Target event is not Disposed but Disposing. if (hostAppComponents.CanSaveSettingsJsonFileSafely) { SettingsSerialization.SaveSettingsJsonFile(hostAppComponents); } if (navigator != null) { // detach static event Microsoft.Win32.SystemEvents.DisplaySettingsChanged -= SystemEvents_DisplaySettingsChanged; } // NOTE: IMPORTANT! if (navigator != null) { navigator.Close(); navigator = null; } zkooTutorialModel = null; }; base.Exit += delegate { if (hostAppComponents != null) { hostAppComponents.Dispose(); hostAppComponents = null; } DuplicatedProcessStartBlocking.ReleaseMutex(); }; hostAppComponents.CheckIfDeviceFirmwareIsLatestOrNotAndExitApplicationIfFailed(); // NOTE: If users exit the application by the button on Camera View while "Firmware Update" dialog, exception occurs. // MUSTDO: We will fix this. if (hostAppComponents.SettingsWindow == null) { return; } // NOTE: Codes about "Tutorial" application. // TODO: Tutorial application should be independent from this host application, so I wrote it as an event handler. var hasZkooTutorialLaunched = false; var zkooTutorialLaunchAction = new Action(() => { if (hasZkooTutorialLaunched == false) { zkooTutorialModel = new ZkooTutorialModel(hostAppComponents); navigator = new MainNavigationWindow(); // attach static event Microsoft.Win32.SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged; // NOTE: TODO: When exceptions occur in Initialize, we have to distinguish whether from Settings files or from source code. zkooTutorialModel.TutorialAppHeaderMenu.InitializeOnceAtStartup(navigator, zkooTutorialModel); zkooTutorialModel.InitializeOnceAtStartup(hostAppComponents); navigator.InitializeOnceAtStartup(zkooTutorialModel); hasZkooTutorialLaunched = true; } navigator.StartTutorial(); }); hostAppComponents.SettingsWindow.SettingsUserControl.TutorialAppSettingsGroupBoxVisibility = Visibility.Visible; hostAppComponents.StartTutorialCommand.PerformEventHandler += delegate { zkooTutorialLaunchAction.Invoke(); }; hostAppComponents.IsStartingDeviceFirmwareUpdate += delegate { if (navigator != null) { navigator.ExitTutorial(); } }; hostAppComponents.IsStartingHostApplicationUpdate += delegate { if (navigator != null) { navigator.ExitTutorial(); } }; if (ApplicationCommonSettings.IsInternalRelease || ApplicationCommonSettings.IsDebuggingInternal) { var exvisionInternalSettingsTabItem = new System.Windows.Controls.TabItem() { Header = "Exvision" }; exvisionInternalSettingsTabItem.Content = new Egs.Views.ExvisionSettingsUserControl(); hostAppComponents.SettingsWindow.SettingsUserControl.SettingsTabControl.Items.Add(exvisionInternalSettingsTabItem); } if (hostAppComponents.IsToStartTutorialWhenHostApplicationStart) { zkooTutorialLaunchAction.Invoke(); } } catch (Exception ex) { ShutdownApplicationByException(ex); } }
public ZkooHostAppApplication() : base() { hostAppComponents = null; try { Egs.BindableResources.Current.CultureChanged += delegate { ApplicationCommonSettings.HostApplicationName = Egs.EgsDeviceControlCore.Properties.Resources.CommonStrings_GestureCamera; }; Egs.BindableResources.Current.ChangeCulture(ApplicationCommonSettings.DefaultCultureInfoName); if (DuplicatedProcessStartBlocking.TryGetMutexOnTheBeginningOfApplicationConstructor() == false) { var msg = string.Format(System.Globalization.CultureInfo.InvariantCulture, Egs.EgsDeviceControlCore.Properties.Resources.CommonStrings_Application0IsAlreadyRunning, ApplicationCommonSettings.HostApplicationName); MessageBox.Show(msg, ApplicationCommonSettings.HostApplicationName); if (Application.Current != null) { Application.Current.Shutdown(); } return; } hostAppComponents = new EgsHostAppBaseComponents(); hostAppComponents.InitializeOnceAtStartup(); hostAppComponents.HasResetSettings += delegate { // You can modify the application default settings here. hostAppComponents.Device.Settings.CursorSpeedAndPrecisionMode.Value = Egs.PropertyTypes.CursorSpeedAndPrecisionModes.Standard; hostAppComponents.Device.Settings.FaceDetectionMethod.Value = Egs.PropertyTypes.FaceDetectionMethods.DefaultProcessOnEgsHostApplication; }; if (SettingsSerialization.LoadSettingsJsonFile(hostAppComponents) == false) { hostAppComponents.Reset(); } hostAppComponents.CameraViewWindow.Closed += delegate { hostAppComponents.Dispose(); }; hostAppComponents.Disposing += delegate { // NOTE: Save settings before Dispose(). Target event is not Disposed but Disposing. if (hostAppComponents.CanSaveSettingsJsonFileSafely) { SettingsSerialization.SaveSettingsJsonFile(hostAppComponents); } }; base.Exit += delegate { if (hostAppComponents != null) { hostAppComponents.Dispose(); hostAppComponents = null; } DuplicatedProcessStartBlocking.ReleaseMutex(); }; hostAppComponents.CheckIfDeviceFirmwareIsLatestOrNotAndExitApplicationIfFailed(); // NOTE: If users exit the application by the button on Camera View while "Firmware Update" dialog, exception occurs. // MUSTDO: We will fix this. if (hostAppComponents.SettingsWindow == null) { return; } // TODO: The tutorial program will be separated into an independent application. hostAppComponents.SettingsWindow.SettingsUserControl.TutorialAppSettingsGroupBoxVisibility = Visibility.Collapsed; hostAppComponents.StartTutorialCommand.CanPerform = false; } catch (Exception ex) { ShutdownApplicationByException(ex); } }
public App() : base() { Egs.BindableResources.Current.CultureChanged += delegate { ApplicationCommonSettings.HostApplicationName = Egs.EgsDeviceControlCore.Properties.Resources.CommonStrings_GestureCamera; //ApplicationCommonSettings.HostApplicationName = "WpfApplication1"; }; // You can change the application CultureInfo to some cultures. // The next line lets it use OS culture Egs.BindableResources.Current.ChangeCulture(""); //Egs.BindableResources.Current.ChangeCulture(ApplicationCommonSettings.DefaultCultureInfoName); //Egs.BindableResources.Current.ChangeCulture("en"); //Egs.BindableResources.Current.ChangeCulture("ja"); //Egs.BindableResources.Current.ChangeCulture("zh-Hans"); if (DuplicatedProcessStartBlocking.TryGetMutexOnTheBeginningOfApplicationConstructor() == false) { // Currently, the ZkooHostApp is not service, so only one instance can run. var msg = string.Format(System.Globalization.CultureInfo.InvariantCulture, Egs.EgsDeviceControlCore.Properties.Resources.CommonStrings_Application0IsAlreadyRunning, ApplicationCommonSettings.HostApplicationName); MessageBox.Show(msg, ApplicationCommonSettings.HostApplicationName); Application.Current.Shutdown(); return; } // The next line shows "Developer" tab on SettingsWindow. ApplicationCommonSettings.IsDebugging = true; // This object has all Views and Models var hostAppComponents = new EgsHostAppBaseComponents(); // A lot of classes in "Egs" namespace have "InitializeOnceAtStartup..." methods. Please call them. hostAppComponents.InitializeOnceAtStartup(); hostAppComponents.HasResetSettings += delegate { // You can modify the application default settings here. hostAppComponents.Device.Settings.CursorSpeedAndPrecisionMode.Value = Egs.PropertyTypes.CursorSpeedAndPrecisionModes.Standard; }; hostAppComponents.CameraViewWindow.KeyDown += (sender, e) => { switch (e.Key) { case System.Windows.Input.Key.Escape: // NOTE: The specification changed. // When you use EgsHostAppBaseComponents, it disposes itself when CameraViewWindow is closed. // So you need not to attach "event handler which calls host.Dispose()" to "event CameraViewWindow.Closed". hostAppComponents.CameraViewWindow.Close(); break; } }; this.Exit += delegate { if (hostAppComponents != null) { hostAppComponents.Dispose(); hostAppComponents = null; } DuplicatedProcessStartBlocking.ReleaseMutex(); }; }
public App() : base() { Egs.BindableResources.Current.CultureChanged += delegate { ApplicationCommonSettings.HostApplicationName = Egs.EgsDeviceControlCore.Properties.Resources.CommonStrings_GestureCamera; //ApplicationCommonSettings.HostApplicationName = "WpfApplication2"; }; // You can change the application CultureInfo to some cultures. // The next line lets it use OS culture Egs.BindableResources.Current.ChangeCulture(""); //Egs.BindableResources.Current.ChangeCulture(ApplicationCommonSettings.DefaultCultureInfoName); //Egs.BindableResources.Current.ChangeCulture("en"); //Egs.BindableResources.Current.ChangeCulture("ja"); //Egs.BindableResources.Current.ChangeCulture("zh-Hans"); if (DuplicatedProcessStartBlocking.TryGetMutexOnTheBeginningOfApplicationConstructor() == false) { var msg = string.Format(System.Globalization.CultureInfo.InvariantCulture, Egs.EgsDeviceControlCore.Properties.Resources.CommonStrings_Application0IsAlreadyRunning, ApplicationCommonSettings.HostApplicationName); MessageBox.Show(msg, ApplicationCommonSettings.HostApplicationName); Application.Current.Shutdown(); return; } // Sorry, EgsHostSettings and EgsDevice.GetDefaultEgsDevice(EgsDeviceSettings) are no longer available. // Device settings are saved on Host PC, // and the host application transfers the device settings to connected device when it starts running or a device is connected. // You can use EgsDevice object directly, without EgsHostAppBaseComponents or EgsHostOnUserControl. Device = EgsDevice.GetDefaultEgsDevice(); Device.Settings.FaceDetectionMethod.Value = FaceDetectionMethods.DefaultProcessOnEgsDevice; Device.Settings.IsToDetectFaces.Value = true; Device.Settings.IsToDetectHands.Value = true; // OnePersonBothHandsViewModel can receive information from EgsDevice on EgsGestureHidReport.ReportUpdated event etc. // It interprets the information from EgsDevice for CursorForm and so on. OnePersonBothHandsViewModel = new OnePersonBothHandsViewModel(); // A lot of classes in "Egs" namespace have "InitializeOnceAtStartup..." methods. // Please call the initialization before they are used as arguments of some other objects, or before some event handlers are attached. OnePersonBothHandsViewModel.InitializeOnceAtStartup(Device); // CursorForm shows Gesture Cursor. It is available on Windows 7, 8, 8.1 (contains start screen) and 10. CursorViews = new CursorForm[Device.TrackableHandsCountMaximum]; CursorViews[0] = new CursorForm(); CursorViews[1] = new CursorForm(); CursorViews[0].InitializeOnceAtStartup(OnePersonBothHandsViewModel.RightHand, ImageInformationSet.CreateDefaultRightCursorImageInformationSetList()); CursorViews[1].InitializeOnceAtStartup(OnePersonBothHandsViewModel.LeftHand, ImageInformationSet.CreateDefaultLeftCursorImageInformationSetList()); Device.EgsGestureHidReport.ReportUpdated += EgsGestureHidReport_ReportUpdated; // Sorry, specification is changed. You need to make an object of CameraViewUserControlModel. CameraViewUserControlModel = new CameraViewUserControlModel(); CameraViewWindowModel = new CameraViewWindowModel(); CameraViewWindow = new CameraViewWindow(); CameraViewUserControlModel.IsToDrawImageSet = true; Device.Settings.IsToDrawBordersOnCameraViewImageByDevice.Value = false; CameraViewUserControlModel.InitializeOnceAtStartup(Device); CameraViewWindowModel.InitializeOnceAtStartup(Device); CameraViewWindow.InitializeOnceAtStartup(CameraViewWindowModel, CameraViewUserControlModel); CameraViewWindow.MainMenuItemsPanel.Columns = 2; // Minimize button needs EgsHostAppBaseComponents, because there is no way to "Un"-minimize it except for tray icon in system notification area, currently. // AppTrayIconAndMenuItemsComponent manages the tray icon, and change the visibility of Settings Window and Camera View. CameraViewWindow.MinimizeButton.Visibility = Visibility.Collapsed; // Settings button needs EgsHostAppBaseComponents, because only EgsHostAppBaseComponents has all information about host app, // and SettingsWindow can change the settings of EgsHostAppBaseComponents. CameraViewWindow.SettingsButton.Visibility = Visibility.Collapsed; // EgsHostAppBaseComponents also attachs an event handler which calls EgsHostAppBaseComponents.Dispose() and closes the application. CameraViewWindowModel.ExitCommand.PerformEventHandler += delegate { // In this example program, the next line means the application exit. CameraViewWindow.Close(); }; var button = new System.Windows.Controls.Button() { Content = "Show Dialog" }; button.Click += delegate { MessageBox.Show("Hello!"); }; CameraViewWindow.MainMenuItemsPanel.Children.Insert(0, button); CameraViewWindow.KeyDown += (sender, e) => { switch (e.Key) { case System.Windows.Input.Key.Escape: // This application does not use EgsHostAppBaseComponents, so this just closes the window. CameraViewWindow.Close(); break; } }; // But this event handler attach close cursors and device. CameraViewWindow.Closed += delegate { Device.EgsGestureHidReport.ReportUpdated -= EgsGestureHidReport_ReportUpdated; // When you get EgsDevice by EgsDevice.GetDefaultEgsDevice, you need to call EgsDevice.CloseDefaultEgsDevice(). Device.Settings.IsToDetectFaces.Value = false; Device.Settings.IsToDetectHands.Value = false; EgsDevice.CloseDefaultEgsDevice(); // And then, you need to close cursorViews. foreach (var cursorView in CursorViews) { cursorView.Close(); } }; this.Exit += delegate { DuplicatedProcessStartBlocking.ReleaseMutex(); }; }