diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline2d.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline2d.java index de9f4baf5..2e0f2f893 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline2d.java +++ b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline2d.java @@ -29,6 +29,8 @@ public class CVPipeline2d extends CVPipeline draw2dContoursResult = draw2dContoursPipe.run(Pair.of(outputMatResult.getLeft(), sortContoursResult.getLeft())); totalPipelineTimeNanos += draw2dContoursResult.getRight(); + // takes pair of (Mat to draw on, List of sorted contours) + Pair draw2dCrosshairResult = draw2dCrosshairPipe.run(Pair.of(draw2dContoursResult.getLeft(),collect2dTargetsResult.getLeft())); + totalPipelineTimeNanos += draw2dCrosshairResult.getRight(); + if (Main.testMode) { pipelineTimeString += String.format("PipeInit: %.2fms, ", pipeInitTimeNanos / 1000000.0); pipelineTimeString += String.format("RotateFlip: %.2fms, ", rotateFlipResult.getRight() / 1000000.0); @@ -174,6 +181,7 @@ public class CVPipeline2d extends CVPipeline { diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Draw2dContoursPipe.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Draw2dContoursPipe.java index af7655af6..7c981f11f 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Draw2dContoursPipe.java +++ b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Draw2dContoursPipe.java @@ -40,7 +40,7 @@ public class Draw2dContoursPipe implements Pipe>, Ma public Pair run(Pair> input) { long processStartNanos = System.nanoTime(); - if (settings.showCrosshair || settings.showCentroid || settings.showMaximumBox || settings.showRotatedBox) { + if (settings.showCentroid || settings.showMaximumBox || settings.showRotatedBox) { // input.getLeft().copyTo(processBuffer); // processBuffer = input.getLeft(); @@ -77,34 +77,32 @@ public class Draw2dContoursPipe implements Pipe>, Ma } } - if (settings.showCrosshair) { - xMax.set(new double[] {camProps.centerX + 10, camProps.centerY}); - xMin.set(new double[] {camProps.centerX - 10, camProps.centerY}); - yMax.set(new double[] {camProps.centerX, camProps.centerY + 10}); - yMin.set(new double[] {camProps.centerX, camProps.centerY - 10}); - Imgproc.line(input.getLeft(), xMax, xMin, Helpers.colorToScalar(settings.crosshairColor), 2); - Imgproc.line(input.getLeft(), yMax, yMin, Helpers.colorToScalar(settings.crosshairColor), 2); - } + //Moved to Draw2dCrosshair +// if (settings.showCrosshair) { +// xMax.set(new double[] {camProps.centerX + 10, camProps.centerY}); +// xMin.set(new double[] {camProps.centerX - 10, camProps.centerY}); +// yMax.set(new double[] {camProps.centerX, camProps.centerY + 10}); +// yMin.set(new double[] {camProps.centerX, camProps.centerY - 10}); +// Imgproc.line(input.getLeft(), xMax, xMin, Helpers.colorToScalar(settings.crosshairColor), 2); +// Imgproc.line(input.getLeft(), yMax, yMin, Helpers.colorToScalar(settings.crosshairColor), 2); +// } // processBuffer.copyTo(outputMat); // processBuffer.release(); } else { // input.getLeft().copyTo(outputMat); } - long processTime = System.nanoTime() - processStartNanos; return Pair.of(input.getLeft(), processTime); } public static class Draw2dContoursSettings { public boolean showCentroid = false; - public boolean showCrosshair = false; public boolean showMultiple = false; public int boxOutlineSize = 0; public boolean showRotatedBox = false; public boolean showMaximumBox = false; public Color centroidColor = Color.GREEN; - public Color crosshairColor = Color.GREEN; public Color rotatedBoxColor = Color.BLUE; public Color maximumBoxColor = Color.RED; } diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Draw2dCrosshairPipe.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Draw2dCrosshairPipe.java new file mode 100644 index 000000000..8d7f29afd --- /dev/null +++ b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Draw2dCrosshairPipe.java @@ -0,0 +1,53 @@ +package com.chameleonvision.vision.pipeline.pipes; + +import com.chameleonvision.util.Helpers; +import com.chameleonvision.vision.camera.CaptureStaticProperties; +import com.chameleonvision.vision.pipeline.CVPipeline2d; +import org.apache.commons.lang3.tuple.Pair; +import org.opencv.core.Mat; +import org.opencv.core.Point; +import org.opencv.imgproc.Imgproc; + +import java.awt.*; +import java.util.List; + +public class Draw2dCrosshairPipe implements Pipe>, Mat>{ + + private final Draw2dCrosshairPipe.Draw2dCrosshairPipeSettings settings; + private Point xMax = new Point(), xMin = new Point(), yMax = new Point(), yMin = new Point(); + + public Draw2dCrosshairPipe(Draw2dCrosshairPipe.Draw2dCrosshairPipeSettings settings) { + this.settings = settings; + } + + public void setConfig(boolean showCrosshair) { + this.settings.showCrosshair = showCrosshair; + } + + @Override + public Pair run(Pair> inputPair) { + long processStartNanos = System.nanoTime(); + + List targets = inputPair.getRight(); + double x,y; + if(targets != null && !targets.isEmpty()) { + x = targets.get(0).calibratedX; + y = targets.get(0).calibratedY; + if (this.settings.showCrosshair) { + xMax.set(new double[] {x + 10, y}); + xMin.set(new double[] {x - 10, y}); + yMax.set(new double[] {x, y + 10}); + yMin.set(new double[] {x, y - 10}); + Imgproc.line(inputPair.getLeft(), xMax, xMin, Helpers.colorToScalar(this.settings.crosshairColor), 2); + Imgproc.line(inputPair.getLeft(), yMax, yMin, Helpers.colorToScalar(this.settings.crosshairColor), 2); + } + } +// image.release(); + long processTime = System.nanoTime() - processStartNanos; + return Pair.of(inputPair.getLeft(), processTime); + } + public static class Draw2dCrosshairPipeSettings{ + public boolean showCrosshair =true; + public Color crosshairColor = Color.GREEN; + } +}