123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- using BBIWARG.Images;
- using BBIWARG.Input.InputProviding;
- using BBIWARG.Recognition.FingerRecognition;
- using BBIWARG.Recognition.HandRecognition;
- using BBIWARG.Recognition.PalmRecognition;
- using BBIWARG.Recognition.TouchRecognition;
- using BBIWARG.Utility;
- using System;
- namespace BBIWARG.Input.InputHandling
- {
-
-
-
-
-
- public delegate void NewProcessedFrameEventHandler(object sender, NewProcessedFrameEventArgs e);
-
-
-
-
- public class InputHandler
- {
-
-
-
- private FingerDetector fingerDetector;
-
-
-
- private FingerTracker fingerTracker;
-
-
-
- private HandDetector handDetector;
-
-
-
- private HandTracker handTracker;
-
-
-
- private IInputProvider inputProvider;
-
-
-
- private PalmDetector palmDetector;
-
-
-
- private PalmTracker palmTracker;
-
-
-
- private bool resetFlag;
-
-
-
- private TouchDetector touchDetector;
-
-
-
- private TouchTracker touchTracker;
-
-
-
- public CoordinateConverter CoordinateConverter { get; private set; }
-
-
-
- public FrameData FrameData { get; private set; }
-
-
-
- public ImageSize ImageSize { get; private set; }
-
-
-
- public event NewProcessedFrameEventHandler NewProcessedFrameEvent;
-
-
-
-
- public InputHandler(IInputProvider inputProvider)
- {
- this.inputProvider = inputProvider;
- initialize();
- inputProvider.NewFrameEvent += handleNewFrame;
- VideoInputProvider videoInputProvider = inputProvider as VideoInputProvider;
- if (videoInputProvider != null)
- videoInputProvider.MovieRestartedEvent += handleMovieRestart;
- }
-
-
-
-
-
- public void handleNewFrame(object sender, NewFrameEventArgs e)
- {
- Timer.start("InputHandler.handleNewFrame");
- FrameData frameData = new FrameData();
- frameData.FrameID = e.FrameID;
- frameData.ImageSize = ImageSize;
-
- frameData.ResetFlag = resetFlag;
- resetFlag = false;
-
- Timer.start("InputHandler.handleNewFrame::createDepthImage");
- frameData.DepthImage = new DepthImage(e.DepthImageRaw);
- Timer.stop("InputHandler.handleNewFrame::createDepthImage");
-
- Timer.start("InputHandler.handleNewFrame::createEdgeImage");
- frameData.EdgeImage = new EdgeImage(frameData.DepthImage);
- Timer.stop("InputHandler.handleNewFrame::createEdgeImage");
-
- Timer.start("InputHandler.handleNewFrame::detectFingers");
- fingerDetector.detectFingers(frameData);
- Timer.stop("InputHandler.handleNewFrame::detectFingers");
-
- Timer.start("InputHandler.handleNewFrame::trackFingers");
- fingerTracker.trackFingers(frameData);
- Timer.stop("InputHandler.handleNewFrame::trackFingers");
-
- Timer.start("InputHandler.handleNewFrame::detectHands");
- handDetector.detectHands(frameData);
- Timer.stop("InputHandler.handleNewFrame::detectHands");
-
- Timer.start("InputHandler.handleNewFrame::trackHands");
- handTracker.trackHands(frameData);
- Timer.stop("InputHandler.handleNewFrame::trackHands");
-
- Timer.start("InputHandler.handleNewFrame::detectPalms");
- palmDetector.detectPalms(frameData);
- Timer.stop("InputHandler.handleNewFrame::detectPalms");
-
- Timer.start("InputHandler.handleNewFrame::trackPalms");
- palmTracker.trackPalms(frameData);
- Timer.stop("InputHandler.handleNewFrame::trackPalms");
-
- Timer.start("InputHandler.handleNewFrame::detectTouches");
- touchDetector.detectTouches(frameData);
- Timer.stop("InputHandler.handleNewFrame::detectTouches");
-
- Timer.start("InputHandler.handleNewFrame::trackTouches");
- touchTracker.trackTouches(frameData);
- Timer.stop("InputHandler.handleNewFrame::trackTouches");
- Timer.start("InputHandler.handleNewFrame::exportResults");
- FrameData = frameData;
- if (NewProcessedFrameEvent != null)
- NewProcessedFrameEvent(this, new NewProcessedFrameEventArgs(frameData));
- Timer.stop("InputHandler.handleNewFrame::exportResults");
- Timer.stop("InputHandler.handleNewFrame");
- if (Parameters.LoggerTimerOutputEnabled)
- Timer.outputAll();
- }
-
-
-
- public void reset()
- {
- touchTracker.reset();
- handTracker.reset();
- palmTracker.reset();
- fingerTracker.reset();
- }
-
-
-
-
-
- private void handleMovieRestart(object sender, EventArgs e)
- {
- reset();
- resetFlag = true;
- }
-
-
-
- private void initialize()
- {
- ImageSize = new ImageSize(inputProvider.ImageWidth, inputProvider.ImageHeight);
- CoordinateConverter = new CoordinateConverter(inputProvider);
- resetFlag = false;
- fingerDetector = new FingerDetector(CoordinateConverter);
- handDetector = new HandDetector();
- palmDetector = new PalmDetector();
- touchDetector = new TouchDetector();
- fingerTracker = new FingerTracker(ImageSize);
- handTracker = new HandTracker(ImageSize);
- palmTracker = new PalmTracker(ImageSize);
- touchTracker = new TouchTracker(ImageSize);
- }
- }
- }
|