From 9e068ea0f0a307f140c4300d0460296719b3790b Mon Sep 17 00:00:00 2001 From: Matt Date: Wed, 27 Nov 2019 20:41:29 -0800 Subject: [PATCH] Fix drivermode NPE and rename visionprocess method --- .../main/java/com/chameleonvision/Main.java | 11 +++++----- .../chameleonvision/vision/VisionProcess.java | 6 +++--- .../vision/pipeline/DriverVisionPipeline.java | 21 ++++++++++++------- .../chameleonvision/web/SocketHandler.java | 5 ++--- 4 files changed, 25 insertions(+), 18 deletions(-) diff --git a/Main/src/main/java/com/chameleonvision/Main.java b/Main/src/main/java/com/chameleonvision/Main.java index 3e861e0b8..40ae252ae 100644 --- a/Main/src/main/java/com/chameleonvision/Main.java +++ b/Main/src/main/java/com/chameleonvision/Main.java @@ -139,11 +139,12 @@ public class Main { NetworkTableInstance.getDefault().startServer(); } else { NetworkTableInstance.getDefault().addLogger(new NTLogger(), 0, 255); // to hide error messages - if (ntClientModeServer != null) { - NetworkTableInstance.getDefault().startClient(ntClientModeServer); - } else { - NetworkTableInstance.getDefault().startClientTeam(ConfigManager.settings.teamNumber); - } +// if (ntClientModeServer != null) { +// NetworkTableInstance.getDefault().startClient(ntClientModeServer); +// } else { +// NetworkTableInstance.getDefault().startClientTeam(ConfigManager.settings.teamNumber); +// } + NetworkTableInstance.getDefault().startClient("localhost"); } boolean visionSourcesOk = VisionManager.initializeSources(); diff --git a/Main/src/main/java/com/chameleonvision/vision/VisionProcess.java b/Main/src/main/java/com/chameleonvision/vision/VisionProcess.java index 2d2027eb6..31a6ec4bf 100644 --- a/Main/src/main/java/com/chameleonvision/vision/VisionProcess.java +++ b/Main/src/main/java/com/chameleonvision/vision/VisionProcess.java @@ -249,9 +249,9 @@ public class VisionProcess { return currentPipelineIndex; } - public void addPipeline() { + public void addBlankPipeline() { // TODO: (2.1) add to UI option between 2d and 3d pipeline - pipelines.add(new CVPipeline2d()); + addPipeline(new CVPipeline2d()); } public void addPipeline(CVPipeline pipeline) { @@ -260,7 +260,7 @@ public class VisionProcess { public void addPipeline(CVPipelineSettings settings) { if (settings instanceof CVPipeline2dSettings) { - pipelines.add(new CVPipeline2d((CVPipeline2dSettings) settings)); + addPipeline(new CVPipeline2d((CVPipeline2dSettings) settings)); } } diff --git a/Main/src/main/java/com/chameleonvision/vision/pipeline/DriverVisionPipeline.java b/Main/src/main/java/com/chameleonvision/vision/pipeline/DriverVisionPipeline.java index c3324a555..ebc445446 100644 --- a/Main/src/main/java/com/chameleonvision/vision/pipeline/DriverVisionPipeline.java +++ b/Main/src/main/java/com/chameleonvision/vision/pipeline/DriverVisionPipeline.java @@ -3,6 +3,7 @@ package com.chameleonvision.vision.pipeline; import com.chameleonvision.vision.pipeline.pipes.Draw2dContoursPipe; import org.apache.commons.lang3.tuple.Pair; import org.opencv.core.Mat; +import org.opencv.core.RotatedRect; import java.util.List; @@ -10,24 +11,30 @@ import static com.chameleonvision.vision.pipeline.DriverVisionPipeline.DriverPip public class DriverVisionPipeline extends CVPipeline { + private Draw2dContoursPipe draw2dContoursPipe = null; + private Draw2dContoursPipe.Draw2dContoursSettings draw2dContoursSettings = new Draw2dContoursPipe.Draw2dContoursSettings(); + private final List blankList = List.of(); + public DriverVisionPipeline(CVPipelineSettings settings) { super(settings); + draw2dContoursSettings.showCrosshair = true; } @Override public DriverPipelineResult runPipeline(Mat inputMat) { - outputMat = inputMat; + inputMat.copyTo(outputMat); var camProps = cameraCapture.getProperties().getStaticProperties(); + if(draw2dContoursPipe == null) { + draw2dContoursPipe = new Draw2dContoursPipe(draw2dContoursSettings, camProps); + } else { + draw2dContoursPipe.setConfig(camProps); + } - Draw2dContoursPipe.Draw2dContoursSettings draw2dContoursSettings = new Draw2dContoursPipe.Draw2dContoursSettings(); - draw2dContoursSettings.showCrosshair = true; - Draw2dContoursPipe draw2dContoursPipe = new Draw2dContoursPipe(draw2dContoursSettings, camProps); + draw2dContoursPipe.run(Pair.of(outputMat, blankList)).getLeft().copyTo(outputMat); - outputMat = draw2dContoursPipe.run(Pair.of(outputMat, null)).getLeft(); - - return new DriverPipelineResult(null, inputMat, 0); + return new DriverPipelineResult(null, outputMat, 0); } public static class DriverPipelineResult extends CVPipelineResult { diff --git a/Main/src/main/java/com/chameleonvision/web/SocketHandler.java b/Main/src/main/java/com/chameleonvision/web/SocketHandler.java index dfd375049..09b70fa84 100644 --- a/Main/src/main/java/com/chameleonvision/web/SocketHandler.java +++ b/Main/src/main/java/com/chameleonvision/web/SocketHandler.java @@ -4,7 +4,6 @@ import com.chameleonvision.config.ConfigManager; import com.chameleonvision.vision.VisionManager; import com.chameleonvision.vision.VisionProcess; import com.chameleonvision.vision.camera.CameraCapture; -import com.chameleonvision.vision.enums.StreamDivisor; import com.chameleonvision.vision.pipeline.CVPipeline; import com.chameleonvision.vision.pipeline.CVPipelineSettings; import com.fasterxml.jackson.core.JsonProcessingException; @@ -76,7 +75,7 @@ public class SocketHandler { VisionManager.saveCurrentCameraPipelines(); break; } - case "duplicatePipeline": { + case "duplicatePipeline": { // TODO doesn't work (HIGH) HashMap pipelineVals = (HashMap) entry.getValue(); int pipelineIndex = (int) pipelineVals.get("pipeline"); int cameraIndex = (int) pipelineVals.get("camera"); @@ -97,7 +96,7 @@ public class SocketHandler { case "command": { switch ((String) entry.getValue()) { case "addNewPipeline": - currentProcess.addPipeline(); + currentProcess.addBlankPipeline(); sendFullSettings(); VisionManager.saveCurrentCameraPipelines(); break;