static void Main(string[] args) { var baseConfig = new Configuration(); baseConfig.nAreaForStrokeMap = 15; baseConfig.minRadiusArea = 0.03; baseConfig.toleranceFactorArea = 1.3; var paramVar1 = new DoubleParamVariation("nAreaForStrokeMap", 10, 2, 20); var paramVar2 = new DoubleParamVariation("minRadiusArea", 0.01, 0.02, 0.19); var paramVar3 = new DoubleParamVariation("toleranceFactorArea", 1.1, 0.1, 2.1); var configSet = baseConfig.getParameterVariations(paramVar1, paramVar2, paramVar3); Stream TestFileStream; BinaryFormatter serializer = new BinaryFormatter(); Dictionary <string, GestureTrace[]> circleGestures, squareGestures, ownFormGestures; if (File.Exists("Circle_1Finger.gestures")) { TestFileStream = File.OpenRead("Circle_1Finger.gestures"); circleGestures = (Dictionary <string, GestureTrace[]>)serializer.Deserialize(TestFileStream); TestFileStream.Close(); } else { circleGestures = getGestureTraces("Circle_1Finger"); TestFileStream = File.Create("Circle_1Finger.gestures"); serializer.Serialize(TestFileStream, circleGestures); TestFileStream.Close(); } if (File.Exists("Square_1Finger.gestures")) { TestFileStream = File.OpenRead("Square_1Finger.gestures"); squareGestures = (Dictionary <string, GestureTrace[]>)serializer.Deserialize(TestFileStream); TestFileStream.Close(); } else { squareGestures = getGestureTraces("Square_1Finger"); TestFileStream = File.Create("Square_1Finger.gestures"); serializer.Serialize(TestFileStream, squareGestures); TestFileStream.Close(); } if (File.Exists("OwnForm_1Finger.gestures")) { TestFileStream = File.OpenRead("OwnForm_1Finger.gestures"); ownFormGestures = (Dictionary <string, GestureTrace[]>)serializer.Deserialize(TestFileStream); TestFileStream.Close(); } else { ownFormGestures = getGestureTraces("OwnForm_1Finger"); TestFileStream = File.Create("OwnForm_1Finger.gestures"); serializer.Serialize(TestFileStream, ownFormGestures); TestFileStream.Close(); } var gesturesToTest = ownFormGestures; var nSubsets = 4; var results = new Dictionary <Configuration, IEnumerable <CrossValidator.RecognitionResultRow> >(1000); foreach (var config in configSet) { var recSystem = new RecognitionSystem(config); var rows = CrossValidator.validateRecognition(recSystem, gesturesToTest, nSubsets); results[config] = rows; } CrossValidator.saveResultsToFile(@"F:\Dropbox\LfS\Code\GestureRecognitionTests\GestureRecognition_OwnForm.csv", results); //do evaluation //Console.WriteLine(model.evaluate(squareTraces.First().Value.First())); //var crossValidator = new CrossValidator(); //////saveSymbolTracesToDatabase(); //var resCircle = crossValidator.validate(circleTraces, "Circle_1Finger", nSubsets); //var resSquare = crossValidator.validate(squareTraces, "Square_1Finger", nSubsets); //var resOwnForm = crossValidator.validate(ownFormTraces, "OwnForm_1Finger", nSubsets); //var resAll = resCircle.Concat(resSquare).Concat(resOwnForm); //saveResultsToFile(@"F:\Dropbox\LfS\Code\GestureRecognitionTests\crossValidation_Extrema.csv", resAll);//resAll); ////DBtoExcel(@"D:\Dropbox\LfS\Data\Multitouch_Userstudy\Traces.csv"); }
static void Main(string[] args) { var baseConfig = new Configuration(); baseConfig.nAreaForStrokeMap = 15; baseConfig.minRadiusArea = 0.03; baseConfig.toleranceFactorArea = 1.3; //var paramVar1 = new ParameterVariation("nAreaForStrokeMap", 10, 2, 20); var paramVar2 = new DoubleParamVariation("minRadiusArea", 0.005, 0.025, 0.18); var paramVar3 = new DoubleParamVariation("toleranceFactorArea", 1.05, 0.05, 1.5); var paramVar4 = new DoubleParamVariation("areaPointDistance", 0.05, 0.05, 0.2); var configSet = Configuration.getParameterVariations(param1, param2, param3, param4, param5, param6, param7, param8, param9, param10); Stream TestFileStream; BinaryFormatter serializer = new BinaryFormatter(); Dictionary <string, GestureTrace[]> timGestures; if (File.Exists("Tim.gestures")) { TestFileStream = File.OpenRead("Tim.gestures"); timGestures = (Dictionary <string, GestureTrace[]>)serializer.Deserialize(TestFileStream); TestFileStream.Close(); } else { string user = "******"; //string[] gestures = new string[] { "Triangle_Slow", "Triangle_Normal", "Triangle_Fast", "Circle_Slow", "Circle_Normal", "Circle_Fast", "D_Slow", "D_Normal", "D_Fast", "Circle_FastLeftSlowRight", "Circle_SlowLeftFastRight" }; //string[] gestures = new string[] { "Triangle_Slow", "Triangle_Fast", "Circle_Slow", "Circle_Fast", "D_Slow", "D_Fast", "Circle_1Stop_Bottom", "Circle_2Stop_LeftRight" }; string[] gestures = new string[] { "Triangle_Slow", "Triangle_Fast", "Circle_Slow", "Circle_Fast", "D_Slow", "D_Fast" }; timGestures = gestures.Select(g => new { GestureName = g, Traces = getGestureTraces(user, g) }).ToDictionary(e => e.GestureName, e => e.Traces); TestFileStream = File.Create("Tim.gestures"); serializer.Serialize(TestFileStream, timGestures); TestFileStream.Close(); } var gesturesToTest = timGestures; var nSubsets = 5; var results = new Dictionary <Configuration, IEnumerable <CrossValidator.RecognitionResultRow> >(1000); Stopwatch sw = new Stopwatch(); sw.Start(); foreach (var config in configSet) { var recSystem = new RecognitionSystem(config); var rows = CrossValidator.validateRecognition(recSystem, gesturesToTest, nSubsets); results[config] = rows; } var neededTime = sw.ElapsedMilliseconds; Console.WriteLine(neededTime); CrossValidator.saveResultsToFile(@"D:\Dropbox\LfS\Code\GestureRecognitionTests\GestureRecognition_TimGestures_2Subsets_Test.csv", results); //do evaluation //Console.WriteLine(model.evaluate(squareTraces.First().Value.First())); //var crossValidator = new CrossValidator(); //////saveSymbolTracesToDatabase(); //var resCircle = crossValidator.validate(circleTraces, "Circle_1Finger", nSubsets); //var resSquare = crossValidator.validate(squareTraces, "Square_1Finger", nSubsets); //var resOwnForm = crossValidator.validate(ownFormTraces, "OwnForm_1Finger", nSubsets); //var resAll = resCircle.Concat(resSquare).Concat(resOwnForm); //saveResultsToFile(@"F:\Dropbox\LfS\Code\GestureRecognitionTests\crossValidation_Extrema.csv", resAll);//resAll); ////DBtoExcel(@"D:\Dropbox\LfS\Data\Multitouch_Userstudy\Traces.csv"); }
public static void Main() { var param1 = new IntParamVariation("nAreaForStrokeMap", 10, 5, 20); var param2 = new DoubleParamVariation("minRadiusArea", 0.01); var param3 = new DoubleParamVariation("toleranceFactorArea", 1.7, 0.2, 2.1); var param5 = new BoolParamVariation("useFixAreaNumber", true); var param6 = new BoolParamVariation("useSmallestCircle", true); var param7 = new BoolParamVariation("isTranslationInvariant", false); var param8 = new BoolParamVariation("useAdaptiveTolerance", false); var param9 = new DoubleParamVariation("hitProbability", 0.9); var param10 = new StringParamVariation("distEstName", new string[] { nameof(NaiveUniformEstimator), nameof(NormalEstimator) }); var param11 = new BoolParamVariation("useEllipsoid", false); var configSet = ParameterVariation.getParameterVariations(param1, param2, param3, param5, param6, param7, param8, param9, param10, param11).Select(ps => new CHnMMParameter(ps)).ToArray(); string ConnectionString = "Server=localhost; Port=5432; User Id=macbook; Database = touchy_data_development"; string ConnectionString_heroku = "Database=dcbpejtem8e4qu; Server=ec2-54-75-239-237.eu-west-1.compute.amazonaws.com; Port=5432; User Id=pbcgcsyjsmpeds; Password=323743a3eec80c0a49dcee493617af7b94fee458a6a89a671dc3acaad0c3f437; Sslmode=Require;Trust Server Certificate=true"; NpgsqlConnection connection = new NpgsqlConnection(ConnectionString); try { connection.Open(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } NpgsqlCommand command = connection.CreateCommand(); //######################################################### //RECOGNITION TASK// //######################################################### command.CommandText = "SELECT id FROM Tgestures"; NpgsqlDataReader ges_read = command.ExecuteReader(); DataTable gesture_table = new DataTable(); gesture_table.Load(ges_read); ges_read.Close(); var set = configSet[0]; //foreach (var set in configSet) //{ bool head = true; var file_name = "../../recognition/"; file_name += "tol_" + set.toleranceFactorArea; file_name += "_dist_" + set.distEstName; file_name += "_nArea_" + set.nAreaForStrokeMap; file_name += ".csv"; Console.WriteLine(file_name); System.Text.StringBuilder sb = new System.Text.StringBuilder(); CHnMMClassificationSystem cs = new CHnMMClassificationSystem(set); for (int global_user = 1; global_user < 12; global_user++) { foreach (DataRow gesture in gesture_table.Rows) { List <StrokeData> gestureStrokes = new List <StrokeData>(); var accumulate = new List <KeyValuePair <int, string[]> >(); command.CommandText = "SELECT * FROM trajectories WHERE user_id = " + global_user + " AND gesture_id=" + gesture["id"] + " AND exec_num % 2 = 1 ORDER BY exec_num, stroke_seq;"; NpgsqlDataReader reader = command.ExecuteReader(); DataTable dt = new DataTable(); dt.Load(reader); reader.Close(); var prev_exec = 1; var prev_stroke = 0; var time_lapse = 0; foreach (DataRow row in dt.Rows) { if (prev_exec != Convert.ToInt32(row["exec_num"])) { var trajectory = new StrokeData(global_user, accumulate); gestureStrokes.Add(trajectory); prev_exec = Convert.ToInt32(row["exec_num"]); time_lapse = 0; accumulate.Clear(); } string[,] db_points = row["points"] as string[, ]; int trace = Convert.ToInt32(row["stroke_seq"]); int rowLength = db_points.GetLength(0); if (prev_stroke != trace) { time_lapse = Convert.ToInt32(accumulate.Last().Value[2]); } for (int i = 0; i < rowLength; i++) { string[] single_pt = new string[4]; single_pt[0] = db_points[i, 0]; single_pt[1] = db_points[i, 1]; single_pt[2] = (Convert.ToInt32(db_points[i, 2]) + time_lapse).ToString(); single_pt[3] = trace.ToString(); accumulate.Add(new KeyValuePair <int, string[]>(Convert.ToInt32(db_points[i, 2]), single_pt)); } } if (accumulate.Count > 0) { var last_trajectory = new StrokeData(global_user, accumulate); gestureStrokes.Add(last_trajectory); } var gestureName = global_user + "-" + gesture["id"]; cs.trainGesture(gestureName, gestureStrokes.Cast <BaseTrajectory>()); Console.WriteLine("=============================================================================\n"); Console.WriteLine("============================================================================="); } } for (int global_user = 1; global_user < 12; global_user++) { Console.WriteLine("User=========================================================" + global_user); foreach (DataRow gesture in gesture_table.Rows) { var accumulate = new List <KeyValuePair <int, string[]> >(); command.CommandText = "SELECT * FROM trajectories WHERE user_id = " + global_user + " AND gesture_id=" + gesture["id"] + " AND exec_num % 2 = 0 ORDER BY exec_num, stroke_seq;"; NpgsqlDataReader reader = command.ExecuteReader(); DataTable dt = new DataTable(); dt.Load(reader); reader.Close(); var prev_exec = 2; var prev_stroke = 0; var time_lapse = 0; foreach (DataRow row in dt.Rows) { if (prev_exec != Convert.ToInt32(row["exec_num"])) { var trajectory = new StrokeData(global_user, accumulate); cs.recognizeGesture(trajectory); prev_exec = Convert.ToInt32(row["exec_num"]); time_lapse = 0; accumulate.Clear(); } string[,] db_points = row["points"] as string[, ]; int trace = Convert.ToInt32(row["stroke_seq"]); int rowLength = db_points.GetLength(0); if (prev_stroke != trace) { time_lapse = Convert.ToInt32(accumulate.Last().Value[2]); } for (int i = 0; i < rowLength; i++) { string[] single_pt = new string[4]; single_pt[0] = db_points[i, 0]; single_pt[1] = db_points[i, 1]; single_pt[2] = (Convert.ToInt32(db_points[i, 2]) + time_lapse).ToString(); single_pt[3] = trace.ToString(); accumulate.Add(new KeyValuePair <int, string[]>(Convert.ToInt32(db_points[i, 2]), single_pt)); } } if (accumulate.Count > 0) { var last_trajectory = new StrokeData(global_user, accumulate); var result = cs.recognizeGesture(last_trajectory); if (result == null) { Console.WriteLine(gesture["id"] + ": Not Recognized"); } else { Console.WriteLine(gesture["id"] + ": " + result); } } } } }
public static void Main() { var strokeCollection = new List <KeyValuePair <String, StrokeData> >(); var param1 = new IntParamVariation("nAreaForStrokeMap", 10, 10, 20); var param2 = new DoubleParamVariation("minRadiusArea", 0.01, 0.04, 0.25); var param3 = new DoubleParamVariation("toleranceFactorArea", 1.1, 0.4, 2.5); var param5 = new BoolParamVariation("useFixAreaNumber", true); var param6 = new BoolParamVariation("useSmallestCircle", true); var param7 = new BoolParamVariation("isTranslationInvariant", true); var param8 = new BoolParamVariation("useAdaptiveTolerance", false); var param9 = new DoubleParamVariation("hitProbability", 0.9); var param10 = new StringParamVariation("distEstName", new string[] { nameof(NaiveUniformEstimator), nameof(NormalEstimator) }); var param11 = new BoolParamVariation("useEllipsoid", false); var configSet = ParameterVariation.getParameterVariations(param1, param2, param3, param5, param6, param7, param8, param9, param10, param11).Select(ps => new CHnMMParameter(ps)).ToArray(); CHnMMClassificationSystem cs = new CHnMMClassificationSystem(configSet[0]); string ConnectionString = "Server=localhost; Port=5432; User Id=touchy; Password=123456;Database = touchy_data_development"; NpgsqlConnection connection = new NpgsqlConnection(ConnectionString); try { connection.Open(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } NpgsqlCommand command = connection.CreateCommand(); command.CommandText = "SELECT * FROM trajectories WHERE user_id='1' AND gesture_id='0' AND is_password='******'"; NpgsqlDataReader reader = command.ExecuteReader(); DataTable dt = new DataTable(); dt.Load(reader); foreach (DataRow row in dt.Rows) { string[,] db_points = row["points"] as string[, ]; var gestureName = row["user_id"] + "-" + row["gesture_id"] + "-" + row["stroke_seq"]; var user = Convert.ToInt32(row["id"]); var trace = Convert.ToInt32(row["stroke_seq"]); var trajectory = new StrokeData(user, trace, db_points); strokeCollection.Add(new KeyValuePair <String, StrokeData>(gestureName, trajectory)); } var lookup = strokeCollection.ToLookup(kvp => kvp.Key, kvp => kvp.Value); var keys = lookup.Select(g => g.Key).ToList(); for (int i = 0; i < keys.Count; i++) { List <StrokeData> fingerCollection = new List <StrokeData>(); foreach (StrokeData x in lookup[keys[i]]) { fingerCollection.Add(x); } cs.trainGesture(keys[i], fingerCollection.Cast <BaseTrajectory>()); } //command.CommandText = "SELECT * FROM trajectories WHERE exec_num='1' AND user_id='1' AND gesture_id='0'"; command.CommandText = "SELECT * FROM trajectories WHERE user_id='1' AND gesture_id='0' AND is_password='******'"; NpgsqlDataReader read = command.ExecuteReader(); DataTable vg = new DataTable(); vg.Load(read); var result = new double[vg.Rows.Count]; int c = 0; foreach (DataRow row in vg.Rows) { string[,] db_points = row["points"] as string[, ]; var gestureName = row["user_id"] + "-" + row["gesture_id"] + "-" + row["stroke_seq"]; var user = Convert.ToInt32(row["id"]); var trace = Convert.ToInt32(row["stroke_seq"]); var trajectory = new StrokeData(user, trace, db_points); result[c] = cs.getSimilarity(gestureName, trajectory); c++; } bool ok = false; foreach (var prob in result) { Console.WriteLine(prob); if (prob <= 0) { ok = false; //break; } ok = true; } NpgsqlCommand insertion = connection.CreateCommand(); if (ok) { Console.WriteLine(" Gesture matches!"); insertion.CommandText = "UPDATE gestures SET verified=1 WHERE user_id=1"; insertion.ExecuteNonQuery(); } else { Console.WriteLine(" Gesture does not match!"); insertion.CommandText = "UPDATE gestures SET verified=2 WHERE user_id=1"; insertion.ExecuteNonQuery(); } }
static void Main(string[] args) { //var param1 = new IntParamVariation("nAreaForStrokeMap", 10, 5, 20); var param1 = new IntParamVariation("nAreaForStrokeMap", 0); var param2 = new DoubleParamVariation("minRadiusArea", 0.01, 0.02, 0.19); var param3 = new DoubleParamVariation("toleranceFactorArea", 1.1, 0.2, 2.1); var param4 = new DoubleParamVariation("areaPointDistance", 0.05, 0.1, 0.35); //var param4 = new DoubleParamVariation("areaPointDistance", 0); var param5 = new BoolParamVariation("useFixAreaNumber", false); var param6 = new BoolParamVariation("useSmallestCircle", true); var param7 = new BoolParamVariation("isTranslationInvariant", true); var param8 = new BoolParamVariation("useAdaptiveTolerance", false); var param9 = new DoubleParamVariation("hitProbability", 0.9); var param10 = new StringParamVariation("distEstName", new string[] { nameof(NaiveUniformEstimator), //nameof(AdaptiveUniformEstimator), //nameof(MinVarianceUniformEstimator), nameof(NormalEstimator) }); var configSet = Configuration.getParameterVariations(param1, param2, param3, param4, param5, param6, param7, param8, param9, param10); int subsets; string set; bool crossval; //Dataset1 //2 Subsets = 10 Trainingsbeispiele subsets = 2; set = "OwnForms"; crossval = true; var chnmm = new CHnMMRecognitionExperiment(set, crossval, subsets, configSet); var dtw = new DTWExperiment(false, set, crossval, subsets); var dtwWithTime = new DTWExperiment(true, set, crossval, subsets); var dollar = new DollarExperiment(set, crossval, subsets); chnmm.execute(); //dtw.execute(); //dtwWithTime.execute(); //dollar.execute(); //4 Subsets = 5 Trainingsbeispiele subsets = 4; chnmm = new CHnMMRecognitionExperiment(set, crossval, subsets, configSet); dtw = new DTWExperiment(false, set, crossval, subsets); dtwWithTime = new DTWExperiment(true, set, crossval, subsets); dollar = new DollarExperiment(set, crossval, subsets); chnmm.execute(); //dtw.execute(); //dtwWithTime.execute(); //dollar.execute(); //================================================================= //2 Subsets = 15 Trainingsbeispiele subsets = 2; set = "TimHard"; crossval = true; chnmm = new CHnMMRecognitionExperiment(set, crossval, subsets, configSet); dtw = new DTWExperiment(false, set, crossval, subsets); dtwWithTime = new DTWExperiment(true, set, crossval, subsets); dollar = new DollarExperiment(set, crossval, subsets); chnmm.execute(); //dtw.execute(); //dtwWithTime.execute(); //dollar.execute(); //6 Subsets = 5 Trainingsbeispiele subsets = 6; chnmm = new CHnMMRecognitionExperiment(set, crossval, subsets, configSet); dtw = new DTWExperiment(false, set, crossval, subsets); dtwWithTime = new DTWExperiment(true, set, crossval, subsets); dollar = new DollarExperiment(set, crossval, subsets); chnmm.execute(); //dtw.execute(); //dtwWithTime.execute(); //dollar.execute(); //var traces = GestureDatabase.GestureDatabase.getGestureTraces("Tim", "Circle_Slow"); //var protTrace = Helper.TouchesToGestureTrace(traces[1].Touches , traces[1].Id); //var testTrace = Helper.TouchesToGestureTrace(traces[5].Touches, traces[5].Id); //var prototype = new GestureRecognitionLib.DTW.Template(protTrace.LongestStroke.Points); //var full = new GestureRecognitionLib.DTW.Template(testTrace.LongestStroke.Points); //var half = new GestureRecognitionLib.DTW.Template(testTrace.LongestStroke.Points.Where((p, i) => i % 2 == 1)); //var dtwFull = prototype.getDTW(full); //var dtwHalf = prototype.getDTW(half); //Console.WriteLine($"DTW Cost (full): {dtwFull.GetCost()}"); //Console.WriteLine($"DTW Cost (half): {dtwHalf.GetCost()}"); //var param1 = new IntParamVariation("nAreaForStrokeMap", 10); //var param2 = new DoubleParamVariation("minRadiusArea", 0.005, 0.01, 0.025); //var param3 = new DoubleParamVariation("toleranceFactorArea", 1.1, 0.1, 1.8); //var param4 = new DoubleParamVariation("areaPointDistance", 0.05, 0.1, 0.45); //var param5 = new BoolParamVariation("useFixAreaNumber", false); //var param6 = new BoolParamVariation("useSmallestCircle"); //var param7 = new BoolParamVariation("isTranslationInvariant", true); //var param8 = new BoolParamVariation("useAdaptiveTolerance"); //var param9 = new DoubleParamVariation("hitProbability", 0.7, 0.1, 0.9); //var param10 = new StringParamVariation("distEstName", new string[] //{ // //nameof(NaiveUniformEstimator), // //nameof(AdaptiveUniformEstimator), // //nameof(MinVarianceUniformEstimator), // nameof(NormalEstimator) //}); //var param1 = new IntParamVariation("nAreaForStrokeMap", 10); //var param2 = new DoubleParamVariation("minRadiusArea", 0.005, 0.01, 0.025); //var param3 = new DoubleParamVariation("toleranceFactorArea", 1.4, 0.2, 1.8); //var param4 = new DoubleParamVariation("areaPointDistance", 0.05, 0.1, 0.45); //var param5 = new BoolParamVariation("useFixAreaNumber", false); //var param6 = new BoolParamVariation("useSmallestCircle"); //var param7 = new BoolParamVariation("isTranslationInvariant", false); //var param8 = new BoolParamVariation("useAdaptiveTolerance", false); //var param9 = new DoubleParamVariation("hitProbability", 0.7, 0.2, 0.9); //var param10 = new StringParamVariation("distEstName", new string[] //{ // nameof(NaiveUniformEstimator), // //nameof(AdaptiveUniformEstimator), // //nameof(MinVarianceUniformEstimator), // nameof(NormalEstimator) //}); //var param1 = new IntParamVariation("nAreaForStrokeMap", 10); //var param2 = new DoubleParamVariation("minRadiusArea", 0.025); //var param3 = new DoubleParamVariation("toleranceFactorArea", 1.5); //var param4 = new DoubleParamVariation("areaPointDistance", 0.2); //var param5 = new BoolParamVariation("useFixAreaNumber", true); //var param6 = new BoolParamVariation("useSmallestCircle"); //var param7 = new BoolParamVariation("isTranslationInvariant"); //var param8 = new BoolParamVariation("useAdaptiveTolerance"); //var param9 = new DoubleParamVariation("hitProbability", 0.9); //var param10 = new StringParamVariation("distEstName", new string[] //{ // nameof(NaiveUniformEstimator), // //nameof(AdaptiveUniformEstimator), // //nameof(MinVarianceUniformEstimator), // //nameof(NormalEstimator) //}); //var configSet = Configuration.getParameterVariations(param1, param2, param3, param4, param5, param6, param7, param8, param9, param10); //var experiment = new Experiment(configSet, "TimAdvanced", 2); //var experiment = new Experiment(configSet, "TimSimple", 2); //var experiment = new Experiment(configSet, "TimAdvanced", 2); //var e0 = new Experiment(configSet, "OwnForms", 4); //var e1 = new Experiment(configSet, "TimHard", 2); //var e2 = new Experiment(configSet, "TimSimple", 5); //var exp = new DTWExperiment(true, "Sigs1", false, 5); //var paramaters = new Configuration(); //paramaters.areaPointDistance = 20; //paramaters.isTranslationInvariant = true; //paramaters.hitProbability = 0.9; //paramaters.minRadiusArea = 5; //paramaters.nAreaForStrokeMap = 10; //paramaters.toleranceFactorArea = 2; //paramaters.useFixAreaNumber = false; //paramaters.useSmallestCircle = true; //paramaters.distEstName = nameof(NormalEstimator); //var exp = new CHnMMExperiment("Sigs1", false, 10, paramaters); ////var param1 = new IntParamVariation("nAreaForStrokeMap", 5, 5, 20); //var param1 = new IntParamVariation("nAreaForStrokeMap", 0); //var param2 = new DoubleParamVariation("minRadiusArea", 0.025, 0.025, 0.15); //var param3 = new DoubleParamVariation("toleranceFactorArea", 1.5, 0.5, 3.0); //var param4 = new DoubleParamVariation("areaPointDistance", 0.1, 0.1, 0.4); ////var param4 = new DoubleParamVariation("areaPointDistance", 0); //var param5 = new BoolParamVariation("useFixAreaNumber",false); //var param6 = new BoolParamVariation("useSmallestCircle", true); //var param7 = new BoolParamVariation("isTranslationInvariant", true); //var param8 = new BoolParamVariation("useAdaptiveTolerance", false); //var param9 = new DoubleParamVariation("hitProbability", 0.9); //var param10 = new StringParamVariation("distEstName", new string[] //{ // nameof(NaiveUniformEstimator), // //nameof(AdaptiveUniformEstimator), // //nameof(MinVarianceUniformEstimator), // nameof(NormalEstimator) //}); //var configSet = Configuration.getParameterVariations(param1, param2, param3, param4, param5, param6, param7, param8, param9, param10).ToArray(); ////var exp = new CHnMMRecognitionExperiment("PseudoSigs", false, 10, configSet); ////exp.execute(); //var exp2 = new CHnMMVerificationExperiment("PseudoSigsRandom", 5, false, configSet); //exp2.execute(); //exp2 = new CHnMMVerificationExperiment("PseudoSigsSkilled", 5, false, configSet); //exp2.execute(); //exp2 = new CHnMMVerificationExperiment("DoodlesRandom", 5, false, configSet); //exp2.execute(); //exp2 = new CHnMMVerificationExperiment("DoodlesSkilled", 5, false, configSet); //exp2.execute(); //exp2 = new CHnMMVerificationExperiment("PseudoSigsRandom", 15, configSet); //exp2.execute(); //exp2 = new CHnMMVerificationExperiment("PseudoSigsSkilled", 15, configSet); //exp2.execute(); //exp2 = new CHnMMVerificationExperiment("DoodlesRandom", 15, configSet); //exp2.execute(); //exp2 = new CHnMMVerificationExperiment("DoodlesSkilled", 15, configSet); //exp2.execute(); //var exp = new DTWExperiment(true, "Doodles", false, 10); //exp.execute(); //var data = DataSets.getSignatures(true); //Console.Write(data); //var dtwRec = new GestureRecognitionLib.DTW.DTWRecognitionSystem(true); //var simpleSubsets = new SimpleSplitSubsetCreator(5); //var crossvalidationSubsets = new CrossvalidationSubsetCreator(2); //var processor = new DynamicAreaPointSampling(0.1); //var newExp = new RecognitionExperiment(dtwRec, simpleSubsets, null, "TimHard"); //var results = newExp.execute(); //string fileName = "DTWGestureRecognition_TimHard_5trains_withTime.csv"; //GestureRecognitionResults.saveResultsToFile("..\\..\\ExperimentResults\\" + fileName, results); }