diff --git a/Main/src/main/java/com/chameleonvision/util/MathHandler.java b/Main/src/main/java/com/chameleonvision/util/MathHandler.java index 76a1a762d..a95a089e3 100644 --- a/Main/src/main/java/com/chameleonvision/util/MathHandler.java +++ b/Main/src/main/java/com/chameleonvision/util/MathHandler.java @@ -1,24 +1,27 @@ package com.chameleonvision.util; import java.lang.Math; + +import edu.wpi.first.wpiutil.math.Num; import org.apache.commons.math3.util.FastMath; public class MathHandler { MathHandler() {} - public static double sigmoid(double x){ + public static double sigmoid(Number x){ double bias = 0; double a = 5; double b = -0.05; double k = 200; - if (x < 50){ + if (x.doubleValue() < 50){ bias = -1.338; } - return ((k / (1 + Math.pow(Math.E,(a + (b * x))))) + bias); + return ((k / (1 + Math.pow(Math.E,(a + (b * x.doubleValue()))))) + bias); } - public static double toSlope(double angle){ - return FastMath.atan(FastMath.toRadians(angle - 90)); + + public static double toSlope(Number angle){ + return FastMath.atan(FastMath.toRadians(angle.doubleValue() - 90)); } } diff --git a/Main/src/main/java/com/chameleonvision/vision/Pipeline.java b/Main/src/main/java/com/chameleonvision/vision/Pipeline.java index e1c3c3066..35229d758 100644 --- a/Main/src/main/java/com/chameleonvision/vision/Pipeline.java +++ b/Main/src/main/java/com/chameleonvision/vision/Pipeline.java @@ -8,14 +8,14 @@ public class Pipeline { public int exposure = 50; public int brightness = 50; public Orientation orientation = Orientation.Normal; - public List hue = Arrays.asList(50, 180); - public List saturation = Arrays.asList(50, 255); - public List value = Arrays.asList(50, 255); + public List hue = Arrays.asList(50, 180); + public List saturation = Arrays.asList(50, 255); + public List value = Arrays.asList(50, 255); public boolean erode = false; public boolean dilate = false; - public List area = Arrays.asList(0f, 100f); - public List ratio = Arrays.asList(0f, 20f); - public List extent = Arrays.asList(0, 100); + public List area = Arrays.asList(0.0, 100.0); + public List ratio = Arrays.asList(0.0, 20.0); + public List extent = Arrays.asList(0, 100); public boolean isBinary = false; public SortMode sortMode = SortMode.Largest; public TargetGroup targetGroup = TargetGroup.Single; diff --git a/Main/src/main/java/com/chameleonvision/vision/process/CVProcess.java b/Main/src/main/java/com/chameleonvision/vision/process/CVProcess.java index 7d0f0ce41..01b58c3a9 100644 --- a/Main/src/main/java/com/chameleonvision/vision/process/CVProcess.java +++ b/Main/src/main/java/com/chameleonvision/vision/process/CVProcess.java @@ -54,7 +54,7 @@ public class CVProcess { return foundContours; } - List filterContours(List inputContours, List area, List ratio, List extent) { + List filterContours(List inputContours, List area, List ratio, List extent) { for (MatOfPoint Contour : inputContours) { try { double contourArea = Imgproc.contourArea(Contour); @@ -67,14 +67,14 @@ public class CVProcess { var rect = Imgproc.minAreaRect(new MatOfPoint2f(Contour.toArray())); var targetFullness = contourArea; - double minExtent = (double) (extent.get(0) * rect.size.area()) / 100; - double maxExtent = (double) (extent.get(1) * rect.size.area()) / 100; + double minExtent = (double) (extent.get(0).doubleValue() * rect.size.area()) / 100; + double maxExtent = (double) (extent.get(1).doubleValue() * rect.size.area()) / 100; if (targetFullness <= minExtent || contourArea >= maxExtent) { continue; } Rect bb = Imgproc.boundingRect(Contour); double aspectRatio = (bb.width / bb.height); - if (aspectRatio < ratio.get(0) || aspectRatio > ratio.get(1)) { + if (aspectRatio < ratio.get(0).doubleValue() || aspectRatio > ratio.get(1).doubleValue()) { continue; } filteredContours.add(Contour); diff --git a/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java b/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java index 7a84d74a5..cee414192 100644 --- a/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java +++ b/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java @@ -143,8 +143,8 @@ public class VisionProcess implements Runnable { inputImage.copyTo(outputImage); return pipelineResult; } - Scalar hsvLower = new Scalar(currentPipeline.hue.get(0), currentPipeline.saturation.get(0), currentPipeline.value.get(0)); - Scalar hsvUpper = new Scalar(currentPipeline.hue.get(1), currentPipeline.saturation.get(1), currentPipeline.value.get(1)); + Scalar hsvLower = new Scalar(currentPipeline.hue.get(0).intValue(), currentPipeline.saturation.get(0).intValue(), currentPipeline.value.get(0).intValue()); + Scalar hsvUpper = new Scalar(currentPipeline.hue.get(1).intValue(), currentPipeline.saturation.get(1).intValue(), currentPipeline.value.get(1).intValue()); cvProcess.hsvThreshold(inputImage, hsvThreshMat, hsvLower, hsvUpper, currentPipeline.erode, currentPipeline.dilate); diff --git a/Main/src/main/java/com/chameleonvision/web/ServerHandler.java b/Main/src/main/java/com/chameleonvision/web/ServerHandler.java index a16a09691..cee0d483e 100644 --- a/Main/src/main/java/com/chameleonvision/web/ServerHandler.java +++ b/Main/src/main/java/com/chameleonvision/web/ServerHandler.java @@ -18,6 +18,7 @@ import org.springframework.beans.BeanUtils; import java.io.IOException; import java.lang.reflect.Field; +import java.lang.reflect.ParameterizedType; import java.nio.ByteBuffer; import java.util.*; @@ -71,13 +72,21 @@ public class ServerHandler { case "currentPipeline": { CameraManager.getCurrentCamera().setCurrentPipelineIndex((Integer) entry.getValue()); HashMap tmp = new HashMap<>(); - tmp.put("pipeline",CameraManager.getCurrentCamera().getCurrentPipeline()); + tmp.put("pipeline",getOrdinalPipeline()); //TODO Add cam settings to the map broadcastMessage(tmp); break; } default: { setField(CameraManager.getCurrentCamera().getCurrentPipeline(),entry.getKey(),entry.getValue()); + switch (entry.getKey()){ + case "exposure":{ + CameraManager.getCurrentCamera().setExposure((Integer) entry.getValue()); + } + case "brightness":{ + CameraManager.getCurrentCamera().setBrightness((Integer) entry.getValue()); + } + } break; } } @@ -97,7 +106,8 @@ public class ServerHandler { field.set(obj,value); } } else if(field.getType() == List.class){ - field.set(obj,value); +// if(((ParameterizedType)field.getGenericType()).getActualTypeArguments()[0] == Double.class){ + field.set(obj,value); } } catch (NoSuchFieldException | IllegalAccessException ex) { ex.printStackTrace(); diff --git a/New client/chameleon-client/src/views/Camera.vue b/New client/chameleon-client/src/views/Camera.vue index d3a71dd82..671ee92b1 100644 --- a/New client/chameleon-client/src/views/Camera.vue +++ b/New client/chameleon-client/src/views/Camera.vue @@ -11,7 +11,7 @@ - + @@ -134,6 +134,9 @@ import CVicon from '../components/cv-icon' currentPipelineIndex:{ get(){ return this.$store.state.currentPipelineIndex; + }, + set(value){ + this.$store.commit('currentPipelineIndex',value); } }, cameraList:{