Kaynağa Gözat

cleanup constants

Alexander Hendrich 10 yıl önce
ebeveyn
işleme
56cdbb412a

+ 25 - 23
bbiwarg/Constants.cs

@@ -9,7 +9,8 @@ using bbiwarg.Utility;
 
 namespace bbiwarg
 {
-    public enum InputType {
+    public enum InputType
+    {
         Camera = 0,
         Movie = 1
     }
@@ -26,15 +27,15 @@ namespace bbiwarg
         public static readonly int ConsoleHeight = 30;
 
         // Output
-        public static readonly bool OutputEnabled = true;
-        public static readonly int OutputFrameRate = 30;
+        public static readonly int OutputUpdateRate = 30;
+        public static readonly int OutputRenderRate = 30;
         public static readonly int OutputNumImages = 5;
         public static readonly int OutputNumImagesPerRow = 3;
         public static readonly float OutputScaleFactor = 1f; // output window size is scaled by this factor (from necessary size for images)
         public static readonly String OutputTitle = "BBIWARG - Output";
 
         // TUIO
-        public static readonly bool TuioEnabled = true;
+        public static readonly bool TuioEnabled = false;
         public static readonly String TuioIP = "127.0.0.1";
         public static readonly int TuioPort = 3333;
 
@@ -65,22 +66,24 @@ namespace bbiwarg
         public static readonly int FingerMinWidth = 5;
         public static readonly int FingerRemoveNumSlicesForCorrection = 5;
         public static readonly int FingerNumSlicesForRelativeDirection = FingerRemoveNumSlicesForCorrection;
-        public static readonly int FingerCrippleOutFactor = 8;
-        public static readonly int FingerCrippleOutMinDifference = 20;
-        public static readonly int FingerNumDirectionsForReverseCheck = 20;
+        public static readonly int FingerCrippleCheckMargin = 8;
+        public static readonly int FingerCrippleMinDifference = 20;
         public static readonly int FingerSliceOutMargin = 4;
 
         // finger tracking
-        public static readonly float FingerMinSimilarityForTracking = 0.8f;
-        public static readonly int FingerNumFramesDetectedUntilTracked = 5;
-        public static readonly int FingerNumFramesLostUntilDeleted = 10;
+        public static readonly float FingerTrackerMinSimilarityForTracking = 0.8f;
+        public static readonly int FingerTrackerNumFramesDetectedUntilTracked = 5;
+        public static readonly int FingerTrackerNumFramesLostUntilDeleted = 10;
         public static readonly float FingermXX = 0.0005f;
         public static readonly float FingermXY = 0.0005f;
         public static readonly float FingermYY = 0.0005f;
+        public static readonly int FingerTrackerNumDirectionsForReverseCheck = 20;
 
         // hand detection
-        public static readonly float HandMaxSize = 0.7f;
         public static readonly int HandNumColors = 3;
+        public static readonly int HandFloodFillDownDiff = 2;
+        public static readonly int HandFloodFillUpDiff = 2;
+        public static readonly float HandMaxSize = 0.6f;
         public static readonly float HandThumbDefectMaxDistanceToThumb = 2 * FingerMaxWidth;
         public static readonly float HandThumbDefectMinThumbShortLengthRatio = 0.75f;
         public static readonly float HandThumbDefectMaxThumbShortLengthRatio = 1.1f;
@@ -105,27 +108,26 @@ namespace bbiwarg
         public static readonly float PalmmXY = 0.00005f;
         public static readonly float PalmmYY = 0.00005f;
 
-
         //palm Grid
         public static int PalmGridNumRows = 3;
         public static int PalmGridNumColumns = 4;
 
         // touch detection
-        public static readonly float TouchEventMinTouchValue = 0.3f;
-        public static readonly int TouchEventAreaSize = 30;
-        public static readonly int TouchEventFloodfillLowDiff = 1;
-        public static readonly int TouchEventFloodfillHighDiff = 3;
-        public static readonly int TouchEventTipInsideFactor = 2;
-        public static readonly int TouchEventTipOutsideFactor = 7;
-        public static readonly float TouchProcessNoise = 3.0e-4f;
+        public static readonly float TouchMinTouchValue = 0.3f;
+        public static readonly int TouchAreaSize = 30;
+        public static readonly int TouchFloodfillDownDiff = 1;
+        public static readonly int TouchFloodfillUpDiff = 3;
+        public static readonly int TouchTipInsideFactor = 2;
+        public static readonly int TouchTipOutsideFactor = 7;
 
         // touch tracking
-        public static readonly float TouchEventMinSimilarityForTracking = 0.7f;
-        public static readonly int TouchEventNumFramesDetectedUntilTracked = 1;
-        public static readonly int TouchEventNumFramesLostUntilDeleted = 5;
+        public static readonly float TouchTrackerMinSimilarity = 0.7f;
+        public static readonly int TouchTrackerNumFramesDetectedUntilTracked = 1;
+        public static readonly int TouchTrackerNumFramesLostUntilDeleted = 5;
         public static readonly float TouchmXX = 0.0065f;
         public static readonly float TouchmXY = 0.0f;
         public static readonly float TouchmYY = 0.0065f;
+        public static readonly float TouchProcessNoise = 3.0e-4f;
 
         // touchEventVisualizer
         public static readonly int TouchEventVisualizerFadeOutTime = 1500;
@@ -163,7 +165,7 @@ namespace bbiwarg
         public static readonly Color PalmConvexHullColor = Color.Green;
         public static readonly Color PalmThumbDefectColor = Color.Lime;
 
-        public static readonly Color[] HandColor = new Color[3] { Color.Red, Color.Blue, Color.Green};
+        public static readonly Color[] HandColor = new Color[3] { Color.Red, Color.Blue, Color.Green };
         public static readonly Color HandCentroidColor = Color.Yellow;
         public static readonly Color HandIDColor = Color.White;
     }

+ 9 - 15
bbiwarg/InputHandler.cs

@@ -65,20 +65,15 @@ namespace bbiwarg
             palmTracker = new PalmTracker();
             touchTracker = new TouchTracker();
 
-            if (Constants.OutputEnabled)
-            {
-                touchEventVisualizer = new TouchEventVisualizer(imageWidth, imageHeight);
-                //register touchEventVisualizer to touchTracker
-                touchTracker.TouchDown += touchEventVisualizer.touchDown;
-                touchTracker.TouchMove += touchEventVisualizer.touchMove;
-                touchTracker.TouchUp += touchEventVisualizer.touchUp;
-            }
+            touchEventVisualizer = new TouchEventVisualizer(imageWidth, imageHeight);
+            touchTracker.TouchDown += touchEventVisualizer.touchDown;
+            touchTracker.TouchMove += touchEventVisualizer.touchMove;
+            touchTracker.TouchUp += touchEventVisualizer.touchUp;
+
 
             if (Constants.TuioEnabled)
             {
                 tuioCommunicator = new TuioCommunicator(Constants.TuioIP, Constants.TuioPort);
-
-                //register tuiCommunicator to touchTracker
                 touchTracker.TouchDown += tuioCommunicator.touchDown;
                 touchTracker.TouchMove += tuioCommunicator.touchMove;
                 touchTracker.TouchUp += tuioCommunicator.touchUp;
@@ -92,8 +87,7 @@ namespace bbiwarg
             palmTracker.reset();
             fingerTracker.reset();
 
-            if (Constants.OutputEnabled)
-                touchEventVisualizer.reset();
+            touchEventVisualizer.reset();
 
             if (Constants.TuioEnabled)
                 tuioCommunicator.reset();
@@ -155,8 +149,7 @@ namespace bbiwarg
             if (Constants.TuioEnabled)
                 tuioCommunicator.commitFrame();
 
-            if (Constants.OutputEnabled)
-                createOutputImages();
+            createOutputImages();
 
             Timer.stop("afterUpdateFrame");
         }
@@ -297,7 +290,8 @@ namespace bbiwarg
             OutputImages[3].drawImage((depthImage.MaxDepth - depthImage.MinDepth) - depthImage.Image.Or(255 - handDetector.HandMask.ThresholdBinary(new Gray(0), new Gray(255))), Constants.DepthImageColor);
             foreach (TouchEvent te in touchTracker.TouchEvents)
                 OutputImages[3].fillCircle(te.Position.IntX, te.Position.IntY, 5, Constants.TouchEventTrackedColor);
-            foreach (Palm p in palmTracker.OptimizedPalms) {
+            foreach (Palm p in palmTracker.OptimizedPalms)
+            {
                 OutputImages[3].drawQuadrangleGrid(p.Quad, Constants.PalmQuadColor, Constants.PalmGridColor, Constants.PalmGridNumRows, Constants.PalmGridNumColumns);
             }
 

+ 2 - 13
bbiwarg/MainBBWIWARG.cs

@@ -27,19 +27,8 @@ namespace bbiwarg
 
             InputHandler inputHandler = new InputHandler(inputProvider);
 
-            if (Constants.OutputEnabled)
-            {
-                OutputWindow outputWindow = new OutputWindow(inputProvider, inputHandler);
-                outputWindow.Run(Constants.OutputFrameRate, Constants.OutputFrameRate);
-            }
-            else
-            {
-                while (true)
-                {
-                    inputHandler.updateFrame();
-                    Thread.Sleep(1000 / Constants.OutputFrameRate);
-                }
-            }
+            OutputWindow outputWindow = new OutputWindow(inputProvider, inputHandler);
+            outputWindow.Run(Constants.OutputUpdateRate, Constants.OutputRenderRate);
 
             inputProvider.stop();
         }

+ 3 - 3
bbiwarg/Recognition/FingerRecognition/FingerDetector.cs

@@ -206,15 +206,15 @@ namespace bbiwarg.Recognition.FingerRecognition
             FingerSlice midSlice = finger.SliceTrail.MidSlice;
             Vector2D direction = midSlice.Direction;
             Vector2D directionInv = direction.getInverse();
-            Vector2D out1 = (midSlice.Start + Constants.FingerCrippleOutFactor * directionInv).moveInBound(Vector2D.Zero, depthImage.BottomRight, direction);
-            Vector2D out2 = (midSlice.End + Constants.FingerCrippleOutFactor * direction).moveInBound(Vector2D.Zero, depthImage.BottomRight, directionInv);
+            Vector2D out1 = (midSlice.Start + Constants.FingerCrippleCheckMargin * directionInv).moveInBound(Vector2D.Zero, depthImage.BottomRight, direction);
+            Vector2D out2 = (midSlice.End + Constants.FingerCrippleCheckMargin * direction).moveInBound(Vector2D.Zero, depthImage.BottomRight, directionInv);
 
             Int16 depthAtFinger = depthImage.getDepthAt(midSlice.Mid);
             Int16 depthAtOut1 = depthImage.getDepthAt(out1);
             Int16 depthAtOut2 = depthImage.getDepthAt(out2);
             int minDepthDifference = Math.Min(Math.Abs(depthAtFinger - depthAtOut1), Math.Abs(depthAtFinger - depthAtOut2));
 
-            return (minDepthDifference < Constants.FingerCrippleOutMinDifference);
+            return (minDepthDifference < Constants.FingerCrippleMinDifference);
         }
 
 

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

