Jelajahi Sumber

changes finger.getSimilarity to use tipPoint+handPoint

Alexander Hendrich 11 tahun lalu
induk
melakukan
d1869df60c

+ 8 - 7
bbiwarg/Constants.cs

@@ -13,7 +13,7 @@ namespace bbiwarg
     {
         // Logger
         public static readonly LogSubject LogLevel =
-            LogSubject.FingerTracker;
+            LogSubject.None;
         
         // Output
         public static readonly int OutputNumImages = 5;
@@ -52,14 +52,15 @@ namespace bbiwarg
         public static readonly int FingerCrippleOutMinDifference = 15;
 
         // finger tracking
+        private static Vector2D max = new Vector2D(320, 240);
         public static readonly int FingerNumFramesUntilTracked = 5;
         public static readonly int FingerNumFramesUntilLost = 10;
-        public static readonly float FingerMinSimilarityForTracking = 0.1f;
-        public static readonly float FingerSimilarityMaxTipPointDistance = 100;
-        public static readonly float FingerSimilarityMaxHandPointDistance = 50;
-        public static readonly float FingerSimilarityMaxAngle = (float)(30 * Math.PI / 180); // 30°
-        public static readonly float FingerSimilarityMaxParallelDistance = 80;
-        public static readonly float FingerSimilarityMaxVerticalDistance = 20;
+        public static readonly float FingerMinSimilarityForTracking = 0.7f;
+        public static readonly float FingerSimilarityMaxTipPointDistance = max.Length;
+        public static readonly float FingerSimilarityMaxHandPointDistance = max.Length;
+        //public static readonly float FingerSimilarityMaxAngle = (float)(45 * Math.PI / 180); // 45°
+        //public static readonly float FingerSimilarityMaxParallelDistance = 100;
+        //public static readonly float FingerSimilarityMaxVerticalDistance = 20;
 
         // hand detection
         public static readonly float HandMaxSize = 0.7f;

+ 6 - 4
bbiwarg/Recognition/FingerRecognition/Finger.cs

@@ -36,7 +36,7 @@ namespace bbiwarg.Recognition.FingerRecognition
             Finger compareFinger = (Finger)compareObject;
             LineSegment2D compareLineSegment = compareFinger.LineSegment;
             Line2D compareLine = compareLineSegment.Line;
-            /*
+            
             //tip position
             float tipPointDistance = TipPoint.getDistanceTo(compareFinger.TipPoint);
             float tipPointSimilarity = Math.Max(0, 1 - tipPointDistance / Constants.FingerSimilarityMaxTipPointDistance);
@@ -44,7 +44,7 @@ namespace bbiwarg.Recognition.FingerRecognition
             //hand position
             float handPointDistance = HandPoint.getDistanceTo(compareFinger.HandPoint);
             float handPointSimilarity = Math.Max(0, 1 - handPointDistance / Constants.FingerSimilarityMaxHandPointDistance);
-            */
+            /*
             //check angle
             float angle = LineSegment.Line.getAngleBetween(compareLine);
             float angleSimilarity = Math.Max(1 - angle / Constants.FingerSimilarityMaxAngle, 0);
@@ -56,9 +56,11 @@ namespace bbiwarg.Recognition.FingerRecognition
             //check vertical distance
             float verticalDistance = LineSegment.getVerticalDistanceTo(compareLineSegment);
             float verticalDistanceSimilarity = Math.Max(1 - verticalDistance / Constants.FingerSimilarityMaxVerticalDistance, 0);
-
+            */
+            float similarity = tipPointSimilarity * handPointSimilarity;
             //float similarity = tipPointSimilarity * handPointSimilarity * angleSimilarity * parallelDistanceSimilarity * verticalDistanceSimilarity;
-            float similarity = (angleSimilarity + parallelDistanceSimilarity + verticalDistanceSimilarity) / 3;
+            //float similarity = (tipPointSimilarity + handPointSimilarity + angleSimilarity + parallelDistanceSimilarity + verticalDistanceSimilarity)/5;
+            //float similarity = (angleSimilarity + parallelDistanceSimilarity + verticalDistanceSimilarity) / 3;
 
             return similarity;
         }

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

@@ -115,10 +115,9 @@ namespace bbiwarg.Recognition.Tracking
             {
                 foreach (T detectedObject in detectedObjects)
                 {
-                    float similarity = detectedObject.getSimilarity(history.LastObject);
-                    if (similarity > minSimilarityForTracking)
+                    SimilarityContainer<T> similarityContainer = new SimilarityContainer<T>(history, detectedObject);
+                    if (similarityContainer.Similarity > minSimilarityForTracking)
                     {
-                        SimilarityContainer<T> similarityContainer = new SimilarityContainer<T>(history, detectedObject);
                         similarities.Add(similarityContainer);
                     }
                 }
@@ -126,6 +125,11 @@ namespace bbiwarg.Recognition.Tracking
 
             // sort depending on similarity-value
             similarities.Sort((fs1, fs2) => fs2.Similarity.CompareTo(fs1.Similarity));
+
+            Console.WriteLine("------");
+            foreach (SimilarityContainer<T> sim in similarities) {
+                Console.WriteLine(sim.Similarity);
+            }
         }
 
         private void removeConcurringSimilarities(SimilarityContainer<T> removeSimilarity)