Explorar o código

Fixed CurrentFrame for video.

Daniel Kauth %!s(int64=11) %!d(string=hai) anos
pai
achega
12a860faf1

+ 12 - 12
bbiwarg/Detectors/Palm/PalmDetector.cs

@@ -142,10 +142,10 @@ namespace bbiwarg.Detectors.Palm
             return new Point(HelperFunctions.thresholdRange<int>(0, width - 1, pos.IntX), HelperFunctions.thresholdRange<int>(0, height - 1, pos.IntY));
         }
 
-        public OutputImage i1, i2, i3, i4, i5, i6, i7, i8, i9;
+        //public OutputImage i1, i2, i3, i4, i5, i6, i7, i8, i9;
         private void buildPointingHandMask()
         {
-            i1 = new OutputImage(width, height);
+            /*i1 = new OutputImage(width, height);
             i2 = new OutputImage(width, height);
             i3 = new OutputImage(width, height);
             i4 = new OutputImage(width, height);
@@ -153,22 +153,22 @@ namespace bbiwarg.Detectors.Palm
             i6 = new OutputImage(width, height);
             i7 = new OutputImage(width, height);
             i8 = new OutputImage(width, height);
-            i9 = new OutputImage(width, height);
+            i9 = new OutputImage(width, height);*/
 
             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)));
-            i1.Image[0] = i1.Image[1] = i1.Image[2] = 255 * pointingHandMask;
+            //i1.Image[0] = i1.Image[1] = i1.Image[2] = 255 * pointingHandMask;
 
             pointingHandMask = pointingHandMask.Dilate(4);
-            i2.Image[0] = i2.Image[1] = i2.Image[2] = 255 * pointingHandMask;
+            //i2.Image[0] = i2.Image[1] = i2.Image[2] = 255 * pointingHandMask;
            
             fillFingerSlices(pointingHandMask, 1);
-            i3.Image[0] = i3.Image[1] = i3.Image[2] = 255 * pointingHandMask;
+            //i3.Image[0] = i3.Image[1] = i3.Image[2] = 255 * pointingHandMask;
 
             //pointingHandMask = pointingHandMask.Dilate(1);
-            i4.Image[0] = i4.Image[1] = i4.Image[2] = 255 * pointingHandMask;
+            //i4.Image[0] = i4.Image[1] = i4.Image[2] = 255 * pointingHandMask;
 
             MCvConnectedComp tmp = new MCvConnectedComp();
             // fill with value 2
@@ -176,19 +176,19 @@ namespace bbiwarg.Detectors.Palm
 
             // dst = (src > 1) ? 0 : 1    (src > 1 <-> src == 2 <-> src filled by flood fill)
             pointingHandMask = pointingHandMask.ThresholdBinaryInv(new Gray(1), new Gray(1));
-            i5.Image[0] = i5.Image[1] = i5.Image[2] = 255 * pointingHandMask;
+            //i5.Image[0] = i5.Image[1] = i5.Image[2] = 255 * pointingHandMask;
             
             pointingHandMask = pointingHandMask.Erode(8);
-            i6.Image[0] = i6.Image[1] = i6.Image[2] = 255 * pointingHandMask;
+            //i6.Image[0] = i6.Image[1] = i6.Image[2] = 255 * pointingHandMask;
 
             fillFingerSlices(pointingHandMask, 0);
-            i7.Image[0] = i7.Image[1] = i7.Image[2] = 255 * pointingHandMask;
+            //i7.Image[0] = i7.Image[1] = i7.Image[2] = 255 * pointingHandMask;
             
             pointingHandMask = pointingHandMask.Erode(2);
-            i8.Image[0] = i8.Image[1] = i8.Image[2] = 255 * pointingHandMask;
+            //i8.Image[0] = i8.Image[1] = i8.Image[2] = 255 * pointingHandMask;
             
             // only debug
-            i9.Image[0] = i9.Image[1] = i9.Image[2] = 255 * handImage.And(pointingHandMask);
+            //i9.Image[0] = i9.Image[1] = i9.Image[2] = 255 * handImage.And(pointingHandMask);
         }
 
         private void findLongestPalmContour()

+ 1 - 1
bbiwarg/Graphics/OutputWindow.cs

@@ -135,7 +135,7 @@ namespace bbiwarg.Graphics
             }
 
             if (videoHandle.sourceIsMovie())
