Browse Source

Merge branch 'master' of https://git.tk.informatik.tu-darmstadt.de/etri-smartspaces

Daniel Kauth 10 years ago
parent
commit
48cbb9876c

+ 1 - 1
bbiwarg/Constants.cs

@@ -66,7 +66,7 @@ namespace bbiwarg
         public static readonly int TouchEventNumFramesUntilTracked = 2;
 
         // output window
-        public static readonly int NumImagesPerRow = 4;
+        public static readonly int NumImagesPerRow = 2;
         public static readonly float WindwoSizeFactor = 1f; // output window size is scaled by this factor (from necessary size for images)
     }
 }

+ 2 - 2
bbiwarg/Detectors/Fingers/Finger.cs → bbiwarg/Detectors/FingerDetection/Finger.cs

@@ -7,7 +7,7 @@ using System.Threading.Tasks;
 using bbiwarg.Images;
 using bbiwarg.Utility;
 
-namespace bbiwarg.Detectors.Fingers
+namespace bbiwarg.Detectors.FingerDetection
 {
     class Finger
     {
@@ -20,7 +20,7 @@ namespace bbiwarg.Detectors.Fingers
         {
             //check direction
             if (sliceTrail.Start.Length > sliceTrail.End.Length)
-                ;// sliceTrail.Slices.Reverse();
+                sliceTrail.Slices.Reverse();
 
             SliceTrail = sliceTrail;
         }

+ 1 - 1
bbiwarg/Detectors/Fingers/FingerDetector.cs → bbiwarg/Detectors/FingerDetection/FingerDetector.cs

@@ -11,7 +11,7 @@ using Emgu.CV.Structure;
 using Emgu.CV;
 using bbiwarg.Graphics;
 
-namespace bbiwarg.Detectors.Fingers
+namespace bbiwarg.Detectors.FingerDetection
 {
     class FingerDetector
     {

+ 1 - 1
bbiwarg/Detectors/Fingers/FingerSlice.cs → bbiwarg/Detectors/FingerDetection/FingerSlice.cs

@@ -5,7 +5,7 @@ using System.Text;
 using System.Threading.Tasks;
 using bbiwarg.Utility;
 
-namespace bbiwarg.Detectors.Fingers
+namespace bbiwarg.Detectors.FingerDetection
 {
     class FingerSlice
     {

+ 1 - 1
bbiwarg/Detectors/Fingers/FingerSliceTrail.cs → bbiwarg/Detectors/FingerDetection/FingerSliceTrail.cs

@@ -5,7 +5,7 @@ using System.Text;
 using System.Threading.Tasks;
 using bbiwarg.Utility;
 
-namespace bbiwarg.Detectors.Fingers
+namespace bbiwarg.Detectors.FingerDetection
 {
     class FingerSliceTrail
     {

+ 4 - 3
bbiwarg/Detectors/Fingers/FingerTracker.cs → bbiwarg/Detectors/FingerDetection/FingerTracker.cs

@@ -7,7 +7,7 @@ using System.Threading.Tasks;
 using bbiwarg.Images;
 using bbiwarg.Graphics;
 
-namespace bbiwarg.Detectors.Fingers
+namespace bbiwarg.Detectors.FingerDetection
 {
     class FingerTracker
     {
@@ -18,10 +18,11 @@ namespace bbiwarg.Detectors.Fingers
 
         public FingerTracker()
         {
-            detectedFingers = new List<Finger>[Constants.FingerNumFramesUntilTracked];
+            framesUntilTracked = Constants.FingerNumFramesUntilTracked;
+            detectedFingers = new List<Finger>[framesUntilTracked];
             TrackedFingers = new List<Finger>();
 
-            for (int i = 0; i < Constants.FingerNumFramesUntilTracked; i++)
+            for (int i = 0; i < framesUntilTracked; i++)
             {
                 detectedFingers[i] = new List<Finger>();
             }

+ 12 - 0
bbiwarg/Detectors/HandDetection/Hand.cs

@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace bbiwarg.Detectors.HandDetection
+{
+    class Hand
+    {
+    }
+}

+ 44 - 0
bbiwarg/Detectors/HandDetection/HandDetector.cs

@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using bbiwarg.Images;
+using bbiwarg.Detectors.FingerDetection;
+using Emgu.CV;
+using Emgu.CV.Structure;
+
+namespace bbiwarg.Detectors.HandDetection
+{
+    class HandDetector
+    {
+        private DepthImage depthImage;
+        private EdgeImage edgeImage;
+        private List<Finger> fingers;
+        public List<Hand> Hands { get; private set; }
+
+        public HandDetector(DepthImage depthImage, EdgeImage edgeImage, List<Finger> fingers) {
+            this.depthImage = depthImage;
+            this.edgeImage = edgeImage;
+            this.fingers = fingers;
+
+            detectHands();
+        }
+
+        private void detectHands() {
+            Image<Gray, byte> image = edgeImage.Image.Copy();
+
+            //draw top finger slice
+            foreach (Finger finger in fingers) {
+                FingerSlice topSlice = finger.SliceTrail.Start;
+                image.Draw(new LineSegment2D(topSlice.Start, topSlice.End), new Gray(255), 2);
+            }
+
+            int numHands = 0;
+            foreach (Finger finger in fingers) {
+                
+            }
+
+        }
+    }
+}

+ 3 - 3
bbiwarg/Detectors/Palm/PalmDetector.cs → bbiwarg/Detectors/PalmDetection/PalmDetector.cs

@@ -10,10 +10,10 @@ using Emgu.CV.Structure;
 
 using bbiwarg.Utility;
 using bbiwarg.Images;
-using bbiwarg.Detectors.Fingers;
+using bbiwarg.Detectors.FingerDetection;
 using bbiwarg.Graphics;
 
-namespace bbiwarg.Detectors.Palm
+namespace bbiwarg.Detectors.PalmDetection
 {
     class PalmDetector
     {
@@ -149,7 +149,7 @@ namespace bbiwarg.Detectors.Palm
             pointingHandMask = new Image<Gray, byte>(width, height, new Gray(0));
 
             // dst = (src > 0) ? 1 : 0;
-            pointingHandMask = pointingHandMask.Or(edgeImage.Image.ThresholdBinary(new Gray(0), new Gray(1)));
+            pointingHandMask = pointingHandMask.Or(edgeImage.Image);
             i1.Image[0] = i1.Image[1] = i1.Image[2] = 255 * pointingHandMask;
 
             pointingHandMask = pointingHandMask.Dilate(2);

+ 3 - 3
bbiwarg/Detectors/Touch/PalmTouchDetector.cs → bbiwarg/Detectors/TouchDetection/PalmTouchDetector.cs

@@ -3,11 +3,11 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
-using bbiwarg.Detectors.Fingers;
-using bbiwarg.Detectors.Palm;
+using bbiwarg.Detectors.FingerDetection;
+using bbiwarg.Detectors.PalmDetection;
 using bbiwarg.Utility;
 
-namespace bbiwarg.Detectors.Touch
+namespace bbiwarg.Detectors.TouchDetection
 {
     class PalmTouchDetector
     {

+ 3 - 3
bbiwarg/Detectors/Touch/PalmTouchEvent.cs → bbiwarg/Detectors/TouchDetection/PalmTouchEvent.cs

@@ -4,10 +4,10 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using bbiwarg.Utility;
-using bbiwarg.Detectors.Fingers;
-using bbiwarg.Detectors.Palm;
+using bbiwarg.Detectors.FingerDetection;
+using bbiwarg.Detectors.PalmDetection;
 
-namespace bbiwarg.Detectors.Touch
+namespace bbiwarg.Detectors.TouchDetection
 {
     class PalmTouchEvent : TouchEvent
     {

+ 3 - 3
bbiwarg/Detectors/Touch/TouchDetector.cs → bbiwarg/Detectors/TouchDetection/TouchDetector.cs

@@ -7,12 +7,12 @@ using System.Threading.Tasks;
 using Emgu.CV;
 using Emgu.CV.Structure;
 using bbiwarg.Images;
-using bbiwarg.Detectors.Fingers;
-using bbiwarg.Detectors.Palm;
+using bbiwarg.Detectors.FingerDetection;
+using bbiwarg.Detectors.PalmDetection;
 using bbiwarg.Utility;
 using bbiwarg.Graphics;
 
-namespace bbiwarg.Detectors.Touch
+namespace bbiwarg.Detectors.TouchDetection
 {
     class TouchDetector
     {

+ 2 - 2
bbiwarg/Detectors/Touch/TouchEvent.cs → bbiwarg/Detectors/TouchDetection/TouchEvent.cs

@@ -3,10 +3,10 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
-using bbiwarg.Detectors.Fingers;
+using bbiwarg.Detectors.FingerDetection;
 using bbiwarg.Utility;
 
-namespace bbiwarg.Detectors.Touch
+namespace bbiwarg.Detectors.TouchDetection
 {
     class TouchEvent
     {

+ 4 - 3
bbiwarg/Detectors/Touch/TouchTracker.cs → bbiwarg/Detectors/TouchDetection/TouchTracker.cs

@@ -7,7 +7,7 @@ using System.Threading.Tasks;
 using bbiwarg.Images;
 using bbiwarg.Graphics;
 
-namespace bbiwarg.Detectors.Touch
+namespace bbiwarg.Detectors.TouchDetection
 {
     class TouchTracker
     {
@@ -18,9 +18,10 @@ namespace bbiwarg.Detectors.Touch
 
         public TouchTracker()
         {
-            detectedTouchEvents = new List<TouchEvent>[Constants.TouchEventNumFramesUntilTracked];
+            framesUntilTracked = Constants.TouchEventNumFramesUntilTracked;
+            detectedTouchEvents = new List<TouchEvent>[framesUntilTracked];
 
-            for (int i = 0; i < Constants.TouchEventNumFramesUntilTracked; i++)
+            for (int i = 0; i < framesUntilTracked; i++)
             {
                 detectedTouchEvents[i] = new List<TouchEvent>();
             }

+ 2 - 2
bbiwarg/Graphics/OutputWindow.cs

@@ -8,7 +8,7 @@ using System.Threading.Tasks;
 using OpenTK;
 using OpenTK.Graphics.OpenGL;
 using bbiwarg.Images;
-using bbiwarg.Detectors.Touch;
+using bbiwarg.Detectors.TouchDetection;
 using bbiwarg.Utility;
 
 using Emgu.CV;
@@ -165,7 +165,7 @@ namespace bbiwarg.Graphics
 
             Timer.stop("onRenderFrame");
             
-            //Timer.outputAll();
+            Timer.outputAll();
         }
 
     }

+ 1 - 1
bbiwarg/Graphics/TouchEventVisualizer.cs

@@ -4,7 +4,7 @@ using System.Drawing;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
-using bbiwarg.Detectors.Touch;
+using bbiwarg.Detectors.TouchDetection;
 using bbiwarg.Utility;
 
 namespace bbiwarg.Graphics

+ 1 - 1
bbiwarg/Images/DepthImage.cs

@@ -7,7 +7,7 @@ using System.Threading.Tasks;
 using Emgu.CV;
 using Emgu.CV.Structure;
 using bbiwarg.Graphics;
-using bbiwarg.Detectors.Fingers;
+using bbiwarg.Detectors.FingerDetection;
 using bbiwarg.Utility;
 
 namespace bbiwarg.Images

+ 2 - 2
bbiwarg/Images/EdgeImage.cs

@@ -6,7 +6,7 @@ using System.Text;
 using System.Threading.Tasks;
 using Emgu.CV;
 using Emgu.CV.Structure;
-using bbiwarg.Detectors.Fingers;
+using bbiwarg.Detectors.FingerDetection;
 
 using System.Diagnostics;
 using bbiwarg.Utility;
@@ -20,7 +20,7 @@ namespace bbiwarg.Images
 
         public EdgeImage(DepthImage depthImage)
         {
-            Image = (depthImage.Image * (255.0f / (float)(depthImage.MaxDepth - depthImage.MinDepth))).Canny(100, 75, 3);
+            Image = (depthImage.Image * (255.0f / (float)(depthImage.MaxDepth - depthImage.MinDepth))).Canny(100, 75, 3).ThresholdBinary(new Gray(0), new Gray(1));
         }
 
         public EdgeImage(Image<Gray, Byte> edgeImage)

+ 14 - 6
bbiwarg/VideoHandle.cs

@@ -6,9 +6,10 @@ using System.Text;
 using System.Threading.Tasks;
 using System.Diagnostics;
 using bbiwarg.Utility;
-using bbiwarg.Detectors.Fingers;
-using bbiwarg.Detectors.Palm;
-using bbiwarg.Detectors.Touch;
+using bbiwarg.Detectors.FingerDetection;
+using bbiwarg.Detectors.PalmDetection;
+using bbiwarg.Detectors.TouchDetection;
+using bbiwarg.Detectors.HandDetection;
 using bbiwarg.Images;
 using bbiwarg.InputProviders;
 using Emgu.CV;
@@ -42,6 +43,7 @@ namespace bbiwarg
         private EdgeImage edgeImage;
         
         private FingerDetector fingerDetector;
+        private HandDetector handDetector;
         private PalmDetector palmDetector;
         private TouchDetector touchDetector;
         private PalmTouchDetector palmTouchDetector;
@@ -149,7 +151,7 @@ namespace bbiwarg
             // create edge image
             Timer.start("createEdgeImage");
             edgeImage = new EdgeImage(depthImage);
-            OutputImages[1].Image[2] = edgeImage.Image.ThresholdBinary(new Gray(0), new Gray(1)).Mul(255);
+            OutputImages[1].Image[2] = edgeImage.Image.Mul(255);
             Timer.stop("createEdgeImage");
 
             //detect fingers
@@ -162,6 +164,11 @@ namespace bbiwarg
             fingerTracker.setDetectedTouchEventsThisFrame(fingerDetector.Fingers, OutputImages[1]);
             Timer.stop("fingerTracking");
 
+            //detect hands
+            Timer.start("handDetection");
+            handDetector = new HandDetector(depthImage, edgeImage, fingerTracker.TrackedFingers);
+            Timer.stop("handDetection");
+
             //remove background noise
             Timer.start("removeBackground");
             depthImage.removeBackground(fingerDetector.Fingers);
@@ -210,8 +217,9 @@ namespace bbiwarg
 
             }
 
-            OutputImages = new OutputImage[] {OutputImages[0], OutputImages[1], OutputImages[2], palmDetector.i1, palmDetector.i2,
-            palmDetector.i3, palmDetector.i5, palmDetector.i6, palmDetector.i7, palmDetector.i8, palmDetector.i9};
+            OutputImages = new OutputImage[] {OutputImages[0], OutputImages[1], OutputImages[2], OutputImages[3]};
+            
+            //palmDetector.i1, palmDetector.i2, palmDetector.i3, palmDetector.i5, palmDetector.i6, palmDetector.i7, palmDetector.i8, palmDetector.i9};
 
             Timer.stop("processFrameUpdate");
         }

+ 13 - 11
bbiwarg/bbiwarg.csproj

@@ -67,17 +67,19 @@
   </ItemGroup>
   <ItemGroup>
     <Compile Include="Constants.cs" />
-    <Compile Include="Detectors\Fingers\Finger.cs" />
-    <Compile Include="Detectors\Fingers\FingerDetector.cs" />
-    <Compile Include="Detectors\Fingers\FingerSliceTrail.cs" />
-    <Compile Include="Detectors\Fingers\FingerSlice.cs" />
-    <Compile Include="Detectors\Fingers\FingerTracker.cs" />
-    <Compile Include="Detectors\Palm\PalmDetector.cs" />
-    <Compile Include="Detectors\Touch\PalmTouchDetector.cs" />
-    <Compile Include="Detectors\Touch\PalmTouchEvent.cs" />
-    <Compile Include="Detectors\Touch\TouchDetector.cs" />
-    <Compile Include="Detectors\Touch\TouchEvent.cs" />
-    <Compile Include="Detectors\Touch\TouchTracker.cs" />
+    <Compile Include="Detectors\FingerDetection\Finger.cs" />
+    <Compile Include="Detectors\FingerDetection\FingerDetector.cs" />
+    <Compile Include="Detectors\FingerDetection\FingerSliceTrail.cs" />
+    <Compile Include="Detectors\FingerDetection\FingerSlice.cs" />
+    <Compile Include="Detectors\FingerDetection\FingerTracker.cs" />
+    <Compile Include="Detectors\HandDetection\Hand.cs" />
+    <Compile Include="Detectors\HandDetection\HandDetector.cs" />
+    <Compile Include="Detectors\PalmDetection\PalmDetector.cs" />
+    <Compile Include="Detectors\TouchDetection\PalmTouchDetector.cs" />
+    <Compile Include="Detectors\TouchDetection\PalmTouchEvent.cs" />
+    <Compile Include="Detectors\TouchDetection\TouchDetector.cs" />
+    <Compile Include="Detectors\TouchDetection\TouchEvent.cs" />
+    <Compile Include="Detectors\TouchDetection\TouchTracker.cs" />
     <Compile Include="Graphics\OutputWindow.cs" />
     <Compile Include="Graphics\TouchEventVisualizer.cs" />
     <Compile Include="Images\DepthImage.cs" />