FingerHistory.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace bbiwarg.Recognition.FingerRecognition
  7. {
  8. public enum TrackingState
  9. {
  10. None,
  11. Detected,
  12. Tracked,
  13. Lost,
  14. }
  15. class FingerHistory
  16. {
  17. public List<Finger> Fingers { get; private set; }
  18. public List<TrackingState> States { get; private set; }
  19. public Finger LastFinger { get; private set; }
  20. public Finger CurrentFinger { get { return Fingers[Fingers.Count - 1]; } }
  21. public TrackingState CurrentState { get { return States[States.Count - 1]; } }
  22. public FingerHistory(Finger finger)
  23. {
  24. Fingers = new List<Finger>();
  25. States = new List<TrackingState>();
  26. Fingers.Add(finger);
  27. States.Add(TrackingState.Detected);
  28. LastFinger = finger;
  29. }
  30. public void addFinger(Finger finger)
  31. {
  32. TrackingState previousState = CurrentState;
  33. TrackingState newState = TrackingState.None;
  34. int numFramesInCurrentState = getNumFramesInCurrentState();
  35. if (finger == null)
  36. newState = TrackingState.Lost;
  37. else if (previousState == TrackingState.Tracked)
  38. newState = TrackingState.Tracked;
  39. else if (previousState == TrackingState.Detected)
  40. {
  41. if (numFramesInCurrentState == Constants.FingerNumFramesUntilTracked)
  42. newState = TrackingState.Tracked;
  43. else
  44. newState = TrackingState.Detected;
  45. }
  46. Fingers.Add(finger);
  47. States.Add(newState);
  48. if (finger != null)
  49. LastFinger = finger;
  50. }
  51. public int getNumFramesInCurrentState()
  52. {
  53. TrackingState currentState = CurrentState;
  54. int count = 0;
  55. for (int i = States.Count - 1; i >= 0; i++)
  56. {
  57. if (States[i] == currentState)
  58. count++;
  59. else
  60. break;
  61. }
  62. return count;
  63. }
  64. }
  65. }