|
@@ -25,8 +25,6 @@ namespace bbiwarg
|
|
|
|
|
|
private InputProvider inputProvider;
|
|
|
private InputFrame currentInputFrame;
|
|
|
- private int imageWidth;
|
|
|
- private int imageHeight;
|
|
|
private int currentFrameID;
|
|
|
private int lastFrameID;
|
|
|
|
|
@@ -50,8 +48,6 @@ namespace bbiwarg
|
|
|
public InputHandler(InputProvider inputProvider)
|
|
|
{
|
|
|
this.inputProvider = inputProvider;
|
|
|
- this.imageWidth = inputProvider.ImageWidth;
|
|
|
- this.imageHeight = inputProvider.ImageHeight;
|
|
|
this.currentFrameID = inputProvider.CurrentFrameID;
|
|
|
this.lastFrameID = this.currentFrameID - 1;
|
|
|
|
|
@@ -65,15 +61,15 @@ namespace bbiwarg
|
|
|
palmTracker = new PalmTracker();
|
|
|
touchTracker = new TouchTracker();
|
|
|
|
|
|
- touchEventVisualizer = new TouchEventVisualizer(imageWidth, imageHeight);
|
|
|
+ touchEventVisualizer = new TouchEventVisualizer(Parameters.ImageWidth, Parameters.ImageHeight);
|
|
|
touchTracker.TouchDown += touchEventVisualizer.touchDown;
|
|
|
touchTracker.TouchMove += touchEventVisualizer.touchMove;
|
|
|
touchTracker.TouchUp += touchEventVisualizer.touchUp;
|
|
|
|
|
|
|
|
|
- if (Constants.TuioEnabled)
|
|
|
+ if (Parameters.TuioEnabled)
|
|
|
{
|
|
|
- tuioCommunicator = new TuioCommunicator(Constants.TuioIP.ToString(), Constants.TuioPort);
|
|
|
+ tuioCommunicator = new TuioCommunicator(Parameters.TuioIP.ToString(), Parameters.TuioPort);
|
|
|
touchTracker.TouchDown += tuioCommunicator.touchDown;
|
|
|
touchTracker.TouchMove += tuioCommunicator.touchMove;
|
|
|
touchTracker.TouchUp += tuioCommunicator.touchUp;
|
|
@@ -89,7 +85,7 @@ namespace bbiwarg
|
|
|
|
|
|
touchEventVisualizer.reset();
|
|
|
|
|
|
- if (Constants.TuioEnabled)
|
|
|
+ if (Parameters.TuioEnabled)
|
|
|
tuioCommunicator.reset();
|
|
|
}
|
|
|
|
|
@@ -136,7 +132,7 @@ namespace bbiwarg
|
|
|
currentFrameID = currentInputFrame.FrameID;
|
|
|
Logger.CurrentFrame = currentFrameID;
|
|
|
|
|
|
- if (Constants.TuioEnabled)
|
|
|
+ if (Parameters.TuioEnabled)
|
|
|
tuioCommunicator.initFrame();
|
|
|
|
|
|
Timer.stop("beforeUpdateFrame");
|
|
@@ -146,7 +142,7 @@ namespace bbiwarg
|
|
|
{
|
|
|
Timer.start("afterUpdateFrame");
|
|
|
|
|
|
- if (Constants.TuioEnabled)
|
|
|
+ if (Parameters.TuioEnabled)
|
|
|
tuioCommunicator.commitFrame();
|
|
|
|
|
|
createOutputImages();
|
|
@@ -157,7 +153,7 @@ namespace bbiwarg
|
|
|
private void createConfidenceImage()
|
|
|
{
|
|
|
Timer.start("createCnfdncImg");
|
|
|
- Image<Gray, Int16> rawConfidenceImage = new Image<Gray, Int16>(imageWidth, imageHeight, imageWidth * 2, currentInputFrame.RawConfidenceData);
|
|
|
+ Image<Gray, Int16> rawConfidenceImage = new Image<Gray, Int16>(Parameters.ImageWidth, Parameters.ImageHeight, Parameters.ImageWidth * 2, currentInputFrame.RawConfidenceData);
|
|
|
confidenceImage = new ConfidenceImage(rawConfidenceImage);
|
|
|
Timer.stop("createCnfdncImg");
|
|
|
}
|
|
@@ -165,7 +161,7 @@ namespace bbiwarg
|
|
|
private void createDepthImage()
|
|
|
{
|
|
|
Timer.start("createDepthImage");
|
|
|
- Image<Gray, Int16> rawDepthImage = new Image<Gray, Int16>(imageWidth, imageHeight, imageWidth * 2, currentInputFrame.RawDepthData);
|
|
|
+ Image<Gray, Int16> rawDepthImage = new Image<Gray, Int16>(Parameters.ImageWidth, Parameters.ImageHeight, Parameters.ImageWidth * 2, currentInputFrame.RawDepthData);
|
|
|
rawDepthImage = rawDepthImage.Or((1 - confidenceImage.Mask).Convert<Gray, Int16>().Mul(Int16.MaxValue));
|
|
|
depthImage = new DepthImage(rawDepthImage);
|
|
|
Timer.stop("createDepthImage");
|
|
@@ -237,61 +233,61 @@ namespace bbiwarg
|
|
|
private void createOutputImages()
|
|
|
{
|
|
|
Timer.start("createOutputImages");
|
|
|
- int numImages = Constants.OutputNumImages;
|
|
|
+ int numImages = Parameters.OutputNumImages;
|
|
|
OutputImages = new OutputImage[numImages];
|
|
|
for (int i = 0; i < numImages; i++)
|
|
|
{
|
|
|
- OutputImages[i] = new OutputImage(imageWidth, imageHeight);
|
|
|
+ OutputImages[i] = new OutputImage(Parameters.ImageWidth, Parameters.ImageHeight);
|
|
|
}
|
|
|
|
|
|
//image0
|
|
|
- OutputImages[0].drawImage((depthImage.MaxDepth - depthImage.MinDepth) - depthImage.Image, Constants.DepthImageColor);
|
|
|
+ OutputImages[0].drawImage((depthImage.MaxDepth - depthImage.MinDepth) - depthImage.Image, Parameters.DepthImageColor);
|
|
|
foreach (Finger f in fingerTracker.Fingers)
|
|
|
{
|
|
|
- OutputImages[0].fillCircle(f.TipPoint.IntX, f.TipPoint.IntY, 4, Constants.FingerTipColor);
|
|
|
+ OutputImages[0].fillCircle(f.TipPoint.IntX, f.TipPoint.IntY, 4, Parameters.FingerTipColor);
|
|
|
}
|
|
|
|
|
|
foreach (TrackedFinger tf in fingerTracker.TrackedObjects)
|
|
|
{
|
|
|
if (tf.CurrentState == TrackingState.Tracked)
|
|
|
{
|
|
|
- OutputImages[0].fillCircle(tf.TipPointPrediction.IntX, tf.TipPointPrediction.IntY, 3, Constants.FingerPointsPredictionColor);
|
|
|
- OutputImages[0].fillCircle(tf.HandPointPrediction.IntX, tf.HandPointPrediction.IntY, 3, Constants.FingerPointsPredictionColor);
|
|
|
+ OutputImages[0].fillCircle(tf.TipPointPrediction.IntX, tf.TipPointPrediction.IntY, 3, Parameters.FingerPointsPredictionColor);
|
|
|
+ OutputImages[0].fillCircle(tf.HandPointPrediction.IntX, tf.HandPointPrediction.IntY, 3, Parameters.FingerPointsPredictionColor);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//image1
|
|
|
- OutputImages[1].drawImage(edgeImage.Image.ThresholdBinary(new Gray(0), new Gray(255)), Constants.EdgeImageColor);
|
|
|
+ OutputImages[1].drawImage(edgeImage.Image.ThresholdBinary(new Gray(0), new Gray(255)), Parameters.EdgeImageColor);
|
|
|
foreach (Finger f in fingerTracker.Fingers)
|
|
|
{
|
|
|
for (int i = 0; i < f.SliceTrail.NumSlices; i++)
|
|
|
- OutputImages[1].drawLineSegment(f.SliceTrail[i].LineSegment, Constants.FingerSliceColor);
|
|
|
- OutputImages[1].drawContour(f.Contour, Constants.FingerContourColor);
|
|
|
- OutputImages[1].drawLineSegment(f.LineSegment, Constants.FingerTrackedColor);
|
|
|
- OutputImages[1].drawText(f.MidPoint.IntX, f.MidPoint.IntY, f.TrackID.ToString(), Constants.FingerIDColor);
|
|
|
+ OutputImages[1].drawLineSegment(f.SliceTrail[i].LineSegment, Parameters.FingerSliceColor);
|
|
|
+ OutputImages[1].drawContour(f.Contour, Parameters.FingerContourColor);
|
|
|
+ OutputImages[1].drawLineSegment(f.LineSegment, Parameters.FingerTrackedColor);
|
|
|
+ OutputImages[1].drawText(f.MidPoint.IntX, f.MidPoint.IntY, f.TrackID.ToString(), Parameters.FingerIDColor);
|
|
|
}
|
|
|
|
|
|
//image2
|
|
|
foreach (Hand h in handTracker.Hands)
|
|
|
{
|
|
|
- OutputImages[2].drawImage(h.Mask.ThresholdBinary(new Gray(0), new Gray(255)), Constants.HandColor[h.ZIndex % Constants.HandNumColors]);
|
|
|
- OutputImages[2].fillCircle(h.Centroid.IntX, h.Centroid.IntY, 5, Constants.HandCentroidColor);
|
|
|
- OutputImages[2].drawText(h.Centroid.IntX, h.Centroid.IntY, h.TrackID.ToString(), Constants.HandIDColor);
|
|
|
+ OutputImages[2].drawImage(h.Mask.ThresholdBinary(new Gray(0), new Gray(255)), Parameters.HandColor[h.ZIndex % Parameters.HandNumColors]);
|
|
|
+ OutputImages[2].fillCircle(h.Centroid.IntX, h.Centroid.IntY, 5, Parameters.HandCentroidColor);
|
|
|
+ OutputImages[2].drawText(h.Centroid.IntX, h.Centroid.IntY, h.TrackID.ToString(), Parameters.HandIDColor);
|
|
|
|
|
|
if (h.ThumbDefect != null)
|
|
|
- OutputImages[2].drawDefect(h.ThumbDefect, Color.CornflowerBlue, Color.Yellow);
|
|
|
+ OutputImages[2].drawDefect(h.ThumbDefect, Parameters.HandThumbDefectPointColor, Parameters.HandThumbDefectLineColor);
|
|
|
}
|
|
|
|
|
|
//image3
|
|
|
- OutputImages[3].drawImage((depthImage.MaxDepth - depthImage.MinDepth) - depthImage.Image.Or(255 - handDetector.HandMask.ThresholdBinary(new Gray(0), new Gray(255))), Constants.DepthImageColor);
|
|
|
+ OutputImages[3].drawImage((depthImage.MaxDepth - depthImage.MinDepth) - depthImage.Image.Or(255 - handDetector.HandMask.ThresholdBinary(new Gray(0), new Gray(255))), Parameters.DepthImageColor);
|
|
|
foreach (TrackedTouchEvent tte in touchTracker.TrackedObjects)
|
|
|
{
|
|
|
Vector2D position = tte.AbsolutePositionPrediction;
|
|
|
- OutputImages[3].fillCircle(position.IntX, position.IntY, 5, Constants.TouchEventTrackedColor);
|
|
|
+ OutputImages[3].fillCircle(position.IntX, position.IntY, 5, Parameters.TouchEventTrackedColor);
|
|
|
}
|
|
|
foreach (Palm p in palmTracker.OptimizedPalms)
|
|
|
{
|
|
|
- OutputImages[3].drawQuadrangleGrid(p.Quad, Constants.PalmQuadColor, Constants.PalmGridColor, Constants.PalmGridNumRows, Constants.PalmGridNumColumns);
|
|
|
+ OutputImages[3].drawQuadrangleGrid(p.Quad, Parameters.PalmQuadColor, Parameters.PalmGridColor, Parameters.PalmGridNumRows, Parameters.PalmGridNumColumns);
|
|
|
}
|
|
|
|
|
|
//image4
|
|
@@ -302,7 +298,7 @@ namespace bbiwarg
|
|
|
//borders
|
|
|
for (int i = 0; i < numImages; i++)
|
|
|
{
|
|
|
- OutputImages[i].drawRectangle(0, 0, imageWidth - 1, imageHeight - 1, Constants.OutputImageBorderColor);
|
|
|
+ OutputImages[i].drawRectangle(0, 0, Parameters.ImageWidth - 1, Parameters.ImageHeight - 1, Parameters.OutputImageBorderColor);
|
|
|
}
|
|
|
|
|
|
Timer.stop("createOutputImages");
|