Exemple #1
0
 private EyeMovement
 (
     EyeMovementType type,
     DateTimeOffset timestamp,
     DateTimeOffset endTimestamp
 )
 {
     MovementType = type;
     Timestamp    = timestamp;
     EndTimestamp = endTimestamp;
 }
Exemple #2
0
        //Убираем повторы из записи тоби
        public List <EyeMovementEventRecord> CompactRecords(List <EyeMovementEventRecord> records)
        {
            List <EyeMovementEventRecord> RecordsNew = new List <EyeMovementEventRecord>();
            EyeMovementType Before = EyeMovementType.Other;

            foreach (var tr in records)
            {
                if (tr.Type != Before)
                {
                    RecordsNew.Add(tr);
                    Before = tr.Type;
                }
            }
            return(RecordsNew);
        }
Exemple #3
0
 public EyeMovement
 (
     EyeMovementType type,
     Point2 gazePoint,
     DateTimeOffset timestamp,
     DateTimeOffset endTimestamp
 )
     : this
     (
         type,
         timestamp,
         endTimestamp
     )
 {
     position = gazePoint;
 }
Exemple #4
0
 public EyeMovement
 (
     EyeMovementType type,
     EyeSample averageSample,
     DateTimeOffset timestamp,
     DateTimeOffset endTimestamp
 )
     : this
     (
         type,
         timestamp,
         endTimestamp
     )
 {
     AverageSample = averageSample;
 }
Exemple #5
0
 public EyeMovement
 (
     EyeMovementType type,
     IEnumerable <EyeVelocity> samples,
     EyeSample averageSample,
     DateTimeOffset timestamp,
     DateTimeOffset endTimestamp
 )
     : this
     (
         type,
         averageSample,
         timestamp,
         endTimestamp
     )
 {
     Samples = samples?.ToList() ?? Samples;
 }
        public static IObservable <EyeMovement> ClassifyMovements(this IObservable <EyeVelocity> velocities, double velocityThreshold)
        {
            return(velocities.Buffer((first, current) => ClassifyMovement(first, velocityThreshold) != ClassifyMovement(current, velocityThreshold))
                   .Where(b => b.Any())
                   .Buffer(2, 1)
                   .Scan <IList <IList <EyeVelocity> >, EyeMovement>(null, (movement, buffers) =>
            {
                var current = buffers.First();
                var last = buffers.LastOrDefault();

                var currentFirstSample = current.First();
                DateTimeOffset startTimestamp = currentFirstSample.Eye.Timestamp;

                if (movement != null)
                {
                    var startTicksDiff = movement.EndTimestamp - movement.Samples.Last().Eye.Timestamp;

                    startTimestamp = startTimestamp.Subtract(startTicksDiff.Duration());
                }

                var currentLastSample = current.Last();
                DateTimeOffset endTimestamp = currentLastSample.Eye.Timestamp;

                if (last != null && last != current)
                {
                    var endTicksDiff = (last.First().Eye.Timestamp - endTimestamp).Duration().Ticks / 2;

                    endTimestamp = endTimestamp.Add(TimeSpan.FromTicks(endTicksDiff));
                }

                EyeMovementType movementType = ClassifyMovement(current.First(), velocityThreshold);

                EyeSample averageSample = null;
                if (movementType == EyeMovementType.Fixation)
                {
                    averageSample = EyeSampleUtils.Average(current.Select(s => s.Eye));
                }

                return new EyeMovement(movementType, current, averageSample, startTimestamp, endTimestamp);
            }));
        }