@@ -15,13 +15,13 @@ namespace bbiwarg.Recognition.FingerRecognition
         public List<Finger> Fingers { get { return getCurrentObjectsWithState(TrackingState.Tracked); } }
 
         public FingerTracker()
-            : base(Constants.FingerMinSimilarityForTracking)
+            : base(Constants.FingerTrackerMinSimilarityForTracking)
         {
         }
 
         protected override TrackedFinger createTrackedObject(Finger detectedObject)
         {
-            return new TrackedFinger(idPool.getNextUnusedID(), detectedObject, Constants.FingerNumFramesDetectedUntilTracked, Constants.FingerNumFramesLostUntilDeleted);
+            return new TrackedFinger(idPool.getNextUnusedID(), detectedObject, Constants.FingerTrackerNumFramesDetectedUntilTracked, Constants.FingerTrackerNumFramesLostUntilDeleted);
         }
     }
 }

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

@@ -45,7 +45,7 @@ namespace bbiwarg.Recognition.FingerRecognition
                 tipPointKalman.getCorrectedPosition(detectedFinger.TipPoint);
                 handPointKalman.getCorrectedPosition(detectedFinger.HandPoint);
                 lastRawDirections.Add(rawDirection);
-                if (lastRawDirections.Count == Constants.FingerNumDirectionsForReverseCheck)
+                if (lastRawDirections.Count == Constants.FingerTrackerNumDirectionsForReverseCheck)
                     lastRawDirections.RemoveAt(0);
             }
         }

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

