/// <summary> Start a new calibration, based on the parameters set via the inspector. </summary> /// <param name="whichFingers"></param> /// <returns></returns> public bool StartCalibration(bool[] whichFingers = null) { if (this.GloveReady()) { if (whichFingers == null) { whichFingers = new bool[] { false, true, true, true, true }; } CalibrationAlgorithm algorithm = null; switch (this.calibrationAlgorithm) { case Algorithm.PointsOnACircle2D: algorithm = new Circle2D(whichFingers); break; } if (algorithm != null) { CalibrationMethod method = null; switch (this.calibrationMethod) { case CalibrationType.Manual: method = new ManualCalibration(algorithm, this.async); break; case CalibrationType.SemiAutomatic: method = new SemiAutoCalibration(algorithm, this.async, 12, 0.6f, 5); break; case CalibrationType.Automatic: method = new AutoCalibration(algorithm, this.async); break; } if (method != null) { this.glove.StartCalibration(method); this.calibrating = true; } } } return(false); }
/// <summary> /// Calls the correct calibration method. /// </summary> /// <param name="method"> /// One of the calibraton methods. /// </param> private void Calibrate(CalibrationMethod method) { switch (METState.Current.remoteOrMobile) { case METState.RemoteOrMobile.RemoteEyeTracking: this.CalibrateRemote(method); break; case METState.RemoteOrMobile.MobileEyeTracking: this.CalibrateMobile(method); break; } }
private void CalibrateRemote(CalibrationMethod method) { METState.Current.EyeToDisplay_Mapping.GazeErrorX = 0; METState.Current.EyeToDisplay_Mapping.GazeErrorY = 0; METState.Current.EyeToDisplay_Mapping.CalibrationTarget = 0; METState.Current.EyeToDisplay_Mapping.Calibrated = false; switch (method) { case CalibrationMethod.Point4: METState.Current.EyeToDisplay_Mapping.CalibrationType = Calibration.calibration_type.calib_Homography; METState.Current.remoteCalibration = new RemoteCalibration(2, 2, this.presentationScreen.Bounds, RemoteCalibration.Task.Calib_Display); break; case CalibrationMethod.Point9: METState.Current.EyeToDisplay_Mapping.CalibrationType = Calibration.calibration_type.calib_Polynomial; METState.Current.remoteCalibration = new RemoteCalibration(3, 3, this.presentationScreen.Bounds, RemoteCalibration.Task.Calib_Display); break; } this.Writer.Write("CalibrationFinished"); }
/// <summary> /// Calls calibration for mobile tracking mode /// </summary> /// <param name="method"> /// One of the calibraton methods. /// </param> private void CalibrateMobile(CalibrationMethod method) { METState.Current.EyeToScene_Mapping.ScenePoints = new List <AForge.Point>(); METState.Current.EyeToScene_Mapping.GazeErrorX = 0; METState.Current.EyeToScene_Mapping.GazeErrorY = 0; METState.Current.EyeToScene_Mapping.CalibrationTarget = 0; METState.Current.EyeToScene_Mapping.Calibrated = false; switch (method) { case CalibrationMethod.Point4: MessageBox.Show( "Click on 4 points in the scene image while the user is looking at the corresponding points in the field of view"); METState.Current.EyeToScene_Mapping.CalibrationType = Calibration.calibration_type.calib_Homography; break; case CalibrationMethod.Point9: MessageBox.Show( "Click on 9 points in the scene image while the user is looking at the corresponding points in the field of view"); METState.Current.EyeToScene_Mapping.CalibrationType = Calibration.calibration_type.calib_Polynomial; break; } }