private EyeMovement ( EyeMovementType type, DateTimeOffset timestamp, DateTimeOffset endTimestamp ) { MovementType = type; Timestamp = timestamp; EndTimestamp = endTimestamp; }
//Убираем повторы из записи тоби 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); }
public EyeMovement ( EyeMovementType type, Point2 gazePoint, DateTimeOffset timestamp, DateTimeOffset endTimestamp ) : this ( type, timestamp, endTimestamp ) { position = gazePoint; }
public EyeMovement ( EyeMovementType type, EyeSample averageSample, DateTimeOffset timestamp, DateTimeOffset endTimestamp ) : this ( type, timestamp, endTimestamp ) { AverageSample = averageSample; }
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); })); }