1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using bbiwarg.Images;
- namespace bbiwarg.Detectors.Fingers
- {
- class FingerTracker
- {
- private FingerImage fingerImage;
- private List<Finger>[] detectedFingers;
- private List<Finger> trackedFingers;
- private int framesUntilTracked;
- public FingerTracker() {
- framesUntilTracked = 5;
- detectedFingers = new List<Finger>[framesUntilTracked];
- for (int i = 0; i < framesUntilTracked; i++)
- {
- detectedFingers[i] = new List<Finger>();
- }
- }
- public List<Finger> getFingers() {
- return trackedFingers;
- }
- public void setDetectedTouchEventsThisFrame(List<Finger> detectedFingersThisFrame, FingerImage fingerImage)
- {
- this.fingerImage = fingerImage;
- for (int i = (framesUntilTracked - 1); i > 0; i--)
- {
- detectedFingers[i] = detectedFingers[i - 1];
- }
- detectedFingers[0] = detectedFingersThisFrame;
- findTrackedFingers();
- }
- private void findTrackedFingers()
- {
- trackedFingers = new List<Finger>();
- foreach (Finger finger in detectedFingers[0])
- {
- bool tracked = true;
- for (int i = 1; i < framesUntilTracked; i++)
- {
- if (!hasSimilarFingerInFrame(finger, i)) tracked = false;
- }
- if (tracked)
- {
- fingerImage.drawLine(finger.getLineEndPoint1(), finger.getLineEndPoint2(), FingerImageState.fingerTracked);
- trackedFingers.Add(finger);
- }
- }
- }
- private bool hasSimilarFingerInFrame(Finger finger, int frame) {
- foreach (Finger f in detectedFingers[frame])
- {
- if (finger.isSimilarTo(f))
- return true;
- }
- return false;
- }
- }
- }
|