Quellcode durchsuchen

removed minSimilarities in trackers, added maxMove parameters instead

Alexander Hendrich vor 11 Jahren
Ursprung
Commit
b38d02440d

+ 9 - 4
bbiwarg/Parameters.cs

@@ -76,9 +76,10 @@ namespace bbiwarg
         public static readonly int FingerContourMargin = 4;
 
         // finger tracking
-        public static readonly float FingerTrackerMinSimilarityForTracking = 0.8f;
         public static readonly int FingerTrackerNumFramesDetectedUntilTracked = 5;
         public static readonly int FingerTrackerNumFramesLostUntilDeleted = 10;
+        public static readonly float FingerTrackerMaxTipPointMove = 0.25f*ImageDiagonalLength;
+        public static readonly float FingerTrackerMaxHandPointMove = 0.25f*ImageDiagonalLength;
         public static readonly float FingermXX = 0.00005f;
         public static readonly float FingermXY = 0.0f;
         public static readonly float FingermYY = 0.00005f;
@@ -99,9 +100,9 @@ namespace bbiwarg
         public static readonly int HandExtendMaxDifference = 40;
 
         // hand tracker
-        public static readonly float HandTrackerMinSimilarity = 0.7f;
         public static readonly int HandTrackerNumFramesDetectedUntilTracked = 2;
         public static readonly int HandTrackerNumFramesLostUntilDeleted = 5;
+        public static readonly float HandTrackerMaxCentroidMove = 0.25f * ImageDiagonalLength;
         public static readonly float HandmXX = 0.0005f;
         public static readonly float HandmXY = 0.0f;
         public static readonly float HandmYY = 0.0005f;
@@ -109,9 +110,12 @@ namespace bbiwarg
         // palm detection
 
         // palm tracker
-        public static readonly float PalmTrackerMinSimilarity = 0.5f;
         public static readonly int PalmTrackerNumFramesDetectedUntilTracked = 2;
         public static readonly int PalmTrackerNumFramesLostUntilDeleted = 5;
+        public static readonly float PalmTrackerMaxWristUpperMove = 0.25f * ImageDiagonalLength;
+        public static readonly float PalmTrackerMaxWristLowerMove = 0.25f * ImageDiagonalLength;
+        public static readonly float PalmTrackerMaxFingersUpperMove = 0.25f * ImageDiagonalLength;
+        public static readonly float PalmTrackerMaxFingersLowerMove = 0.25f * ImageDiagonalLength;
         public static readonly float PalmmXX = 0.00005f;
         public static readonly float PalmmXY = 0.0f;
         public static readonly float PalmmYY = 0.00005f;
@@ -129,9 +133,10 @@ namespace bbiwarg
         public static readonly int TouchTipOutsideFactor = 7;
 
         // touch tracking
-        public static readonly float TouchTrackerMinSimilarity = 0.3f;
         public static readonly int TouchTrackerNumFramesDetectedUntilTracked = 1;
         public static readonly int TouchTrackerNumFramesLostUntilDeleted = 5;
+        public static readonly float TouchTrackerMaxAbsolutePositionMove = 0.25f * ImageDiagonalLength;
+        public static readonly float TouchTrackerMaxRelativePositionMove = 0.5f;
         public static readonly float TouchmXX = 0.003f;
         public static readonly float TouchmXY = 0.0f;
         public static readonly float TouchmYY = 0.00165f;

+ 0 - 5
bbiwarg/Recognition/FingerRecognition/FingerTracker.cs

@@ -14,11 +14,6 @@ namespace bbiwarg.Recognition.FingerRecognition
 
         public List<Finger> Fingers { get { return getCurrentObjectsWithState(TrackingState.Tracked); } }
 
-        public FingerTracker()
-            : base(Parameters.FingerTrackerMinSimilarityForTracking)
-        {
-        }
-
         protected override TrackedFinger createTrackedObject(Finger detectedObject)
         {
             return new TrackedFinger(idPool.getNextUnusedID(), detectedObject, Parameters.FingerTrackerNumFramesDetectedUntilTracked, Parameters.FingerTrackerNumFramesLostUntilDeleted);

+ 2 - 2
bbiwarg/Recognition/FingerRecognition/TrackedFinger.cs

@@ -65,11 +65,11 @@ namespace bbiwarg.Recognition.FingerRecognition
 
             //tip position
             float tipPointDistance = tip.getDistanceTo(TipPointPrediction);
-            float tipPointSimilarity = Math.Max(0, 1 - tipPointDistance / Parameters.ImageDiagonalLength);
+            float tipPointSimilarity = Math.Max(0, 1 - tipPointDistance / Parameters.FingerTrackerMaxTipPointMove);
 
             //hand position
             float handPointDistance = hand.getDistanceTo(HandPointPrediction);
-            float handPointSimilarity = Math.Max(0, 1 - handPointDistance / Parameters.ImageDiagonalLength);
+            float handPointSimilarity = Math.Max(0, 1 - handPointDistance / Parameters.FingerTrackerMaxHandPointMove);
 
             return tipPointSimilarity * handPointSimilarity;
         }