-                Title = "BBIWARG - Output (Frame " + videoHandle.getCurrentMovieFrame() + ")";
+                Title = "BBIWARG - Output (Frame " + videoHandle.CurrentFrame + ")";
 
             Timer.start("buildTextures");
             GL.Enable(EnableCap.Texture2D);

+ 4 - 2
bbiwarg/InputProvider/IisuInputProvider.cs

@@ -58,6 +58,7 @@ namespace bbiwarg.InputProviders
                 device.RegisterParameterHandle<int>("SOURCE.MOVIE.PlayMode").Value = 1; // playMode = loop
                 //device.RegisterParameterHandle<int>("SOURCE.MOVIE.PlayMode").Value = 2; // playMode = ping-pong
                 playStep = device.RegisterParameterHandle<int>("SOURCE.MOVIE.PlayStep");
+                currentMovieFrame = device.RegisterParameterHandle<int>("SOURCE.MOVIE.CurrentFrame");
             }
             else
             {
@@ -65,7 +66,6 @@ namespace bbiwarg.InputProviders
             }
 
             frameRate = device.RegisterParameterHandle<float>("SOURCE.FrameRate");
-            currentMovieFrame = device.RegisterParameterHandle<int>("SOURCE.MOVIE.CurrentFrame");
             hfov = device.RegisterParameterHandle<float>("SOURCE.CAMERA.DEPTH.HFOV");
             vfov = device.RegisterParameterHandle<float>("SOURCE.CAMERA.DEPTH.VFOV");
 
@@ -150,7 +150,9 @@ namespace bbiwarg.InputProviders
 
         public int getCurrentMovieFrame()
         {
-            return currentMovieFrame.Value;
+            if (sourceIsMovie)
+                return currentMovieFrame.Value;
+            return 0;
         }
 
         bool IInputProvider.sourceIsMovie()

+ 1 - 1
bbiwarg/MainBBWIWARG.cs

@@ -12,7 +12,7 @@ namespace bbiwarg
     {
         static void Main(string[] args)
         {
-            IInputProvider inputProvider = new IisuInputProvider("..\\..\\videos\\touch\\4.skv");
+            IInputProvider inputProvider = new IisuInputProvider(""); //..\\..\\videos\\touch\\4.skv");
             VideoHandle videoHandle = new VideoHandle(inputProvider);
             videoHandle.start();
 

+ 14 - 13
bbiwarg/VideoHandle.cs

@@ -25,6 +25,17 @@ namespace bbiwarg
         public int Width { get; private set; }
         public int Height { get; private set; }
 
+        public int CurrentFrame
+        {
+            get
+            {
+                if (sourceIsMovie())
+                    return inputProvider.getCurrentMovieFrame();
+                else
+                    return videoFrame;
+            }
+        }
+
         public OutputImage[] OutputImages { get; private set; }
         
         private DepthImage depthImage;
@@ -66,11 +77,6 @@ namespace bbiwarg
             inputProvider.stop();
         }
 
-        public int getCurrentMovieFrame()
-        {
-            return inputProvider.getCurrentMovieFrame();
-        }
-
         public bool sourceIsMovie()
         {
             return inputProvider.sourceIsMovie();
@@ -152,7 +158,7 @@ namespace bbiwarg
             //detect palm
             Timer.start("palmDetection");
             palmDetector = new PalmDetector(depthImage, edgeImage, fingerDetector.Fingers, depthPalmTouchOutputImage);
-            if (sourceIsMovie() && getCurrentMovieFrame() == 0)
+            if (sourceIsMovie() && CurrentFrame == 0)
                 PalmDetector.resetFilter();
             Timer.stop("palmDetection");
 
@@ -171,17 +177,12 @@ namespace bbiwarg
             // touch event visualizer
             if (touchEventVisualizer == null)
                 touchEventVisualizer = new TouchEventVisualizer(Width, Height);
-            if (getCurrentMovieFrame() == 0)
+            if (CurrentFrame == 0)
                 touchEventVisualizer.Reset();
             if (palmTouchDetector != null)
             {
                 foreach (PalmTouchEvent e in palmTouchDetector.PalmTouchEvents)
-                {
-                    if (sourceIsMovie())
-                        touchEventVisualizer.addPalmTouchEvent(e, getCurrentMovieFrame());
-                    else
-                        touchEventVisualizer.addPalmTouchEvent(e, videoFrame);
-                }
+                    touchEventVisualizer.addPalmTouchEvent(e, CurrentFrame);
                 touchEventVisualizer.updateImage();
             }