|
@@ -25,20 +25,28 @@ namespace bbiwarg.Recognition.FingerRecognition
|
|
public FingerTracker()
|
|
public FingerTracker()
|
|
{
|
|
{
|
|
FingerHistories = new List<FingerHistory>();
|
|
FingerHistories = new List<FingerHistory>();
|
|
|
|
+ Fingers = new List<Finger>();
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
- public void updateTrackedFingers(List<Finger> detectedFingers)
|
|
|
|
|
|
+ public void updateTrackedFingers(List<Finger> detectedFingers, OutputImage outputImage)
|
|
{
|
|
{
|
|
if (FingerHistories.Count == 0)
|
|
if (FingerHistories.Count == 0)
|
|
{
|
|
{
|
|
foreach (Finger finger in detectedFingers)
|
|
foreach (Finger finger in detectedFingers)
|
|
- FingerHistories.Add(new FingerHistory(finger));
|
|
|
|
|
|
+ {
|
|
|
|
+ FingerHistory fh = new FingerHistory(finger);
|
|
|
|
+ FingerHistories.Add(fh);
|
|
|
|
+ if (Constants.VerboseFingerTracker) Console.WriteLine("Finger #" + fh.ID + " detected");
|
|
|
|
+ }
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
updateHistories(detectedFingers);
|
|
updateHistories(detectedFingers);
|
|
removeLongLostFingers();
|
|
removeLongLostFingers();
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ drawFingers(outputImage);
|
|
}
|
|
}
|
|
|
|
|
|
private void updateHistories(List<Finger> detectedFingers)
|
|
private void updateHistories(List<Finger> detectedFingers)
|
|
@@ -69,9 +77,11 @@ namespace bbiwarg.Recognition.FingerRecognition
|
|
}
|
|
}
|
|
|
|
|
|
//add new fingerHistory for each new unmatched finger
|
|
//add new fingerHistory for each new unmatched finger
|
|
- foreach (Finger f in unasignedDetectedFingers)
|
|
|
|
|
|
+ foreach (Finger finger in unasignedDetectedFingers)
|
|
{
|
|
{
|
|
- FingerHistories.Add(new FingerHistory(f));
|
|
|
|
|
|
+ FingerHistory fh = new FingerHistory(finger);
|
|
|
|
+ FingerHistories.Add(fh);
|
|
|
|
+ if (Constants.VerboseFingerTracker) Console.WriteLine("Finger #" + fh.ID + " detected");
|
|
}
|
|
}
|
|
|
|
|
|
//add null finger to TrackedFingers that haven't found a match in this frame (status tracked->lost)
|
|
//add null finger to TrackedFingers that haven't found a match in this frame (status tracked->lost)
|
|
@@ -128,9 +138,20 @@ namespace bbiwarg.Recognition.FingerRecognition
|
|
{
|
|
{
|
|
for (int i = FingerHistories.Count - 1; i >= 0; i--)
|
|
for (int i = FingerHistories.Count - 1; i >= 0; i--)
|
|
{
|
|
{
|
|
- FingerHistory tf = FingerHistories[i];
|
|
|
|
- if (tf.CurrentState == TrackingState.Lost && tf.getNumFramesInCurrentState() >= Constants.FingerNumFramesUntilLost)
|
|
|
|
|
|
+ FingerHistory fh = FingerHistories[i];
|
|
|
|
+ if (fh.CurrentState == TrackingState.Lost && fh.getNumFramesInCurrentState() >= Constants.FingerNumFramesUntilLost)
|
|
|
|
+ {
|
|
FingerHistories.RemoveAt(i);
|
|
FingerHistories.RemoveAt(i);
|
|
|
|
+ if (Constants.VerboseFingerTracker) Console.WriteLine("Finger #" + fh.ID + " lost");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void drawFingers(OutputImage outputImage)
|
|
|
|
+ {
|
|
|
|
+ foreach (Finger finger in Fingers)
|
|
|
|
+ {
|
|
|
|
+ finger.draw(outputImage, true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|