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/*
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
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/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/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/vision/pipeline/CVPipeline.java b/chameleon-server/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline.java
index 092939ace..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
@@ -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;
/**
@@ -9,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/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 68%
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..503627c80 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,19 +1,21 @@
-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 {
- protected CVPipeline3d(CVPipeline3dSettings settings) {
+ public CVPipeline3d(CVPipeline3dSettings settings) {
super(settings);
}
- CVPipeline3d() {
+ public CVPipeline3d() {
super(new CVPipeline3dSettings());
}
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 71%
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..1dcff6a30 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,16 +14,13 @@ 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 {
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);
@@ -36,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();
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 0adf079f2..b5e91fbe3 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.impl.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,8 @@ 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.*;
import java.util.List;
-import java.util.Map;
public class SocketHandler {
@@ -136,13 +138,35 @@ public class SocketHandler {
}
default: {
- // only change settings when we aren't in driver mode
- if(currentProcess.pipelineManager.getDriverMode()) {
+ 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());
@@ -152,11 +176,13 @@ 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;
}
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;