public override void Train() { CheckError(); var dataset = new List <(Point3D label, CalibratingPushData data)>(); var errors = new List <double>(); foreach (var item in RawData) { var key = EyeGazeInfo.ToGazeVector(item.Key); var data = EyeGazeInfo.ToGazeVector(item.Value.Face.GazeInfo.Vector); var e = Math.Pow(key.X - data.X, 2) + Math.Pow(key.Y - data.Y, 2); errors.Add(e); dataset.Add((item.Key, item.Value)); } errors.Sort(); var trainX = new Point[dataset.Count]; var trainY = new Point[dataset.Count]; int i = 0; foreach (var item in dataset) { var label = EyeGazeInfo.ToGazeVector(item.label); var train = EyeGazeInfo.ToGazeVector(item.data.Face.GazeInfo.Vector); trainX[i] = new Point(train.X, label.X); trainY[i] = new Point(train.Y, label.Y); i++; } X.Train(trainX); Y.Train(trainY); CheckError(); }
public Point3D Apply(Point3D vec) { var ret = EyeGazeInfo.ToGazeVector(vec); ret.X = X.Predict(ret.X); ret.Y = Y.Predict(ret.Y); return(ret); }
private double CheckError() { var errors = new List <double>(); foreach (var item in TestData) { var input = EyeGazeInfo.ToGazeVector(item.Value.Face.GazeInfo.Vector); var x = X.Predict(input.X); var y = Y.Predict(input.Y); var key = EyeGazeInfo.ToGazeVector(item.Key); var error = Math.Sqrt(Math.Pow(x - key.X, 2) + Math.Pow(y - key.Y, 2)); errors.Add(error); } var errAvg = errors.Average(); var errMax = errors.Max(); Logger.Log(this, $"Error avg: {errAvg}"); Logger.Log(this, $"Error max: {errMax}"); return(errAvg); }
public override void Train() { CheckError(); var trainX = new Point[RawData.Count]; var trainY = new Point[RawData.Count]; int i = 0; foreach (var item in RawData) { var label = EyeGazeInfo.ToGazeVector(item.Key); var train = EyeGazeInfo.ToGazeVector(item.Value.Face.GazeInfo.Vector); trainX[i] = new Point(train.X, label.X); trainY[i] = new Point(train.Y, label.Y); i++; } X.Train(trainX); Y.Train(trainY); CheckError(); }