Jelajahi Sumber

improved fingerTracker

Alexander Hendrich 10 tahun lalu
induk
melakukan
d03a969adb

+ 4 - 4
bbiwarg/Constants.cs

@@ -41,14 +41,14 @@ namespace bbiwarg
         public static readonly int FingerMaxSize = 30;
         public static readonly int FingerMinSize = 5;
         public static readonly int FingerNumSlicesForRelativeDirection = FingerRemoveNumSlicesForCorrection;
-        public static readonly int FingerNumFramesUntilTracked = 2;
-        public static readonly int FingerNumFramesUntilLost = 3;
+        public static readonly int FingerNumFramesUntilTracked = 5;
+        public static readonly int FingerNumFramesUntilLost = 20;
         public static readonly int FingerOutSliceFactor = 10;
         public static readonly int FingerContourMargin = 2;
         public static readonly int FingerSliceOverlapFactor = 2;
         public static readonly int FingerCrippleOutFactor = 8;
         public static readonly int FingerCrippleOutMinDifference = 15;
-        public static readonly float FingerMinSimilarityForTracking = 0.75f;
+        public static readonly float FingerMinSimilarityForTracking = 0.1f;
 
         // hand detection
         public static readonly float HandMaxSize = 0.7f;
@@ -89,7 +89,7 @@ namespace bbiwarg
         public static readonly Color FingerSliceColor = Color.Magenta;
         public static readonly Color FingerDetectedColor = ColorDetected;
         public static readonly Color FingerTrackedColor = ColorTracked;
-        public static readonly Color FingerTipOutSliceColor = Color.Gray;
+        public static readonly Color FingerTipOutSliceColor = Color.Orange;
         public static readonly Color FingerHandOutSliceColor = Color.DarkSlateGray;
         public static readonly Color FingerContourColor = Color.Red;
 

+ 5 - 0
bbiwarg/Graphics/OutputImage.cs

@@ -60,5 +60,10 @@ namespace bbiwarg.Graphics
         {
             Image.Draw(new Rectangle(x, y, width, height), new Rgb(color), thichness);
         }
+
+        public void drawText(int x, int y, String text, Color color) {
+            MCvFont font = new MCvFont(Emgu.CV.CvEnum.FONT.CV_FONT_HERSHEY_PLAIN, 1, 1);
+            Image.Draw(text, ref font, new Point(x, y), new Rgb(color));
+        }
     }
 }

+ 4 - 0
bbiwarg/Recognition/FingerRecognition/FingerHistory.cs

@@ -75,5 +75,9 @@ namespace bbiwarg.Recognition.FingerRecognition
             }
             return count;
         }
+
+        public static void resetNextID() {
+            FingerHistory.nextID = 1;
+        }
     }
 }

+ 8 - 2
bbiwarg/Recognition/FingerRecognition/FingerTracker.cs

@@ -26,7 +26,7 @@ namespace bbiwarg.Recognition.FingerRecognition
         {
             FingerHistories = new List<FingerHistory>();
             Fingers = new List<Finger>();
-
+            FingerHistory.resetNextID();
         }
 
         public void updateTrackedFingers(List<Finger> detectedFingers, OutputImage outputImage)
@@ -47,6 +47,12 @@ namespace bbiwarg.Recognition.FingerRecognition
             }
 
             drawFingers(outputImage);
+            foreach (FingerHistory fh in FingerHistories) {
+                if (fh.CurrentFinger != null) {
+                    Finger f = fh.CurrentFinger;
+                    outputImage.drawText(f.HandPoint.IntX, f.HandPoint.IntY, "#" + fh.ID, Color.Red);
+                }
+            }
         }
 
         private void updateHistories(List<Finger> detectedFingers)
@@ -112,7 +118,7 @@ namespace bbiwarg.Recognition.FingerRecognition
                 }
             }
 
-            similarities.Sort((fs1, fs2) => fs1.similarity.CompareTo(fs2.similarity));
+            similarities.Sort((fs1, fs2) => fs2.similarity.CompareTo(fs1.similarity));
         }
 
         private void removeConcurringFingerSimilarities(FingerSimilarity removeSimilarity)