Beispiel #1
0
        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();
        }