/// <summary> /// Checks if the two movements correspond to the same by comparing each frame. /// </summary> public static bool match(SkeletonRecording original, SkeletonRecording imitation) { float accumError = 0; SkeletonRecording safeOriginal = new SkeletonRecording(original); SkeletonRecording safeImitation = new SkeletonRecording(imitation); safeOriginal.restart(); safeImitation.restart(); while (!safeOriginal.finished()) { Skeleton orig = safeOriginal.next(); Skeleton imit = safeImitation.next(); float error = compareAngles(orig, imit); if (error > delta) { return(false); } accumError += error; if (accumError > deltaAccum) { return(false); } } return(accumError < deltaAccum); }
private void NormalSpeedLoadButton_Click(object sender, RoutedEventArgs e) { if (movements[(int)Movement.NORMAL] != null) { SkeletonRecording movement = movements[(int)Movement.NORMAL].getMovement(); skeletonClient.subscribe(new RecordingReproducer(skeletonCanvas, movement, movement.getTag(), Colors.Black, skeletonClient)); return; } Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); if (dlg.ShowDialog() == true) { SkeletonRecording movement = new SkeletonRecording("normalSpeedLoadedMovement"); movement.loadFromFile(dlg.FileName); skeletonClient.subscribe(new RecordingReproducer(skeletonCanvas, movement, movement.getTag(), Colors.Black, skeletonClient)); // Loading movement to analyzer movements[(int)Movement.NORMAL] = new MovementAnalyzer(movement, "NormalMovementAnalyzerStream", new NormalSpeedAction(Array.AsReadOnly <VlcController>(allControllers)), Movement.NORMAL, this); movements[(int)Movement.NORMAL].setThreshold(movementThresholds[(int)Movement.NORMAL]); skeletonClient.subscribe(movements[(int)Movement.NORMAL]); normalEnabler.Background = new SolidColorBrush(Colors.Red); } }
public RecordingReproducer(Canvas skeletonCanvas, SkeletonRecording recorder, string tag, Color color) { this.recorder = recorder; recorder.restart(); this.tag = tag; this.color = color; this.skeletonCanvas = skeletonCanvas; }
public MovementAnalyzer(SkeletonRecording movement, string tag, Action action, MainWindow.Movement movementType, MainWindow container) { stream = new SkeletonRecording(tag, movement.size()); this.movement = movement; this.movementType = movementType; this.action = action; this.container = container; lastUse = DateTime.Now; }
public SkeletonRecording(SkeletonRecording original) { foreach (Skeleton skel in original.skeletons) { skeletons.Add(skel); } tag = original.tag; end = false; immutable = true; }
private void PlayButton_Click(object sender, RoutedEventArgs e) { SkeletonRecording recording = recordingStream.getCurrentRecording(); if (recording != null) { skeletonClient.subscribe(new RecordingReproducer(skeletonCanvas, recording, recording.getTag(), Colors.Black, skeletonClient)); } }
private void LoadButton_Click(object sender, RoutedEventArgs e) { Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); if (dlg.ShowDialog() == true) { loadedMovement = new SkeletonRecording("loadedMovement"); loadedMovement.loadFromFile(dlg.FileName); skeletonClient.subscribe(new RecordingReproducer(skeletonCanvas, loadedMovement, loadedMovement.getTag(), Colors.Black, skeletonClient)); } }
/// <summary> /// Calculates the difference between the two movements as the absolute sum of each frame error. /// </summary> public static float difference(SkeletonRecording original, SkeletonRecording imitation) { float accumError = 0; SkeletonRecording safeOriginal = new SkeletonRecording(original); SkeletonRecording safeImitation = new SkeletonRecording(imitation); safeOriginal.restart(); safeImitation.restart(); while (!safeOriginal.finished()) { Skeleton orig = safeOriginal.next(); Skeleton imit = safeImitation.next(); float error = compareAngles(orig, imit); accumError += error; } return(accumError); }
private void FasterLoadButton_Click(object sender, RoutedEventArgs e) { if (movements[(int)Movement.FASTER] != null) { SkeletonRecording movement = movements[(int)Movement.FASTER].getMovement(); skeletonClient.subscribe(new RecordingReproducer(skeletonCanvas, movement, movement.getTag(), Colors.Black, skeletonClient)); return; } Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); if (dlg.ShowDialog() == true) { SkeletonRecording movement = new SkeletonRecording("fasterLoadedMovement"); movement.loadFromFile(dlg.FileName); skeletonClient.subscribe(new RecordingReproducer(skeletonCanvas, movement, movement.getTag(), Colors.Black, skeletonClient)); // Loading movement to analyzer movements[(int)Movement.FASTER] = new MovementAnalyzer(movement, "FasterMovementAnalyzerStream", new FasterAction(this), Movement.FASTER, this); movements[(int)Movement.FASTER].setThreshold(movementThresholds[(int)Movement.FASTER]); skeletonClient.subscribe(movements[(int)Movement.FASTER]); fasterEnabler.Background = new SolidColorBrush(Colors.Red); } }
public void startFixedRecording(int length) { recording = true; recorder = new SkeletonRecording(recordingTag, length); }
public void startRecording() { recording = true; recorder = new SkeletonRecording(recordingTag); }