+ 0 - 6
bbiwarg/Recognition/HandRecognition/HandTracker.cs

@@ -11,12 +11,6 @@ namespace bbiwarg.Recognition.HandRecognition
     {
         public List<Hand> Hands { get { return getCurrentObjectsWithState(TrackingState.Tracked); } }
 
-
-        public HandTracker()
-            : base(Parameters.HandTrackerMinSimilarity)
-        {
-        }
-
         protected override TrackedHand createTrackedObject(Hand detectedObject)
         {
             return new TrackedHand(idPool.getNextUnusedID(), detectedObject, Parameters.HandTrackerNumFramesDetectedUntilTracked, Parameters.HandTrackerNumFramesLostUntilDeleted);

+ 1 - 1
bbiwarg/Recognition/HandRecognition/TrackedHand.cs

@@ -38,7 +38,7 @@ namespace bbiwarg.Recognition.HandRecognition
         {
             //centroid position
             float centroidDistance = CentroidPrediction.getDistanceTo(detectedHand.Centroid);
-            float centroidSimilarity = Math.Max(0, 1 - centroidDistance / Parameters.ImageDiagonalLength);
+            float centroidSimilarity = Math.Max(0, 1 - centroidDistance / Parameters.HandTrackerMaxCentroidMove);
 
             return centroidSimilarity;
         }

+ 0 - 5
bbiwarg/Recognition/PalmRecognition/PalmTracker.cs

@@ -12,11 +12,6 @@ namespace bbiwarg.Recognition.PalmRecognition
         public List<Palm> Palms { get { return getCurrentObjectsWithState(TrackingState.Tracked); } }
         public List<Palm> OptimizedPalms { get { return getOptimizedPalms(); } }
 
-        public PalmTracker()
-            : base(Parameters.PalmTrackerMinSimilarity)
-        {
-        }
-
         protected override TrackedPalm createTrackedObject(Palm detectedPalm)
         {
             return new TrackedPalm(idPool.getNextUnusedID(), detectedPalm, Parameters.PalmTrackerNumFramesDetectedUntilTracked, Parameters.PalmTrackerNumFramesLostUntilDeleted);

+ 4 - 4
bbiwarg/Recognition/PalmRecognition/TrackedPalm.cs

@@ -67,19 +67,19 @@ namespace bbiwarg.Recognition.PalmRecognition
 
             //wristUpper
             float wristUpperDistance = WristUpperPrediction.getDistanceTo(detectedPalm.WristUpper);
-            float wristUpperSimilarity = Math.Max(0, 1 - wristUpperDistance / Parameters.ImageDiagonalLength);
+            float wristUpperSimilarity = Math.Max(0, 1 - wristUpperDistance / Parameters.PalmTrackerMaxWristUpperMove);
 
             //wristLower
             float wristLowerDistance = WristLowerPrediction.getDistanceTo(detectedPalm.WristLower);
-            float wristLowerSimilarity = Math.Max(0, 1 - wristLowerDistance / Parameters.ImageDiagonalLength);
+            float wristLowerSimilarity = Math.Max(0, 1 - wristLowerDistance / Parameters.PalmTrackerMaxWristLowerMove);
 
             //fingersUpper
             float fingersUpperDistance = FingersUpperPrediction.getDistanceTo(detectedPalm.FingersUpper);
-            float fingersUpperSimilarity = Math.Max(0, 1 - fingersUpperDistance / Parameters.ImageDiagonalLength);
+            float fingersUpperSimilarity = Math.Max(0, 1 - fingersUpperDistance / Parameters.PalmTrackerMaxFingersUpperMove);
 
             //fingersLower
             float fingersLowerDistance = FingersLowerPrediction.getDistanceTo(detectedPalm.FingersLower);
-            float fingersLowerSimilarity = Math.Max(0, 1 - fingersLowerDistance / Parameters.ImageDiagonalLength);
+            float fingersLowerSimilarity = Math.Max(0, 1 - fingersLowerDistance / Parameters.PalmTrackerMaxFingersLowerMove);
 
             float similarity = handSimilarity * wristUpperSimilarity * wristLowerSimilarity * fingersUpperSimilarity * fingersLowerSimilarity;
 

+ 0 - 136
bbiwarg/Recognition/TouchRecognition/TouchTracker.cs

@@ -19,11 +19,6 @@ namespace bbiwarg.Recognition.TouchRecognition
         public event TouchEventHandler TouchMove;
         public event TouchEventHandler TouchUp;
 
-        public TouchTracker()
-            : base(Parameters.TouchTrackerMinSimilarity)
-        {
-        }
-
         protected override TrackedTouchEvent createTrackedObject(TouchEvent detectedObject)
         {
             TrackedTouchEvent tte = new TrackedTouchEvent(idPool.getNextUnusedID(), detectedObject, Parameters.TouchTrackerNumFramesDetectedUntilTracked, Parameters.TouchTrackerNumFramesLostUntilDeleted);
@@ -33,135 +28,4 @@ namespace bbiwarg.Recognition.TouchRecognition
             return tte;
         }
     }
-
-    /*
-    public class PalmTouchEventArgs : EventArgs
-    {
-        public int TrackID { get; private set; }
-        public Vector2D Position { get; private set; }
-
-        public PalmTouchEventArgs(int trackID, Vector2D position)
-        {
-            TrackID = trackID;
-            Position = position;
-        }
-    }
-
-    public delegate void PalmTouchEventHandler(object sender, PalmTouchEventArgs e);
-
-    class TouchTracker : OldTracker<TouchEvent>
-    {
-        public List<TouchEvent> TouchEvents { get { return TrackedObjects; } }
-        public Dictionary<int, Kalman2DPositionFilter> kalmanFilters;
-        public event PalmTouchEventHandler PalmTouchDown;
-        public event PalmTouchEventHandler PalmTouchMove;
-        public event PalmTouchEventHandler PalmTouchUp;
-
-        protected virtual void OnPalmTouchDown(PalmTouchEventArgs e) { if (PalmTouchDown != null) PalmTouchDown(this, e); }
-        protected virtual void OnPalmTouchMove(PalmTouchEventArgs e) { if (PalmTouchMove != null) PalmTouchMove(this, e); }
-        protected virtual void OnPalmTouchUp(PalmTouchEventArgs e) { if (PalmTouchUp != null) PalmTouchUp(this, e); }
-
-        public TouchTracker()
-            : base(Constants.TouchEventNumFramesDetectedUntilTracked, Constants.TouchEventNumFramesLostUntilDeleted, Constants.TouchEventMinSimilarityForTracking)
-        {
-            kalmanFilters = new Dictionary<int, Kalman2DPositionFilter>();
-        }
-
-        public new void reset()
-        {
-            foreach (int id in kalmanFilters.Keys)
-            {
-                OnPalmTouchUp(new PalmTouchEventArgs(id, kalmanFilters[id].getPrediction()));
-            }
-            kalmanFilters.Clear();
-            base.reset();
-        }
-
-        protected override void onDetect(object sender, EventArgs e)
-        {
-            OldTrackableObjectHistory<TouchEvent> history = (OldTrackableObjectHistory<TouchEvent>)sender;
-            if (history.NumFramesInCurrentState == 1)
-                Logger.log("TouchEvent #" + history.ID.ToString() + " detected", LogSubject.TouchTracker);
-        }
-
-        protected override void onTrack(object sender, EventArgs e)
-        {
-            OldTrackableObjectHistory<TouchEvent> history = (OldTrackableObjectHistory<TouchEvent>)sender;
-            if (history.NumFramesInCurrentState == 1)
-                Logger.log("TouchEvent #" + history.ID.ToString() + " tracked", LogSubject.TouchTracker);
-
-            if (history.LastObject is PalmTouchEvent)
-            {
-                PalmTouchEvent pte = (PalmTouchEvent)history.LastObject;
-                if (history.NumFramesInCurrentState == 1)
-                    palmTouchDown(history.ID, pte.RelativePalmPosition);
-                else
-                    palmTouchMove(history.ID, pte.RelativePalmPosition);
-            }
-        }
-
-        protected override void onRetrack(object sender, EventArgs e)
-        {
-            OldTrackableObjectHistory<TouchEvent> history = (OldTrackableObjectHistory<TouchEvent>)sender;
-            if (history.NumFramesInCurrentState == 1)
-                Logger.log("TouchEvent #" + history.ID.ToString() + " retracked", LogSubject.TouchTracker);
-
-            if (history.LastObject is PalmTouchEvent)
-            {
-                PalmTouchEvent pte = (PalmTouchEvent)history.LastObject;
-                palmTouchMove(history.ID, pte.RelativePalmPosition);
-            }
-            else throw new ArgumentException();
-        }
-
-        protected override void onLoose(object sender, EventArgs e)
-        {
-            OldTrackableObjectHistory<TouchEvent> history = (OldTrackableObjectHistory<TouchEvent>)sender;
-            if (history.NumFramesInCurrentState == 1)
-                Logger.log("TouchEvent #" + history.ID.ToString() + " lost", LogSubject.TouchTracker);
-        }
-
-        protected override void onDelete(object sender, EventArgs e)
-        {
-            OldTrackableObjectHistory<TouchEvent> history = (OldTrackableObjectHistory<TouchEvent>)sender;
-            if (history.NumFramesInCurrentState == 1)
-                Logger.log("TouchEvent #" + history.ID.ToString() + " deleted", LogSubject.TouchTracker);
-
-            if (history.LastObject is PalmTouchEvent)
-            {
-                PalmTouchEvent pte = (PalmTouchEvent)history.LastObject;
-                palmTouchUp(history.ID, pte.RelativePalmPosition);
-            }
-            else throw new ArgumentException();
-        }
-
-
-        private void palmTouchDown(int id, Vector2D relPos)
-        {
-            Kalman2DPositionFilter kalmanFilter = new Kalman2DPositionFilter(Constants.TouchmXX, Constants.TouchmXY, Constants.TouchmYY, Constants.TouchProcessNoise);
-            kalmanFilter.setInitialPosition(relPos);
-            kalmanFilters.Add(id, kalmanFilter);
-            OnPalmTouchDown(new PalmTouchEventArgs(id, relPos));
-            Logger.log("TouchEvent #" + id.ToString() + " touchDown at (" + relPos.X + ", " + relPos.Y + ")", LogSubject.TouchEvents);
-        }
-
-        private void palmTouchMove(int id, Vector2D relPos)
-        {
-            Vector2D correctedRelPos = kalmanFilters[id].getCorrectedPosition(relPos);
-            OnPalmTouchMove(new PalmTouchEventArgs(id, correctedRelPos));
-            Logger.log("TouchEvent #" + id.ToString() + " touchMove to (" + relPos.X + ", " + relPos.Y + ")", LogSubject.TouchEvents);
-        }
-
-        private void palmTouchUp(int id, Vector2D relPos)
-        {
-            Kalman2DPositionFilter kalmanFilter;
-            if (kalmanFilters.TryGetValue(id, out kalmanFilter))
-            {
-                Vector2D correctedRelPos = kalmanFilter.getCorrectedPosition(relPos);
-                OnPalmTouchUp(new PalmTouchEventArgs(id, correctedRelPos));
-                kalmanFilters.Remove(id);
-                Logger.log("TouchEvent #" + id.ToString() + " touchUp at (" + relPos.X + ", " + relPos.Y + ")", LogSubject.TouchEvents);
-            }
-        }
-    }*/
 }

+ 2 - 2
bbiwarg/Recognition/TouchRecognition/TrackedTouchEvent.cs

@@ -84,11 +84,11 @@ namespace bbiwarg.Recognition.TouchRecognition
 
             //absolute position similarity
             float absoluteDistance = detectedTouchEvent.AbsolutePosition.getDistanceTo(AbsolutePositionPrediction);
-            float absoluteSimilarity = Math.Max(0, 1 - absoluteDistance / Parameters.ImageDiagonalLength);
+            float absoluteSimilarity = Math.Max(0, 1 - absoluteDistance / Parameters.TouchTrackerMaxAbsolutePositionMove);
 
             //relative position similarity
             float relativeDistance = detectedTouchEvent.RelativePosition.getDistanceTo(RelativePositionPrediction);
-            float relativeSimilarity = Math.Max(0, 1 - relativeDistance / 1f);
+            float relativeSimilarity = Math.Max(0, 1 - relativeDistance / Parameters.TouchTrackerMaxRelativePositionMove);
 
             float similarity = fingerSimilarity * absoluteSimilarity * relativeSimilarity;
 

+ 2 - 3
bbiwarg/Recognition/Tracking/Tracker.cs

@@ -17,9 +17,8 @@ namespace bbiwarg.Recognition.Tracking
         public List<TrackedT> TrackedObjects;
 
 
-        public Tracker(float minSimilarity)
+        public Tracker()
         {
-            this.minSimilarity = minSimilarity;
             reset();
         }
 
@@ -80,7 +79,7 @@ namespace bbiwarg.Recognition.Tracking
                 foreach (T detectedObject in detectedObjects) {
                     float similarityValue = trackedObject.calculateSimilarity(detectedObject);
                     Similarity<T, TrackedT> similarity = new Similarity<T,TrackedT>(trackedObject, detectedObject, similarityValue);
-                    if (similarity.Value > minSimilarity)
+                    if (similarity.Value > 0)
                         similarities.Add(similarity);
                 }
             }