From 339d6dc478e6f3e374f551307923b95317cac191 Mon Sep 17 00:00:00 2001 From: Omer Date: Fri, 6 Dec 2019 23:48:21 +0200 Subject: [PATCH 1/7] Created new CaptureStaticProperties when rotating cam --- .../vision/image/CaptureProperties.java | 2 +- .../chameleonvision/web/SocketHandler.java | 35 +++++++++++++++---- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/image/CaptureProperties.java b/chameleon-server/src/main/java/com/chameleonvision/vision/image/CaptureProperties.java index 8717bb88d..5bfa1ca46 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/image/CaptureProperties.java +++ b/chameleon-server/src/main/java/com/chameleonvision/vision/image/CaptureProperties.java @@ -14,7 +14,7 @@ public class CaptureProperties { public CaptureProperties(VideoMode videoMode, double fov) { staticProperties = new CaptureStaticProperties(videoMode, fov); } - + public void setStaticProperties(CaptureStaticProperties staticProperties) {this.staticProperties = staticProperties;} public CaptureStaticProperties getStaticProperties() { return staticProperties; } diff --git a/chameleon-server/src/main/java/com/chameleonvision/web/SocketHandler.java b/chameleon-server/src/main/java/com/chameleonvision/web/SocketHandler.java index 0adf079f2..ae5066f6d 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/web/SocketHandler.java +++ b/chameleon-server/src/main/java/com/chameleonvision/web/SocketHandler.java @@ -4,13 +4,17 @@ 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.camera.CaptureStaticProperties; import com.chameleonvision.vision.camera.USBCameraCapture; +import com.chameleonvision.vision.enums.ImageRotationMode; import com.chameleonvision.vision.enums.StreamDivisor; import com.chameleonvision.vision.pipeline.CVPipeline; +import com.chameleonvision.vision.pipeline.CVPipeline2d; import com.chameleonvision.vision.pipeline.CVPipelineSettings; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import edu.wpi.cscore.VideoMode; import io.javalin.websocket.WsBinaryMessageContext; import io.javalin.websocket.WsCloseContext; import io.javalin.websocket.WsConnectContext; @@ -20,10 +24,7 @@ import org.msgpack.jackson.dataformat.MessagePackFactory; import java.lang.reflect.Field; import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public class SocketHandler { @@ -137,7 +138,7 @@ public class SocketHandler { default: { // only change settings when we aren't in driver mode - if(currentProcess.pipelineManager.getDriverMode()) { + if (currentProcess.pipelineManager.getDriverMode()) { setField(currentProcess.pipelineManager.driverModePipeline.settings, entry.getKey(), entry.getValue()); } else { setField(currentPipeline.settings, entry.getKey(), entry.getValue()); @@ -152,14 +153,34 @@ public class SocketHandler { currentCamera.setBrightness((Integer) entry.getValue()); break; } - case "videoModeIndex":{ + case "videoModeIndex": { + if (currentPipeline instanceof CVPipeline2d) + ((CVPipeline2d) currentPipeline).settings.point = new ArrayList<>();//This will reset the calibration currentCamera.setVideoMode((Integer) entry.getValue()); break; } - case "streamDivisor":{ + case "streamDivisor": { currentProcess.cameraStreamer.setDivisor(StreamDivisor.values()[(Integer) entry.getValue()], true); break; } + case "rotationMode": {//Create new CaptureStaticProperties with new width and height, reset crosshair calib + ImageRotationMode rotationMode = currentPipeline.settings.rotationMode; + CaptureStaticProperties prop = currentCamera.getProperties().getStaticProperties(); + int width, height; + if (rotationMode == ImageRotationMode.DEG_90 || rotationMode == ImageRotationMode.DEG_270) { + width = prop.mode.height; + height = prop.mode.width; + } else { + width = prop.mode.width; + height = prop.mode.height; + } + //Creates new video mode with new width and height to create new CaptureStaticProperties and applies it + currentCamera.getProperties().setStaticProperties(new CaptureStaticProperties(new VideoMode(prop.mode.pixelFormat, width, height, prop.mode.fps), prop.fov)); + + if (currentPipeline instanceof CVPipeline2d) + ((CVPipeline2d) currentPipeline).settings.point = Arrays.asList(width/2,height/2);//Reset Crosshair in single point calib + break; + } } VisionManager.saveCurrentCameraPipelines(); From 88befb4d9073201f15c761f6a6b6ae6b6c57b086 Mon Sep 17 00:00:00 2001 From: Omer Date: Sat, 7 Dec 2019 00:20:04 +0200 Subject: [PATCH 2/7] File stucture change, moved Pipeline implementation and their settings to /impl folder, refracted imports --- .../java/com/chameleonvision/config/PipelineConfig.java | 2 ++ .../java/com/chameleonvision/vision/VisionProcess.java | 4 +++- .../com/chameleonvision/vision/pipeline/CVPipeline.java | 1 + .../chameleonvision/vision/pipeline/PipelineManager.java | 1 + .../vision/pipeline/{ => impl}/CVPipeline2d.java | 7 ++++--- .../vision/pipeline/{ => impl}/CVPipeline2dSettings.java | 3 ++- .../vision/pipeline/{ => impl}/CVPipeline3d.java | 6 ++++-- .../vision/pipeline/{ => impl}/CVPipeline3dSettings.java | 2 +- .../vision/pipeline/{ => impl}/DriverVisionPipeline.java | 8 +++++--- .../vision/pipeline/pipes/Collect2dTargetsPipe.java | 4 +--- .../vision/pipeline/pipes/Draw2dCrosshairPipe.java | 4 +--- .../main/java/com/chameleonvision/web/SocketHandler.java | 3 ++- .../com/chameleonvision/config/StaticCaptureTest.java | 3 +-- 13 files changed, 28 insertions(+), 20 deletions(-) rename chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/{ => impl}/CVPipeline2d.java (97%) rename chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/{ => impl}/CVPipeline2dSettings.java (91%) rename chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/{ => impl}/CVPipeline3d.java (76%) rename chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/{ => impl}/CVPipeline3dSettings.java (82%) rename chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/{ => impl}/DriverVisionPipeline.java (88%) diff --git a/chameleon-server/src/main/java/com/chameleonvision/config/PipelineConfig.java b/chameleon-server/src/main/java/com/chameleonvision/config/PipelineConfig.java index e57ca250f..61376ed0e 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/config/PipelineConfig.java +++ b/chameleon-server/src/main/java/com/chameleonvision/config/PipelineConfig.java @@ -2,6 +2,8 @@ package com.chameleonvision.config; import com.chameleonvision.util.JacksonHelper; import com.chameleonvision.vision.pipeline.*; +import com.chameleonvision.vision.pipeline.impl.CVPipeline2dSettings; +import com.chameleonvision.vision.pipeline.impl.CVPipeline3dSettings; import java.io.File; import java.io.IOException; diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/VisionProcess.java b/chameleon-server/src/main/java/com/chameleonvision/vision/VisionProcess.java index 9d11db4fd..595d49905 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/VisionProcess.java +++ b/chameleon-server/src/main/java/com/chameleonvision/vision/VisionProcess.java @@ -3,10 +3,12 @@ package com.chameleonvision.vision; import com.chameleonvision.Debug; import com.chameleonvision.config.ConfigManager; import com.chameleonvision.util.LoopingRunnable; -import com.chameleonvision.vision.camera.CameraCapture; import com.chameleonvision.vision.camera.CameraStreamer; import com.chameleonvision.vision.camera.USBCameraCapture; import com.chameleonvision.vision.pipeline.*; +import com.chameleonvision.vision.pipeline.impl.CVPipeline2d; +import com.chameleonvision.vision.pipeline.impl.CVPipeline3d; +import com.chameleonvision.vision.pipeline.impl.DriverVisionPipeline; import com.chameleonvision.web.SocketHandler; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline.java index 092939ace..d71bd64fb 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline.java +++ b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline.java @@ -1,6 +1,7 @@ package com.chameleonvision.vision.pipeline; import com.chameleonvision.vision.camera.CameraCapture; +import com.chameleonvision.vision.pipeline.impl.CVPipeline3d; import org.opencv.core.Mat; /** diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/PipelineManager.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/PipelineManager.java index 7e6a942a1..b0a2649f7 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/PipelineManager.java +++ b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/PipelineManager.java @@ -4,6 +4,7 @@ import com.chameleonvision.config.CameraConfig; import com.chameleonvision.config.ConfigManager; import com.chameleonvision.vision.VisionManager; import com.chameleonvision.vision.VisionProcess; +import com.chameleonvision.vision.pipeline.impl.*; import com.chameleonvision.web.SocketHandler; import edu.wpi.first.networktables.NetworkTableEntry; diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline2d.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/CVPipeline2d.java similarity index 97% rename from chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline2d.java rename to chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/CVPipeline2d.java index d7b45bacf..aeb75f5d2 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline2d.java +++ b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/CVPipeline2d.java @@ -1,17 +1,18 @@ -package com.chameleonvision.vision.pipeline; +package com.chameleonvision.vision.pipeline.impl; import com.chameleonvision.Main; import com.chameleonvision.util.MemoryManager; import com.chameleonvision.vision.camera.CameraCapture; import com.chameleonvision.vision.camera.CaptureStaticProperties; -import com.chameleonvision.vision.enums.CalibrationMode; +import com.chameleonvision.vision.pipeline.CVPipeline; +import com.chameleonvision.vision.pipeline.CVPipelineResult; import com.chameleonvision.vision.pipeline.pipes.*; import org.apache.commons.lang3.tuple.Pair; import org.opencv.core.*; import java.util.List; -import static com.chameleonvision.vision.pipeline.CVPipeline2d.*; +import static com.chameleonvision.vision.pipeline.impl.CVPipeline2d.*; @SuppressWarnings("WeakerAccess") public class CVPipeline2d extends CVPipeline { diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline2dSettings.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/CVPipeline2dSettings.java similarity index 91% rename from chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline2dSettings.java rename to chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/CVPipeline2dSettings.java index 2f3be3ed8..4f023f16c 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline2dSettings.java +++ b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/CVPipeline2dSettings.java @@ -1,9 +1,10 @@ -package com.chameleonvision.vision.pipeline; +package com.chameleonvision.vision.pipeline.impl; import com.chameleonvision.vision.enums.CalibrationMode; import com.chameleonvision.vision.enums.SortMode; import com.chameleonvision.vision.enums.TargetGroup; import com.chameleonvision.vision.enums.TargetIntersection; +import com.chameleonvision.vision.pipeline.CVPipelineSettings; import java.util.Arrays; import java.util.List; diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline3d.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/CVPipeline3d.java similarity index 76% rename from chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline3d.java rename to chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/CVPipeline3d.java index 7db893fef..c39469500 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline3d.java +++ b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/CVPipeline3d.java @@ -1,10 +1,12 @@ -package com.chameleonvision.vision.pipeline; +package com.chameleonvision.vision.pipeline.impl; +import com.chameleonvision.vision.pipeline.CVPipeline; +import com.chameleonvision.vision.pipeline.CVPipelineResult; import org.opencv.core.Mat; import java.util.List; -import static com.chameleonvision.vision.pipeline.CVPipeline3d.*; +import static com.chameleonvision.vision.pipeline.impl.CVPipeline3d.*; public class CVPipeline3d extends CVPipeline { diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline3dSettings.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/CVPipeline3dSettings.java similarity index 82% rename from chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline3dSettings.java rename to chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/CVPipeline3dSettings.java index 342659ca1..70729f5b8 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline3dSettings.java +++ b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/CVPipeline3dSettings.java @@ -1,4 +1,4 @@ -package com.chameleonvision.vision.pipeline; +package com.chameleonvision.vision.pipeline.impl; public class CVPipeline3dSettings extends CVPipeline2dSettings { // TODO: (2.1) define 3d-specific pipeline settings diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/DriverVisionPipeline.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/DriverVisionPipeline.java similarity index 88% rename from chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/DriverVisionPipeline.java rename to chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/DriverVisionPipeline.java index e00c156e4..ec38034d9 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/DriverVisionPipeline.java +++ b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/DriverVisionPipeline.java @@ -1,9 +1,11 @@ -package com.chameleonvision.vision.pipeline; +package com.chameleonvision.vision.pipeline.impl; import com.chameleonvision.util.MemoryManager; import com.chameleonvision.vision.camera.CameraCapture; import com.chameleonvision.vision.enums.CalibrationMode; -import com.chameleonvision.vision.pipeline.pipes.Draw2dContoursPipe; +import com.chameleonvision.vision.pipeline.CVPipeline; +import com.chameleonvision.vision.pipeline.CVPipelineResult; +import com.chameleonvision.vision.pipeline.CVPipelineSettings; import com.chameleonvision.vision.pipeline.pipes.Draw2dCrosshairPipe; import com.chameleonvision.vision.pipeline.pipes.RotateFlipPipe; import org.apache.commons.lang3.tuple.Pair; @@ -12,7 +14,7 @@ import org.opencv.core.RotatedRect; import java.util.List; -import static com.chameleonvision.vision.pipeline.DriverVisionPipeline.DriverPipelineResult; +import static com.chameleonvision.vision.pipeline.impl.DriverVisionPipeline.DriverPipelineResult; public class DriverVisionPipeline extends CVPipeline { diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Collect2dTargetsPipe.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Collect2dTargetsPipe.java index 3d30f7d72..cafa503c6 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Collect2dTargetsPipe.java +++ b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/pipes/Collect2dTargetsPipe.java @@ -1,12 +1,10 @@ package com.chameleonvision.vision.pipeline.pipes; import com.chameleonvision.vision.camera.CaptureStaticProperties; -import com.chameleonvision.vision.pipeline.CVPipeline2d; +import com.chameleonvision.vision.pipeline.impl.CVPipeline2d; import com.chameleonvision.vision.enums.CalibrationMode; -import com.chameleonvision.vision.pipeline.CVPipeline2dSettings; import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.math3.util.FastMath; -import org.opencv.core.Mat; import org.opencv.core.RotatedRect; import java.util.ArrayList; 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 index d0834420a..4f5ed80c5 100644 --- 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 @@ -1,10 +1,8 @@ package com.chameleonvision.vision.pipeline.pipes; import com.chameleonvision.util.Helpers; -import com.chameleonvision.vision.camera.CaptureStaticProperties; import com.chameleonvision.vision.enums.CalibrationMode; -import com.chameleonvision.vision.pipeline.CVPipeline2d; -import com.chameleonvision.vision.pipeline.CVPipeline2dSettings; +import com.chameleonvision.vision.pipeline.impl.CVPipeline2d; import org.apache.commons.lang3.tuple.Pair; import org.opencv.core.Mat; import org.opencv.core.Point; diff --git a/chameleon-server/src/main/java/com/chameleonvision/web/SocketHandler.java b/chameleon-server/src/main/java/com/chameleonvision/web/SocketHandler.java index ae5066f6d..342b132a2 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/web/SocketHandler.java +++ b/chameleon-server/src/main/java/com/chameleonvision/web/SocketHandler.java @@ -9,7 +9,7 @@ import com.chameleonvision.vision.camera.USBCameraCapture; import com.chameleonvision.vision.enums.ImageRotationMode; import com.chameleonvision.vision.enums.StreamDivisor; import com.chameleonvision.vision.pipeline.CVPipeline; -import com.chameleonvision.vision.pipeline.CVPipeline2d; +import com.chameleonvision.vision.pipeline.impl.CVPipeline2d; import com.chameleonvision.vision.pipeline.CVPipelineSettings; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; @@ -164,6 +164,7 @@ public class SocketHandler { break; } case "rotationMode": {//Create new CaptureStaticProperties with new width and height, reset crosshair calib + ImageRotationMode rotationMode = currentPipeline.settings.rotationMode; CaptureStaticProperties prop = currentCamera.getProperties().getStaticProperties(); int width, height; diff --git a/chameleon-server/src/test/java/com/chameleonvision/config/StaticCaptureTest.java b/chameleon-server/src/test/java/com/chameleonvision/config/StaticCaptureTest.java index 93ead0087..845fd2fda 100644 --- a/chameleon-server/src/test/java/com/chameleonvision/config/StaticCaptureTest.java +++ b/chameleon-server/src/test/java/com/chameleonvision/config/StaticCaptureTest.java @@ -3,7 +3,7 @@ package com.chameleonvision.config; import com.chameleonvision.util.ProgramDirectoryUtilities; import com.chameleonvision.vision.camera.CameraStreamer; import com.chameleonvision.vision.image.StaticImageCapture; -import com.chameleonvision.vision.pipeline.CVPipeline2d; +import com.chameleonvision.vision.pipeline.impl.CVPipeline2d; import edu.wpi.cscore.CameraServerCvJNI; import edu.wpi.cscore.CameraServerJNI; import edu.wpi.first.networktables.NetworkTableInstance; @@ -17,7 +17,6 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; From 6cc0c65a7a87f3e820253c51cf98b6f00c14a466 Mon Sep 17 00:00:00 2001 From: Omer Date: Sat, 7 Dec 2019 00:26:02 +0200 Subject: [PATCH 3/7] ignore auto created iml file --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 12b3f0298..af64d4a70 100644 --- a/.gitignore +++ b/.gitignore @@ -113,6 +113,7 @@ chameleon-server/.classpath chameleon-server/.project chameleon-server/settings chameleon-server/dependency-reduced-pom.xml +chameleon-server/chameleon-vision.iml New client/chameleon-client/* From 078cf0293ac393a79474823b0a4de4e564232eb7 Mon Sep 17 00:00:00 2001 From: Omer Date: Sat, 7 Dec 2019 00:26:39 +0200 Subject: [PATCH 4/7] ignore auto created iml file --- chameleon-server/chameleon-vision.iml | 86 --------------------------- 1 file changed, 86 deletions(-) delete mode 100644 chameleon-server/chameleon-vision.iml diff --git a/chameleon-server/chameleon-vision.iml b/chameleon-server/chameleon-vision.iml deleted file mode 100644 index 4c5213fa3..000000000 --- a/chameleon-server/chameleon-vision.iml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From ed5c90f51ba7398b62e2d5c66ca5bcaeaf2c6ada Mon Sep 17 00:00:00 2001 From: Omer Date: Sat, 7 Dec 2019 00:39:14 +0200 Subject: [PATCH 5/7] Fix lack of access problems after moving pipleline impl out of the same package --- .../java/com/chameleonvision/vision/pipeline/CVPipeline.java | 2 +- .../chameleonvision/vision/pipeline/impl/CVPipeline3d.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline.java index d71bd64fb..9355636e7 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline.java +++ b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline.java @@ -10,7 +10,7 @@ import org.opencv.core.Mat; */ public abstract class CVPipeline { protected Mat outputMat = new Mat(); - CameraCapture cameraCapture; + protected CameraCapture cameraCapture; public S settings; protected CVPipeline(S settings) { diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/CVPipeline3d.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/CVPipeline3d.java index c39469500..503627c80 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/CVPipeline3d.java +++ b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/CVPipeline3d.java @@ -11,11 +11,11 @@ import static com.chameleonvision.vision.pipeline.impl.CVPipeline3d.*; public class CVPipeline3d extends CVPipeline { - protected CVPipeline3d(CVPipeline3dSettings settings) { + public CVPipeline3d(CVPipeline3dSettings settings) { super(settings); } - CVPipeline3d() { + public CVPipeline3d() { super(new CVPipeline3dSettings()); } From 617e9b4b34443dfadfebb63adae04696d51bf71c Mon Sep 17 00:00:00 2001 From: Omer Date: Sat, 7 Dec 2019 00:40:27 +0200 Subject: [PATCH 6/7] Removed commented lines --- .../vision/pipeline/impl/DriverVisionPipeline.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/DriverVisionPipeline.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/DriverVisionPipeline.java index ec38034d9..1dcff6a30 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/DriverVisionPipeline.java +++ b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/impl/DriverVisionPipeline.java @@ -19,11 +19,8 @@ import static com.chameleonvision.vision.pipeline.impl.DriverVisionPipeline.Driv public class DriverVisionPipeline extends CVPipeline { private RotateFlipPipe rotateFlipPipe; -// private Draw2dContoursPipe draw2dContoursPipe; -// private Draw2dContoursPipe.Draw2dContoursSettings draw2dContoursSettings = new Draw2dContoursPipe.Draw2dContoursSettings(); private Draw2dCrosshairPipe drawCrosshairPipe; private Draw2dCrosshairPipe.Draw2dCrosshairPipeSettings crosshairPipeSettings = new Draw2dCrosshairPipe.Draw2dCrosshairPipeSettings(); - private final List blankList = List.of(); private final MemoryManager memoryManager = new MemoryManager(200, 20000); @@ -38,18 +35,14 @@ public class DriverVisionPipeline extends CVPipeline rotateFlipResult = rotateFlipPipe.run(inputMat); -// Pair draw2dContoursResult = draw2dContoursPipe.run(Pair.of(rotateFlipResult.getLeft(), blankList)); Pair draw2dCrosshairResult = drawCrosshairPipe.run(Pair.of(rotateFlipResult.getLeft(),null)); memoryManager.run(); From b92a06895c70bf838508d78f4ef4bc0ea6dd5d61 Mon Sep 17 00:00:00 2001 From: Omer Date: Sat, 7 Dec 2019 01:53:42 +0200 Subject: [PATCH 7/7] Fixed bug when selecting the same 90 deg rotation twice causes crosshair to move --- .../vision/enums/ImageRotationMode.java | 2 + .../chameleonvision/web/SocketHandler.java | 44 ++++++++++--------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/ImageRotationMode.java b/chameleon-server/src/main/java/com/chameleonvision/vision/enums/ImageRotationMode.java index c7920b46d..b22150aab 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/vision/enums/ImageRotationMode.java +++ b/chameleon-server/src/main/java/com/chameleonvision/vision/enums/ImageRotationMode.java @@ -13,4 +13,6 @@ public enum ImageRotationMode { ImageRotationMode(int value) { this.value = value; } + + public boolean isRotated(){return this.value==DEG_90.value||this.value==DEG_270.value;} } diff --git a/chameleon-server/src/main/java/com/chameleonvision/web/SocketHandler.java b/chameleon-server/src/main/java/com/chameleonvision/web/SocketHandler.java index 342b132a2..b5e91fbe3 100644 --- a/chameleon-server/src/main/java/com/chameleonvision/web/SocketHandler.java +++ b/chameleon-server/src/main/java/com/chameleonvision/web/SocketHandler.java @@ -25,6 +25,7 @@ import org.msgpack.jackson.dataformat.MessagePackFactory; import java.lang.reflect.Field; import java.nio.ByteBuffer; import java.util.*; +import java.util.List; public class SocketHandler { @@ -137,13 +138,35 @@ public class SocketHandler { } default: { - // only change settings when we aren't in driver mode + switch (entry.getKey()) {//Pre field value set + case "rotationMode": {//Create new CaptureStaticProperties with new width and height, reset crosshair calib + ImageRotationMode oldRot = currentPipeline.settings.rotationMode; + ImageRotationMode newRot = ImageRotationMode.class.getEnumConstants()[(Integer)entry.getValue()]; + CaptureStaticProperties prop = currentCamera.getProperties().getStaticProperties(); + int width, height; + if(oldRot.isRotated()!=newRot.isRotated()){ + width = prop.mode.height; + height = prop.mode.width; + //Creates new video mode with new width and height to create new CaptureStaticProperties and applies it + currentCamera.getProperties().setStaticProperties(new CaptureStaticProperties( + new VideoMode(prop.mode.pixelFormat, width, height, prop.mode.fps), prop.fov)); + } + prop = currentCamera.getProperties().getStaticProperties(); + if (currentPipeline instanceof CVPipeline2d) + ((CVPipeline2d) currentPipeline).settings.point = Arrays.asList(prop.mode.width / 2, prop.mode.height / 2);//Reset Crosshair in single point calib + break; + } + + } + + if (currentProcess.pipelineManager.getDriverMode()) { setField(currentProcess.pipelineManager.driverModePipeline.settings, entry.getKey(), entry.getValue()); } else { setField(currentPipeline.settings, entry.getKey(), entry.getValue()); } + //Post field value set switch (entry.getKey()) { case "exposure": { currentCamera.setExposure((Integer) entry.getValue()); @@ -163,25 +186,6 @@ public class SocketHandler { currentProcess.cameraStreamer.setDivisor(StreamDivisor.values()[(Integer) entry.getValue()], true); break; } - case "rotationMode": {//Create new CaptureStaticProperties with new width and height, reset crosshair calib - - ImageRotationMode rotationMode = currentPipeline.settings.rotationMode; - CaptureStaticProperties prop = currentCamera.getProperties().getStaticProperties(); - int width, height; - if (rotationMode == ImageRotationMode.DEG_90 || rotationMode == ImageRotationMode.DEG_270) { - width = prop.mode.height; - height = prop.mode.width; - } else { - width = prop.mode.width; - height = prop.mode.height; - } - //Creates new video mode with new width and height to create new CaptureStaticProperties and applies it - currentCamera.getProperties().setStaticProperties(new CaptureStaticProperties(new VideoMode(prop.mode.pixelFormat, width, height, prop.mode.fps), prop.fov)); - - if (currentPipeline instanceof CVPipeline2d) - ((CVPipeline2d) currentPipeline).settings.point = Arrays.asList(width/2,height/2);//Reset Crosshair in single point calib - break; - } } VisionManager.saveCurrentCameraPipelines();