public static Jackknife.Vector ToJKVector(Machete.Vector v) { List <double> JKVectorData = new List <double>(); // Go through all data in vector foreach (double data in v.Data) { JKVectorData.Add(data); } Jackknife.Vector jkv = new Jackknife.Vector(JKVectorData); return(jkv); }
public static List <Jackknife.Vector> GetJKBuffer(List <Machete.Vector> buffer) { List <Jackknife.Vector> retpts = new List <Jackknife.Vector>(); foreach (Machete.Vector v in buffer) { List <double> JKVectorData = new List <double>(); // Go through all data in vector foreach (double data in v.Data) { JKVectorData.Add(data); } Jackknife.Vector jv = new Jackknife.Vector(JKVectorData); retpts.Add(jv); } return(retpts); }
/** * This might just be the worst piece of code that * I will ever write in my life */ public static List <Jackknife.Sample> GetJKTrainSet(List <Machete.Sample> in_samples) { List <Jackknife.Sample> samples = new List <Jackknife.Sample>(); foreach (Machete.Sample y_s in in_samples) { // Copy sample ids Jackknife.Sample s = new Jackknife.Sample( y_s.SubjectId, y_s.GestureId, 0); // Copy sample trajectory List <Jackknife.Vector> newTrajectory = new List <Jackknife.Vector>(); // Go through each vector foreach (Machete.Vector yeahSampleTrajectoryV in y_s.FilteredTrajectory) { List <double> JKVectorData = new List <double>(); // Go through all data in vector foreach (double data in yeahSampleTrajectoryV.Data) { JKVectorData.Add(data); } Jackknife.Vector v = new Jackknife.Vector(JKVectorData); newTrajectory.Add(v); } s.AddTrajectory(newTrajectory); samples.Add(s); } return(samples); }
public static List <Jackknife.Vector> GetJKBufferFromVideo( List <Machete.Vector> video, int startFrameNo, int endFrameNo ) { List <Jackknife.Vector> buffer = new List <Jackknife.Vector>(); for (int ii = startFrameNo; ii <= endFrameNo; ii++) { Machete.Vector v = video[ii]; // Go through all data in vector List <double> JKVectorData = new List <double>(); foreach (double data in v.Data) { JKVectorData.Add(data); } Jackknife.Vector jv = new Jackknife.Vector(JKVectorData); buffer.Add(jv); } return(buffer); }
public void Update(Jackknife.Vector pt) { buffer.Insert(pt); }
public static Results EvaluateSessionWindowed(DeviceType device, int subject_id) { configuartion_parameters_t parameneters = new configuartion_parameters_t(device); // Load subject dataset Dataset ds = Global.load_subject_dataset(device, subject_id); List <Sample> train_set = Global.GetTrainSet(ds, 1); // Covert the dataset to format accepted by Jackknife List <Jackknife.Sample> jk_train_set = JackknifeConnector.GetJKTrainSet(train_set); // Load subject session List <Frame> frames = new List <Frame>(); Global.load_session(device, subject_id, frames, ds); // Load ground truth List <GestureCommand> cmds = new List <GestureCommand>(); GestureCommand.GetAllCommands(cmds, ds, device, subject_id); // Train the recognizer JackknifeBlades blades = new JackknifeBlades(); blades.SetIPDefaults(); blades.ResampleCnt = 20; Jackknife.Jackknife jk = new Jackknife.Jackknife(blades); foreach (Jackknife.Sample s in jk_train_set) { jk.AddTemplate(s); } // Set between 2.0 and 10.0 in steps of .25 // to find the best result jk.SetRejectionThresholds(5.25f); // Set up filter for session points ExponentialMovingAverage ema_filter = new ExponentialMovingAverage(frames[0].pt); Vector pt; WindowSegmentor windowSegmentor = new WindowSegmentor(jk); //List<RecognitionResult> rresults = new List<RecognitionResult>(); List <ContinuousResult> continuous_results = new List <ContinuousResult>(); // Go through session for (int session_pt = 0; session_pt < frames.Count; session_pt++) { long ts1 = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; // at beginning pt = ema_filter.Filter(frames[session_pt].pt, 1 / (double)parameneters.fps); long ts2 = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; // after filter Jackknife.Vector jkpt = JackknifeConnector.ToJKVector(pt); windowSegmentor.Update(jkpt); windowSegmentor.Segment(continuous_results); if (session_pt % 2000 == 0) { Debug.Log(string.Format("{0}% Done", (double)session_pt / (double)frames.Count * 100.0)); } } foreach (ContinuousResult cr in continuous_results) { Debug.Log(string.Format("st {0}, en {1}, gid {2}", cr.startFrameNo, cr.endFrameNo, cr.gid)); } // Per gesture confusion matrix List <ConfisionMatrix> cm = new List <ConfisionMatrix>(); for (int ii = 0; ii < ds.Gestures.Count; ii++) { cm.Add(new ConfisionMatrix()); } for (int ii = 0; ii < continuous_results.Count; ii++) { ContinuousResult result = continuous_results[ii]; bool found = false; int cidx = 0; for (cidx = 0; cidx < cmds.Count; cidx++) { found = cmds[cidx].Hit(result); if (found == true) { break; } } if (found == true) { // true positive if (cmds[cidx].detected == false) { cmds[cidx].detected = true; cm[result.gid].tp += 1.0f; } } else { bool bad = GestureCommand.IsBadCommand( frames, result); if (bad == true) { continue; } // false positive cm[result.gid].fp += 1.0f; } } // false negatives for (int cidx = 0; cidx < cmds.Count; cidx++) { if (cmds[cidx].detected == true) { continue; } cm[cmds[cidx].gid].fn += 1.0; } Results ret = new Results(); for (int ii = 0; ii < cm.Count; ii++) { ret.AppendResults(cm[ii]); } ret.PrintF(); return(ret); }