@@ -74,7 +74,7 @@ namespace bbiwarg.Recognition.HandRecognition
                 {
                     Image<Gray, byte> mask = new Image<Gray, byte>(width + 2, height + 2);
                     MCvConnectedComp comp = new MCvConnectedComp();
-                    CvInvoke.cvFloodFill(modifiedHandDepthImage, finger.HandPoint, new MCvScalar(255), new MCvScalar(2), new MCvScalar(2), out comp, Emgu.CV.CvEnum.CONNECTIVITY.EIGHT_CONNECTED, Emgu.CV.CvEnum.FLOODFILL_FLAG.DEFAULT, mask);
+                    CvInvoke.cvFloodFill(modifiedHandDepthImage, finger.HandPoint, new MCvScalar(255), new MCvScalar(Constants.HandFloodFillDownDiff), new MCvScalar(Constants.HandFloodFillUpDiff), out comp, Emgu.CV.CvEnum.CONNECTIVITY.EIGHT_CONNECTED, Emgu.CV.CvEnum.FLOODFILL_FLAG.DEFAULT, mask);
                     if (comp.area < maxArea * Constants.HandMaxSize)
                     {
                         Image<Gray, byte> cropedMask = mask.Copy(new Rectangle(1, 1, width, height));

+ 8 - 8
bbiwarg/Recognition/TouchRecognition/TouchDetector.cs

@@ -39,8 +39,8 @@ namespace bbiwarg.Recognition.TouchRecognition
                 Vector2D tipPoint = finger.TipPoint;
                 Vector2D direction = finger.TipDirection;
                 Vector2D directionInv = direction.getInverse();
-                Vector2D tipPointInside = (tipPoint + Constants.TouchEventTipInsideFactor * directionInv).moveInBound(Vector2D.Zero, depthImage.BottomRight, direction);
-                Vector2D tipPointOutside = (tipPoint + Constants.TouchEventTipOutsideFactor * direction).moveInBound(Vector2D.Zero, depthImage.BottomRight, directionInv);
+                Vector2D tipPointInside = (tipPoint + Constants.TouchTipInsideFactor * directionInv).moveInBound(Vector2D.Zero, depthImage.BottomRight, direction);
+                Vector2D tipPointOutside = (tipPoint + Constants.TouchTipOutsideFactor * direction).moveInBound(Vector2D.Zero, depthImage.BottomRight, directionInv);
 
                 foreach (Palm palm in palms)
                 {
@@ -53,7 +53,7 @@ namespace bbiwarg.Recognition.TouchRecognition
                         int numPixels = touchMask.Width * touchMask.Height;
                         float touchValue = touchPixels / (float)numPixels;
 
-                        if (touchValue > Constants.TouchEventMinTouchValue)
+                        if (touchValue > Constants.TouchMinTouchValue)
                         {
                             TouchEvent touchEvent = new TouchEvent(tipPointOutside, touchMask, finger, palm);
                             TouchEvents.Add(touchEvent);
@@ -67,10 +67,10 @@ namespace bbiwarg.Recognition.TouchRecognition
         private Image<Gray, byte> getTouchMask(Vector2D touchPoint)
         {
 
-            int minX = Math.Max(touchPoint.IntX - 2 * Constants.TouchEventAreaSize / 3, 0);
-            int maxX = Math.Min(touchPoint.IntX + Constants.TouchEventAreaSize / 3, depthImage.Width - 1);
-            int minY = Math.Max(touchPoint.IntY - 2 * Constants.TouchEventAreaSize / 3, 0);
-            int maxY = Math.Min(touchPoint.IntY + Constants.TouchEventAreaSize / 3, depthImage.Height - 1);
+            int minX = Math.Max(touchPoint.IntX - 2 * Constants.TouchAreaSize / 3, 0);
+            int maxX = Math.Min(touchPoint.IntX + Constants.TouchAreaSize / 3, depthImage.Width - 1);
+            int minY = Math.Max(touchPoint.IntY - 2 * Constants.TouchAreaSize / 3, 0);
+            int maxY = Math.Min(touchPoint.IntY + Constants.TouchAreaSize / 3, depthImage.Height - 1);
 
             Vector2D relTouchPoint = new Vector2D(touchPoint.IntX - minX, touchPoint.IntY - minY);
             Rectangle rect = new Rectangle(minX, minY, maxX - minX + 1, maxY - minY + 1);
@@ -78,7 +78,7 @@ namespace bbiwarg.Recognition.TouchRecognition
             Image<Gray, byte> touchMask = new Image<Gray, byte>(rect.Width + 2, rect.Height + 2);
 
             MCvConnectedComp comp = new MCvConnectedComp();
-            CvInvoke.cvFloodFill(touchArea, relTouchPoint, new MCvScalar(255), new MCvScalar(Constants.TouchEventFloodfillLowDiff), new MCvScalar(Constants.TouchEventFloodfillHighDiff), out comp, Emgu.CV.CvEnum.CONNECTIVITY.EIGHT_CONNECTED, Emgu.CV.CvEnum.FLOODFILL_FLAG.DEFAULT, touchMask);
+            CvInvoke.cvFloodFill(touchArea, relTouchPoint, new MCvScalar(255), new MCvScalar(Constants.TouchFloodfillDownDiff), new MCvScalar(Constants.TouchFloodfillUpDiff), out comp, Emgu.CV.CvEnum.CONNECTIVITY.EIGHT_CONNECTED, Emgu.CV.CvEnum.FLOODFILL_FLAG.DEFAULT, touchMask);
 
             Rectangle cropRect = new Rectangle(1, 1, rect.Width, rect.Height);
             return touchMask.Copy(cropRect);

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

@@ -20,13 +20,13 @@ namespace bbiwarg.Recognition.TouchRecognition
         public event TouchEventHandler TouchUp;
 
         public TouchTracker()
-            : base(Constants.TouchEventMinSimilarityForTracking)
+            : base(Constants.TouchTrackerMinSimilarity)
         {
         }
 
         protected override TrackedTouchEvent createTrackedObject(TouchEvent detectedObject)
         {
-            TrackedTouchEvent tte = new TrackedTouchEvent(idPool.getNextUnusedID(), detectedObject, Constants.TouchEventNumFramesDetectedUntilTracked, Constants.TouchEventNumFramesLostUntilDeleted);
+            TrackedTouchEvent tte = new TrackedTouchEvent(idPool.getNextUnusedID(), detectedObject, Constants.TouchTrackerNumFramesDetectedUntilTracked, Constants.TouchTrackerNumFramesLostUntilDeleted);
             tte.TouchDown += TouchDown;
             tte.TouchMove += TouchMove;
             tte.TouchUp += TouchUp;