From c6cd86d8dbbe4e68756287bda196f6ae229484c1 Mon Sep 17 00:00:00 2001 From: ori agranat Date: Sun, 20 Oct 2019 10:13:07 +0300 Subject: [PATCH] code cleanup and ui route bugfix --- .../chameleonvision/vision/camera/Camera.java | 329 +++---- .../vision/process/CVProcess.java | 53 +- .../vision/process/CameraProcess.java | 98 +- .../vision/process/PipelineResult.java | 14 +- .../vision/process/VisionProcess.java | 437 +++++---- .../java/com/chameleonvision/web/Server.java | 3 +- .../chameleonvision/web/ServerHandler.java | 111 +-- Main/src/main/resources/web/index.html | 2 +- .../src/main/resources/web/js/app.4845058e.js | 2 - .../main/resources/web/js/app.4845058e.js.map | 1 - .../src/main/resources/web/js/app.62b07d03.js | 2 + .../main/resources/web/js/app.62b07d03.js.map | 1 + ...1b23c0c0.js => chunk-1a7066d8.62f1ea08.js} | 2 +- ....js.map => chunk-1a7066d8.62f1ea08.js.map} | 2 +- ...fbf7ad5e.js => chunk-234aed0c.be70e2b2.js} | 2 +- ....js.map => chunk-234aed0c.be70e2b2.js.map} | 2 +- ...93476238.js => chunk-28383ebf.995507d7.js} | 2 +- ....js.map => chunk-28383ebf.995507d7.js.map} | 2 +- ...bae28379.js => chunk-2d0d3320.6be348e1.js} | 2 +- ....js.map => chunk-2d0d3320.6be348e1.js.map} | 2 +- ...2606c966.js => chunk-38331e86.79b1cbc4.js} | 2 +- ....js.map => chunk-38331e86.79b1cbc4.js.map} | 2 +- ...d5203d49.js => chunk-4b541045.184cf02c.js} | 2 +- ....js.map => chunk-4b541045.184cf02c.js.map} | 2 +- ...c132acbd.js => chunk-6014d13c.5e43ddd0.js} | 2 +- ....js.map => chunk-6014d13c.5e43ddd0.js.map} | 2 +- ...aeb36768.js => chunk-79b72a3d.bdb0c98e.js} | 2 +- ....js.map => chunk-79b72a3d.bdb0c98e.js.map} | 2 +- ...bca05c28.js => chunk-7a810817.774f35d1.js} | 2 +- ....js.map => chunk-7a810817.774f35d1.js.map} | 2 +- ...de18472d.js => chunk-7cf477eb.c81dadc5.js} | 2 +- ....js.map => chunk-7cf477eb.c81dadc5.js.map} | 2 +- Main/target/classes/web/favicon.png | Bin 0 -> 12626 bytes .../classes/web/fonts/ionicons.143146fa.woff2 | Bin 82216 -> 0 bytes .../classes/web/fonts/ionicons.99ac3308.woff | Bin 197740 -> 0 bytes .../classes/web/fonts/ionicons.d535a25a.ttf | Bin 197664 -> 0 bytes .../classes/web/img/ionicons.a2c4a261.svg | 870 ------------------ Main/target/classes/web/index.html | 2 +- chameleon-client/src/router.js | 2 +- 39 files changed, 553 insertions(+), 1414 deletions(-) delete mode 100644 Main/src/main/resources/web/js/app.4845058e.js delete mode 100644 Main/src/main/resources/web/js/app.4845058e.js.map create mode 100644 Main/src/main/resources/web/js/app.62b07d03.js create mode 100644 Main/src/main/resources/web/js/app.62b07d03.js.map rename Main/src/main/resources/web/js/{chunk-1a7066d8.1b23c0c0.js => chunk-1a7066d8.62f1ea08.js} (98%) rename Main/src/main/resources/web/js/{chunk-1a7066d8.1b23c0c0.js.map => chunk-1a7066d8.62f1ea08.js.map} (98%) rename Main/src/main/resources/web/js/{chunk-234aed0c.fbf7ad5e.js => chunk-234aed0c.be70e2b2.js} (99%) rename Main/src/main/resources/web/js/{chunk-234aed0c.fbf7ad5e.js.map => chunk-234aed0c.be70e2b2.js.map} (99%) rename Main/src/main/resources/web/js/{chunk-28383ebf.93476238.js => chunk-28383ebf.995507d7.js} (99%) rename Main/src/main/resources/web/js/{chunk-28383ebf.93476238.js.map => chunk-28383ebf.995507d7.js.map} (99%) rename Main/src/main/resources/web/js/{chunk-2d0d3320.bae28379.js => chunk-2d0d3320.6be348e1.js} (97%) rename Main/src/main/resources/web/js/{chunk-2d0d3320.bae28379.js.map => chunk-2d0d3320.6be348e1.js.map} (98%) rename Main/src/main/resources/web/js/{chunk-38331e86.2606c966.js => chunk-38331e86.79b1cbc4.js} (98%) rename Main/src/main/resources/web/js/{chunk-38331e86.2606c966.js.map => chunk-38331e86.79b1cbc4.js.map} (99%) rename Main/src/main/resources/web/js/{chunk-4b541045.d5203d49.js => chunk-4b541045.184cf02c.js} (99%) rename Main/src/main/resources/web/js/{chunk-4b541045.d5203d49.js.map => chunk-4b541045.184cf02c.js.map} (99%) rename Main/src/main/resources/web/js/{chunk-6014d13c.c132acbd.js => chunk-6014d13c.5e43ddd0.js} (99%) rename Main/src/main/resources/web/js/{chunk-6014d13c.c132acbd.js.map => chunk-6014d13c.5e43ddd0.js.map} (99%) rename Main/src/main/resources/web/js/{chunk-79b72a3d.aeb36768.js => chunk-79b72a3d.bdb0c98e.js} (99%) rename Main/src/main/resources/web/js/{chunk-79b72a3d.aeb36768.js.map => chunk-79b72a3d.bdb0c98e.js.map} (99%) rename Main/src/main/resources/web/js/{chunk-7a810817.bca05c28.js => chunk-7a810817.774f35d1.js} (99%) rename Main/src/main/resources/web/js/{chunk-7a810817.bca05c28.js.map => chunk-7a810817.774f35d1.js.map} (99%) rename Main/src/main/resources/web/js/{chunk-7cf477eb.de18472d.js => chunk-7cf477eb.c81dadc5.js} (99%) rename Main/src/main/resources/web/js/{chunk-7cf477eb.de18472d.js.map => chunk-7cf477eb.c81dadc5.js.map} (99%) delete mode 100644 Main/target/classes/web/fonts/ionicons.143146fa.woff2 delete mode 100644 Main/target/classes/web/fonts/ionicons.99ac3308.woff delete mode 100644 Main/target/classes/web/fonts/ionicons.d535a25a.ttf delete mode 100644 Main/target/classes/web/img/ionicons.a2c4a261.svg diff --git a/Main/src/main/java/com/chameleonvision/vision/camera/Camera.java b/Main/src/main/java/com/chameleonvision/vision/camera/Camera.java index 5b1879c57..717e6e3ba 100644 --- a/Main/src/main/java/com/chameleonvision/vision/camera/Camera.java +++ b/Main/src/main/java/com/chameleonvision/vision/camera/Camera.java @@ -13,197 +13,202 @@ import java.util.stream.IntStream; public class Camera { - private static final double DEFAULT_FOV = 60.8; - private static final StreamDivisor DEFAULT_STREAMDIVISOR = StreamDivisor.none; - private static final int MINIMUM_FPS = 30; - private static final int MINIMUM_WIDTH = 320; - private static final int MINIMUM_HEIGHT = 200; - private static final int MAX_INIT_MS = 1500; + private static final double DEFAULT_FOV = 60.8; + private static final StreamDivisor DEFAULT_STREAMDIVISOR = StreamDivisor.none; + private static final int MINIMUM_FPS = 30; + private static final int MINIMUM_WIDTH = 320; + private static final int MINIMUM_HEIGHT = 200; + private static final int MAX_INIT_MS = 1500; - public final String name; - public final String path; + public final String name; + public final String path; - private final UsbCamera UsbCam; - private final VideoMode[] availableVideoModes; + private final UsbCamera UsbCam; + private final VideoMode[] availableVideoModes; - private final CameraServer cs = CameraServer.getInstance(); - private final CvSink cvSink; - private final Object cvSourceLock = new Object(); - private CvSource cvSource; - private Double FOV; - private StreamDivisor streamDivisor; - private CameraValues camVals; - private CamVideoMode camVideoMode; - private int currentPipelineIndex; - private HashMap pipelines; + private final CameraServer cs = CameraServer.getInstance(); + private final CvSink cvSink; + private final Object cvSourceLock = new Object(); + private CvSource cvSource; + private Double FOV; + private StreamDivisor streamDivisor; + private CameraValues camVals; + private CamVideoMode camVideoMode; + private int currentPipelineIndex; + private HashMap pipelines; - public Camera(String cameraName) { - this(cameraName, DEFAULT_FOV); - } + public Camera(String cameraName) { + this(cameraName, DEFAULT_FOV); + } - public Camera(String cameraName, double fov) { - this(cameraName,CameraManager.AllUsbCameraInfosByName.get(cameraName), fov); - } - public Camera(String cameraName, UsbCameraInfo usbCameraInfo, double fov) { - this(cameraName,usbCameraInfo, fov, DEFAULT_STREAMDIVISOR); - } - public Camera(String cameraName, UsbCameraInfo usbCamInfo, double fov,StreamDivisor divisor) { - this(cameraName ,usbCamInfo, fov, new HashMap<>(), 0, divisor); - } + public Camera(String cameraName, double fov) { + this(cameraName, CameraManager.AllUsbCameraInfosByName.get(cameraName), fov); + } - public Camera(String cameraName, double fov, int videoModeIndex , StreamDivisor divisor) { - this(cameraName, fov, new HashMap<>(), videoModeIndex, divisor); - } + public Camera(String cameraName, UsbCameraInfo usbCameraInfo, double fov) { + this(cameraName, usbCameraInfo, fov, DEFAULT_STREAMDIVISOR); + } - public Camera(String cameraName, double fov, HashMap pipelines, int videoModeIndex , StreamDivisor divisor) { - this(cameraName, CameraManager.AllUsbCameraInfosByName.get(cameraName), fov, pipelines, videoModeIndex, divisor); - } + public Camera(String cameraName, UsbCameraInfo usbCamInfo, double fov, StreamDivisor divisor) { + this(cameraName, usbCamInfo, fov, new HashMap<>(), 0, divisor); + } - public Camera(String cameraName, UsbCameraInfo usbCamInfo, double fov, HashMap pipelines, int videoModeIndex, StreamDivisor divisor) { - FOV = fov; - name = cameraName; - path = usbCamInfo.path; - streamDivisor = divisor; - UsbCam = new UsbCamera(name, path); + public Camera(String cameraName, double fov, int videoModeIndex, StreamDivisor divisor) { + this(cameraName, fov, new HashMap<>(), videoModeIndex, divisor); + } - this.pipelines = pipelines; + public Camera(String cameraName, double fov, HashMap pipelines, int videoModeIndex, StreamDivisor divisor) { + this(cameraName, CameraManager.AllUsbCameraInfosByName.get(cameraName), fov, pipelines, videoModeIndex, divisor); + } - // set up video modes according to minimums - if (Platform.getCurrentPlatform() == Platform.WINDOWS_64 && !UsbCam.isConnected()) { - System.out.print("Waiting on camera... "); - long initTimeout = System.nanoTime(); - while(!UsbCam.isConnected()) - { - if (((System.nanoTime() - initTimeout) / 1e6 ) >= MAX_INIT_MS) { - break; - } - } - var initTimeMs = (System.nanoTime() - initTimeout) / 1e6; - System.out.printf("Camera initialized in %.2fms\n", initTimeMs); - } - var trueVideoModes = UsbCam.enumerateVideoModes(); - availableVideoModes = Arrays.stream(trueVideoModes).filter(v -> v.fps >= MINIMUM_FPS && v.width >= MINIMUM_WIDTH && v.height >= MINIMUM_HEIGHT).toArray(VideoMode[]::new); - if (availableVideoModes.length == 0) { - System.err.println("Camera not supported!"); - throw new RuntimeException(new CameraException(CameraException.CameraExceptionType.BAD_CAMERA)); - } - if (videoModeIndex <= availableVideoModes.length - 1) { - setCamVideoMode(videoModeIndex, false); - } else { - setCamVideoMode(0, false); - } + public Camera(String cameraName, UsbCameraInfo usbCamInfo, double fov, HashMap pipelines, int videoModeIndex, StreamDivisor divisor) { + FOV = fov; + name = cameraName; + path = usbCamInfo.path; + streamDivisor = divisor; + UsbCam = new UsbCamera(name, path); - cvSink = cs.getVideo(UsbCam); - cvSource = cs.putVideo(name, camVals.ImageWidth, camVals.ImageHeight); - } + this.pipelines = pipelines; - VideoMode[] getAvailableVideoModes() { - return availableVideoModes; - } + // set up video modes according to minimums + if (Platform.getCurrentPlatform() == Platform.WINDOWS_64 && !UsbCam.isConnected()) { + System.out.print("Waiting on camera... "); + long initTimeout = System.nanoTime(); + while (!UsbCam.isConnected()) { + if (((System.nanoTime() - initTimeout) / 1e6) >= MAX_INIT_MS) { + break; + } + } + var initTimeMs = (System.nanoTime() - initTimeout) / 1e6; + System.out.printf("Camera initialized in %.2fms\n", initTimeMs); + } + var trueVideoModes = UsbCam.enumerateVideoModes(); + availableVideoModes = Arrays.stream(trueVideoModes).filter(v -> v.fps >= MINIMUM_FPS && v.width >= MINIMUM_WIDTH && v.height >= MINIMUM_HEIGHT).toArray(VideoMode[]::new); + if (availableVideoModes.length == 0) { + System.err.println("Camera not supported!"); + throw new RuntimeException(new CameraException(CameraException.CameraExceptionType.BAD_CAMERA)); + } + if (videoModeIndex <= availableVideoModes.length - 1) { + setCamVideoMode(videoModeIndex, false); + } else { + setCamVideoMode(0, false); + } - public int getStreamPort() { - var s = (MjpegServer) cs.getServer("serve_" + name); - return s.getPort(); - } + cvSink = cs.getVideo(UsbCam); + cvSource = cs.putVideo(name, camVals.ImageWidth, camVals.ImageHeight); + } - public void setCamVideoMode(int videoMode, boolean updateCvSource) { - setCamVideoMode(new CamVideoMode(availableVideoModes[videoMode]), updateCvSource); - } + VideoMode[] getAvailableVideoModes() { + return availableVideoModes; + } - private void setCamVideoMode(CamVideoMode newVideoMode, boolean updateCvSource) { - var prevVideoMode = this.camVideoMode; - this.camVideoMode = newVideoMode; - UsbCam.setVideoMode(newVideoMode.getActualPixelFormat(), newVideoMode.width, newVideoMode.height, newVideoMode.fps); + public int getStreamPort() { + var s = (MjpegServer) cs.getServer("serve_" + name); + return s.getPort(); + } - // update camera values - camVals = new CameraValues(this); - if (prevVideoMode != null && !prevVideoMode.equals(newVideoMode) && updateCvSource) { // if resolution changed - synchronized (cvSourceLock) { - cvSource = cs.putVideo(name, newVideoMode.width, newVideoMode.height); - } - ServerHandler.sendFullSettings(); - } - } + public void setCamVideoMode(int videoMode, boolean updateCvSource) { + setCamVideoMode(new CamVideoMode(availableVideoModes[videoMode]), updateCvSource); + } - public void addPipeline() { - addPipeline(pipelines.size()); - } + private void setCamVideoMode(CamVideoMode newVideoMode, boolean updateCvSource) { + var prevVideoMode = this.camVideoMode; + this.camVideoMode = newVideoMode; + UsbCam.setVideoMode(newVideoMode.getActualPixelFormat(), newVideoMode.width, newVideoMode.height, newVideoMode.fps); - private void addPipeline(int pipelineNumber) { - if (pipelines.containsKey(pipelineNumber)) return; - pipelines.put(pipelineNumber, new Pipeline()); - } - public void deleteCurrentPipeline() { - pipelines.remove(getCurrentPipelineIndex()); - } + // update camera values + camVals = new CameraValues(this); + if (prevVideoMode != null && !prevVideoMode.equals(newVideoMode) && updateCvSource) { // if resolution changed + synchronized (cvSourceLock) { + cvSource = cs.putVideo(name, newVideoMode.width, newVideoMode.height); + } + ServerHandler.sendFullSettings(); + } + } - public Pipeline getCurrentPipeline() { - return pipelines.get(currentPipelineIndex); - } + public void addPipeline() { + addPipeline(pipelines.size()); + } - public int getCurrentPipelineIndex() { - return currentPipelineIndex; - } - public void setCurrentPipelineIndex(int pipelineNumber) { - if (pipelineNumber - 1 > pipelines.size()) return; - currentPipelineIndex = pipelineNumber; - } - public StreamDivisor getStreamDivisor(){ - return streamDivisor; - } - public void setStreamDivisor(int divisor){ - streamDivisor = StreamDivisor.values()[divisor]; - } + private void addPipeline(int pipelineNumber) { + if (pipelines.containsKey(pipelineNumber)) return; + pipelines.put(pipelineNumber, new Pipeline()); + } - public HashMap getPipelines() { - return pipelines; - } + public void deleteCurrentPipeline() { + pipelines.remove(getCurrentPipelineIndex()); + } - public CamVideoMode getVideoMode() { - return camVideoMode; - } + public Pipeline getCurrentPipeline() { + return pipelines.get(currentPipelineIndex); + } - public int getVideoModeIndex() { - return IntStream.range(0, availableVideoModes.length) - .filter(i -> camVideoMode.equals(availableVideoModes[i])) - .findFirst() - .orElse(-1); - } + public int getCurrentPipelineIndex() { + return currentPipelineIndex; + } - public double getFOV() { - return FOV; - } + public void setCurrentPipelineIndex(int pipelineNumber) { + if (pipelineNumber - 1 > pipelines.size()) return; + currentPipelineIndex = pipelineNumber; + } - public void setFOV(Number fov) { - FOV = fov.doubleValue(); - camVals = new CameraValues(this); - } + public StreamDivisor getStreamDivisor() { + return streamDivisor; + } - public int getBrightness() { - return getCurrentPipeline().brightness; - } + public void setStreamDivisor(int divisor) { + streamDivisor = StreamDivisor.values()[divisor]; + } - public void setBrightness(int brightness) { - getCurrentPipeline().brightness = brightness; - UsbCam.setBrightness(brightness); - } + public HashMap getPipelines() { + return pipelines; + } - public void setExposure(int exposure) { - getCurrentPipeline().exposure = exposure; - UsbCam.setExposureManual(exposure); - } + public CamVideoMode getVideoMode() { + return camVideoMode; + } - public long grabFrame(Mat image) { - return cvSink.grabFrame(image); - } + public int getVideoModeIndex() { + return IntStream.range(0, availableVideoModes.length) + .filter(i -> camVideoMode.equals(availableVideoModes[i])) + .findFirst() + .orElse(-1); + } - public CameraValues getCamVals() { - return camVals; - } + public double getFOV() { + return FOV; + } - public void putFrame(Mat image) { - synchronized (cvSourceLock) { - cvSource.putFrame(image); - } - } + public void setFOV(Number fov) { + FOV = fov.doubleValue(); + camVals = new CameraValues(this); + } + + public int getBrightness() { + return getCurrentPipeline().brightness; + } + + public void setBrightness(int brightness) { + getCurrentPipeline().brightness = brightness; + UsbCam.setBrightness(brightness); + } + + public void setExposure(int exposure) { + getCurrentPipeline().exposure = exposure; + UsbCam.setExposureManual(exposure); + } + + public long grabFrame(Mat image) { + return cvSink.grabFrame(image); + } + + public CameraValues getCamVals() { + return camVals; + } + + public void putFrame(Mat image) { + synchronized (cvSourceLock) { + cvSource.putFrame(image); + } + } } 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 5f1bf01cf..ca8f55fe3 100644 --- a/Main/src/main/java/com/chameleonvision/vision/process/CVProcess.java +++ b/Main/src/main/java/com/chameleonvision/vision/process/CVProcess.java @@ -18,7 +18,7 @@ public class CVProcess { private final CameraValues cameraValues; private Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(5, 5)); - private Size blur = new Size(2,2); + private Size blur = new Size(2, 2); private Mat hsvImage = new Mat(); private List foundContours = new ArrayList<>(); private Mat binaryMat = new Mat(); @@ -58,7 +58,7 @@ public class CVProcess { for (MatOfPoint Contour : inputContours) { try { double contourArea = Imgproc.contourArea(Contour); - double AreaRatio = (contourArea / cameraValues.ImageArea)*100; + double AreaRatio = (contourArea / cameraValues.ImageArea) * 100; double minArea = (MathHandler.sigmoid(area.get(0))); double maxArea = (MathHandler.sigmoid(area.get(1))); if (AreaRatio < minArea || AreaRatio > maxArea) { @@ -89,10 +89,12 @@ public class CVProcess { private double calcDistance(RotatedRect rect) { return FastMath.sqrt(FastMath.pow(cameraValues.CenterX - rect.center.x, 2) + FastMath.pow(cameraValues.CenterY - rect.center.y, 2)); } - private double calcMomentsX(MatOfPoint c){ + + private double calcMomentsX(MatOfPoint c) { Moments m = Imgproc.moments(c); - return (m.get_m10()/m.get_m00()); + return (m.get_m10() / m.get_m00()); } + RotatedRect sortTargetsToOne(List inputRects, SortMode sortMode) { switch (sortMode) { case Largest: @@ -116,37 +118,34 @@ public class CVProcess { List groupTargets(List inputContours, TargetIntersection intersectionPoint, TargetGroup targetGroup) { finalCountours.clear(); - if (!targetGroup.equals(TargetGroup.Single)) { + if (targetGroup.equals(TargetGroup.Dual)) { inputContours.sort(sortByMomentsX); for (var i = 0; i < inputContours.size(); i++) { List FinalContourList = new ArrayList<>(inputContours.get(i).toList()); - for (var c = 0; c < targetGroup.ordinal(); c++) { - try { - MatOfPoint firstContour = inputContours.get(i + c); - MatOfPoint secondContour = inputContours.get(i + c + 1); - if (isIntersecting(firstContour, secondContour, intersectionPoint)) { - FinalContourList.addAll(secondContour.toList()); - } - else{ - FinalContourList.clear(); - break; - } - firstContour.release(); - secondContour.release(); - MatOfPoint2f contour = new MatOfPoint2f(); - contour.fromList(FinalContourList); - if (contour.cols() != 0 && contour.rows() != 0) { - RotatedRect rect = Imgproc.minAreaRect(contour); - finalCountours.add(rect); - } - } catch (IndexOutOfBoundsException e) { + try { + MatOfPoint firstContour = inputContours.get(i); + MatOfPoint secondContour = inputContours.get(i + 1); + if (isIntersecting(firstContour, secondContour, intersectionPoint)) { + FinalContourList.addAll(secondContour.toList()); + } else { FinalContourList.clear(); break; } + firstContour.release(); + secondContour.release(); + MatOfPoint2f contour = new MatOfPoint2f(); + contour.fromList(FinalContourList); + if (contour.cols() != 0 && contour.rows() != 0) { + RotatedRect rect = Imgproc.minAreaRect(contour); + finalCountours.add(rect); + } + } catch (IndexOutOfBoundsException e) { + FinalContourList.clear(); + break; } } - } else { + } else if (targetGroup.equals(TargetGroup.Single)) { for (MatOfPoint inputContour : inputContours) { MatOfPoint2f contour = new MatOfPoint2f(); contour.fromArray(inputContour.toArray()); @@ -174,7 +173,7 @@ public class CVProcess { double y0A = a.center.y; double x0B = b.center.x; double y0B = b.center.y; - double intersectionX = ((mA * x0A) - y0A - (mB * x0B) + y0B )/ (mA - mB); + double intersectionX = ((mA * x0A) - y0A - (mB * x0B) + y0B) / (mA - mB); double intersectionY = (mA * (intersectionX - x0A)) + y0A; double massX = (x0A + x0B) / 2; double massY = (y0A + y0B) / 2; diff --git a/Main/src/main/java/com/chameleonvision/vision/process/CameraProcess.java b/Main/src/main/java/com/chameleonvision/vision/process/CameraProcess.java index 7885dec91..ae88d5ab7 100644 --- a/Main/src/main/java/com/chameleonvision/vision/process/CameraProcess.java +++ b/Main/src/main/java/com/chameleonvision/vision/process/CameraProcess.java @@ -6,60 +6,60 @@ import org.opencv.core.Mat; public class CameraProcess implements Runnable { - private final Camera camera; - private final int maxFPS; - private final Object inputFrameLock = new Object(); - private final Object outputFrameLock = new Object(); - private Mat inputFrame; - private Mat outputFrame; - private long timestamp; + private final Camera camera; + private final int maxFPS; + private final Object inputFrameLock = new Object(); + private final Object outputFrameLock = new Object(); + private Mat inputFrame; + private Mat outputFrame; + private long timestamp; - CameraProcess(Camera camera) { - this.camera = camera; - maxFPS = camera.getVideoMode().fps; + CameraProcess(Camera camera) { + this.camera = camera; + maxFPS = camera.getVideoMode().fps; var camVals = camera.getCamVals(); inputFrame = new Mat(camVals.ImageWidth, camVals.ImageHeight, CvType.CV_8UC3); outputFrame = new Mat(camVals.ImageWidth, camVals.ImageHeight, CvType.CV_8UC3); - } + } - private void updateFrameSize() { - var camVals = camera.getCamVals(); - synchronized (inputFrameLock) { - inputFrame = new Mat(camVals.ImageWidth, camVals.ImageHeight, CvType.CV_8UC3); - } - synchronized (outputFrameLock) { - outputFrame = new Mat(camVals.ImageWidth, camVals.ImageHeight, CvType.CV_8UC3); - } - } + private void updateFrameSize() { + var camVals = camera.getCamVals(); + synchronized (inputFrameLock) { + inputFrame = new Mat(camVals.ImageWidth, camVals.ImageHeight, CvType.CV_8UC3); + } + synchronized (outputFrameLock) { + outputFrame = new Mat(camVals.ImageWidth, camVals.ImageHeight, CvType.CV_8UC3); + } + } - void updateFrame(Mat inputFrame) { + void updateFrame(Mat inputFrame) { + synchronized (inputFrameLock) { + inputFrame.copyTo(this.inputFrame); + } + } + + long getLatestFrame(Mat outputFrame) { + synchronized (outputFrameLock) { + this.outputFrame.copyTo(outputFrame); + return timestamp; + } + } + + @Override + public void run() { + while (!Thread.interrupted()) { + synchronized (outputFrameLock) { + timestamp = camera.grabFrame(outputFrame); + } synchronized (inputFrameLock) { - inputFrame.copyTo(this.inputFrame); - } - } - - long getLatestFrame(Mat outputFrame) { - synchronized (outputFrameLock) { - this.outputFrame.copyTo(outputFrame); - return timestamp; - } - } - - @Override - public void run() { - while (!Thread.interrupted()) { - synchronized (outputFrameLock) { - timestamp = camera.grabFrame(outputFrame); - } - synchronized (inputFrameLock) { - camera.putFrame(inputFrame); - } - var msToWait = (long) 1000 / maxFPS; - try { - Thread.sleep(msToWait); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - } + camera.putFrame(inputFrame); + } + var msToWait = (long) 1000 / maxFPS; + try { + Thread.sleep(msToWait); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } } diff --git a/Main/src/main/java/com/chameleonvision/vision/process/PipelineResult.java b/Main/src/main/java/com/chameleonvision/vision/process/PipelineResult.java index fb96c13b2..bbb2dda82 100644 --- a/Main/src/main/java/com/chameleonvision/vision/process/PipelineResult.java +++ b/Main/src/main/java/com/chameleonvision/vision/process/PipelineResult.java @@ -3,11 +3,11 @@ package com.chameleonvision.vision.process; import org.opencv.core.RotatedRect; public class PipelineResult { - public boolean IsValid = false; - public double CalibratedX = 0.0; - public double CalibratedY = 0.0; - public double Pitch = 0.0; - public double Yaw = 0.0; - public double Area = 0.0; - RotatedRect RawPoint; + public boolean IsValid = false; + public double CalibratedX = 0.0; + public double CalibratedY = 0.0; + public double Pitch = 0.0; + public double Yaw = 0.0; + public double Area = 0.0; + RotatedRect RawPoint; } 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 5be9c4eaa..33f6ead2b 100644 --- a/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java +++ b/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java @@ -16,248 +16,247 @@ import java.util.List; public class VisionProcess implements Runnable { - private final Camera camera; - private final String cameraName; - private final CameraProcess cameraProcess; - // NetworkTables - public NetworkTableEntry ntPipelineEntry; - public NetworkTableEntry ntDriverModeEntry; - private NetworkTableEntry ntYawEntry; - private NetworkTableEntry ntPitchEntry; - private NetworkTableEntry ntDistanceEntry; - private NetworkTableEntry ntTimeStampEntry; - private NetworkTableEntry ntValidEntry; - // chameleon specific - private Pipeline currentPipeline; - private CVProcess cvProcess; - // pipeline process items - private List foundContours = new ArrayList<>(); - private List filteredContours = new ArrayList<>(); - private List groupedContours = new ArrayList<>(); - private Mat cameraInputMat = new Mat(); - private Mat hsvThreshMat = new Mat(); - private Mat streamOutputMat = new Mat(); - private Scalar contourRectColor = new Scalar(255, 0, 0); - private Scalar BoxRectColor = new Scalar(0, 0, 233); - private long timeStamp = 0; + private final Camera camera; + private final String cameraName; + private final CameraProcess cameraProcess; + // NetworkTables + public NetworkTableEntry ntPipelineEntry; + public NetworkTableEntry ntDriverModeEntry; + private NetworkTableEntry ntYawEntry; + private NetworkTableEntry ntPitchEntry; + private NetworkTableEntry ntDistanceEntry; + private NetworkTableEntry ntTimeStampEntry; + private NetworkTableEntry ntValidEntry; + // chameleon specific + private Pipeline currentPipeline; + private CVProcess cvProcess; + // pipeline process items + private List foundContours = new ArrayList<>(); + private List filteredContours = new ArrayList<>(); + private List groupedContours = new ArrayList<>(); + private Mat cameraInputMat = new Mat(); + private Mat hsvThreshMat = new Mat(); + private Mat streamOutputMat = new Mat(); + private Scalar contourRectColor = new Scalar(255, 0, 0); + private Scalar BoxRectColor = new Scalar(0, 0, 233); + private long timeStamp = 0; - public VisionProcess(Camera processCam) { - camera = processCam; - this.cameraName = camera.name; + public VisionProcess(Camera processCam) { + camera = processCam; + this.cameraName = camera.name; - // NetworkTables - NetworkTable ntTable = NetworkTableInstance.getDefault().getTable("/chameleon-vision/" + cameraName); - ntPipelineEntry = ntTable.getEntry("pipeline"); - ntDriverModeEntry = ntTable.getEntry("driver_mode"); - ntPitchEntry = ntTable.getEntry("pitch"); - ntYawEntry = ntTable.getEntry("yaw"); - ntDistanceEntry = ntTable.getEntry("distance"); - ntTimeStampEntry = ntTable.getEntry("timestamp"); - ntValidEntry = ntTable.getEntry("is_valid"); - ntDriverModeEntry.addListener(this::driverModeListener, EntryListenerFlags.kUpdate); - ntPipelineEntry.addListener(this::pipelineListener, EntryListenerFlags.kUpdate); - ntDriverModeEntry.setBoolean(false); - ntPipelineEntry.setNumber(camera.getCurrentPipelineIndex()); + // NetworkTables + NetworkTable ntTable = NetworkTableInstance.getDefault().getTable("/chameleon-vision/" + cameraName); + ntPipelineEntry = ntTable.getEntry("pipeline"); + ntDriverModeEntry = ntTable.getEntry("driver_mode"); + ntPitchEntry = ntTable.getEntry("pitch"); + ntYawEntry = ntTable.getEntry("yaw"); + ntDistanceEntry = ntTable.getEntry("distance"); + ntTimeStampEntry = ntTable.getEntry("timestamp"); + ntValidEntry = ntTable.getEntry("is_valid"); + ntDriverModeEntry.addListener(this::driverModeListener, EntryListenerFlags.kUpdate); + ntPipelineEntry.addListener(this::pipelineListener, EntryListenerFlags.kUpdate); + ntDriverModeEntry.setBoolean(false); + ntPipelineEntry.setNumber(camera.getCurrentPipelineIndex()); - // camera settings - cvProcess = new CVProcess(camera.getCamVals()); - cameraProcess = new CameraProcess(camera); - } + // camera settings + cvProcess = new CVProcess(camera.getCamVals()); + cameraProcess = new CameraProcess(camera); + } - private void driverModeListener(EntryNotification entryNotification) { - if (entryNotification.value.getBoolean()) { - camera.setExposure(25); - camera.setBrightness(15); - } else { - Pipeline pipeline = camera.getCurrentPipeline(); - camera.setExposure(pipeline.exposure); - camera.setBrightness(pipeline.brightness); - } - } + private void driverModeListener(EntryNotification entryNotification) { + if (entryNotification.value.getBoolean()) { + camera.setExposure(25); + camera.setBrightness(15); + } else { + Pipeline pipeline = camera.getCurrentPipeline(); + camera.setExposure(pipeline.exposure); + camera.setBrightness(pipeline.brightness); + } + } - private void pipelineListener(EntryNotification entryNotification) { - var ntPipelineIndex = (int) entryNotification.value.getDouble(); - if (camera.getPipelines().containsKey(ntPipelineIndex)) { + private void pipelineListener(EntryNotification entryNotification) { + var ntPipelineIndex = (int) entryNotification.value.getDouble(); + if (camera.getPipelines().containsKey(ntPipelineIndex)) { // camera.setEntryNotification.value.getString()); - var pipeline = camera.getCurrentPipeline(); - camera.setCurrentPipelineIndex(ntPipelineIndex); - try{ - camera.setExposure(pipeline.exposure); - } - catch (VideoException e){ - System.err.println(e.toString()); - } - camera.setBrightness(pipeline.brightness); - if (SettingsManager.GeneralSettings.currentCamera.equals(cameraName)){ - SettingsManager.GeneralSettings.currentPipeline = ntPipelineIndex; - HashMap pipeChange = new HashMap<>(); - pipeChange.put("currentPipeline", ntPipelineIndex); - ServerHandler.broadcastMessage(pipeChange); - ServerHandler.sendFullSettings(); + var pipeline = camera.getCurrentPipeline(); + camera.setCurrentPipelineIndex(ntPipelineIndex); + try { + camera.setExposure(pipeline.exposure); + } catch (VideoException e) { + System.err.println(e.toString()); + } + camera.setBrightness(pipeline.brightness); + if (SettingsManager.GeneralSettings.currentCamera.equals(cameraName)) { + SettingsManager.GeneralSettings.currentPipeline = ntPipelineIndex; + HashMap pipeChange = new HashMap<>(); + pipeChange.put("currentPipeline", ntPipelineIndex); + ServerHandler.broadcastMessage(pipeChange); + ServerHandler.sendFullSettings(); - } - } else { - ntPipelineEntry.setNumber(camera.getCurrentPipelineIndex()); - } - } + } + } else { + ntPipelineEntry.setNumber(camera.getCurrentPipelineIndex()); + } + } - private void drawContour(Mat inputMat, RotatedRect contourRect) { - if (contourRect == null) return; - List drawnContour = new ArrayList<>(); - Point[] vertices = new Point[4]; - contourRect.points(vertices); - MatOfPoint contour = new MatOfPoint(vertices); - drawnContour.add(contour); - Rect box = Imgproc.boundingRect(contour); - Imgproc.drawContours(inputMat, drawnContour, 0, contourRectColor, 3); - Imgproc.circle(inputMat, contourRect.center, 3, contourRectColor); - Imgproc.rectangle(inputMat,new Point(box.x, box.y), new Point((box.x + box.width),(box.y + box.height)), BoxRectColor,2); - } + private void drawContour(Mat inputMat, RotatedRect contourRect) { + if (contourRect == null) return; + List drawnContour = new ArrayList<>(); + Point[] vertices = new Point[4]; + contourRect.points(vertices); + MatOfPoint contour = new MatOfPoint(vertices); + drawnContour.add(contour); + Rect box = Imgproc.boundingRect(contour); + Imgproc.drawContours(inputMat, drawnContour, 0, contourRectColor, 3); + Imgproc.circle(inputMat, contourRect.center, 3, contourRectColor); + Imgproc.rectangle(inputMat, new Point(box.x, box.y), new Point((box.x + box.width), (box.y + box.height)), BoxRectColor, 2); + } - private void updateNetworkTables(PipelineResult pipelineResult) { - if (pipelineResult.IsValid) { - ntValidEntry.setBoolean(true); - ntYawEntry.setNumber(pipelineResult.Yaw); - ntPitchEntry.setNumber(pipelineResult.Pitch); - ntDistanceEntry.setNumber(pipelineResult.Area); - ntTimeStampEntry.setNumber(timeStamp); - NetworkTableInstance.getDefault().flush(); - } else { - ntYawEntry.setNumber(0.0); - ntPitchEntry.setNumber(0.0); - ntDistanceEntry.setNumber(0.0); - ntTimeStampEntry.setNumber(timeStamp); - ntValidEntry.setBoolean(false); - } - } + private void updateNetworkTables(PipelineResult pipelineResult) { + if (pipelineResult.IsValid) { + ntValidEntry.setBoolean(true); + ntYawEntry.setNumber(pipelineResult.Yaw); + ntPitchEntry.setNumber(pipelineResult.Pitch); + ntDistanceEntry.setNumber(pipelineResult.Area); + ntTimeStampEntry.setNumber(timeStamp); + NetworkTableInstance.getDefault().flush(); + } else { + ntYawEntry.setNumber(0.0); + ntPitchEntry.setNumber(0.0); + ntDistanceEntry.setNumber(0.0); + ntTimeStampEntry.setNumber(timeStamp); + ntValidEntry.setBoolean(false); + } + } - private PipelineResult runVisionProcess(Mat inputImage, Mat outputImage) { - var pipelineResult = new PipelineResult(); + private PipelineResult runVisionProcess(Mat inputImage, Mat outputImage) { + var pipelineResult = new PipelineResult(); - if (currentPipeline == null) { - return pipelineResult; - } - if (currentPipeline.orientation.equals(Orientation.Inverted)) { - Core.flip(inputImage, inputImage, -1); - } - if (ntDriverModeEntry.getBoolean(false)) { - inputImage.copyTo(outputImage); - return pipelineResult; - } - 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()); + if (currentPipeline == null) { + return pipelineResult; + } + if (currentPipeline.orientation.equals(Orientation.Inverted)) { + Core.flip(inputImage, inputImage, -1); + } + if (ntDriverModeEntry.getBoolean(false)) { + inputImage.copyTo(outputImage); + return pipelineResult; + } + 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); + cvProcess.hsvThreshold(inputImage, hsvThreshMat, hsvLower, hsvUpper, currentPipeline.erode, currentPipeline.dilate); - if (currentPipeline.isBinary == true) { - Imgproc.cvtColor(hsvThreshMat, outputImage, Imgproc.COLOR_GRAY2BGR, 3); - } else { - inputImage.copyTo(outputImage); - } - foundContours = cvProcess.findContours(hsvThreshMat); - if (foundContours.size() > 0) { - filteredContours = cvProcess.filterContours(foundContours, currentPipeline.area, currentPipeline.ratio, currentPipeline.extent); - if (filteredContours.size() > 0) { - groupedContours = cvProcess.groupTargets(filteredContours, currentPipeline.targetIntersection, currentPipeline.targetGroup); - if (groupedContours.size() > 0) { - var finalRect = cvProcess.sortTargetsToOne(groupedContours, currentPipeline.sortMode); + if (currentPipeline.isBinary == true) { + Imgproc.cvtColor(hsvThreshMat, outputImage, Imgproc.COLOR_GRAY2BGR, 3); + } else { + inputImage.copyTo(outputImage); + } + foundContours = cvProcess.findContours(hsvThreshMat); + if (foundContours.size() > 0) { + filteredContours = cvProcess.filterContours(foundContours, currentPipeline.area, currentPipeline.ratio, currentPipeline.extent); + if (filteredContours.size() > 0) { + groupedContours = cvProcess.groupTargets(filteredContours, currentPipeline.targetIntersection, currentPipeline.targetGroup); + if (groupedContours.size() > 0) { + var finalRect = cvProcess.sortTargetsToOne(groupedContours, currentPipeline.sortMode); // System.out.printf("Largest Contour Area: %.2f\n", finalRect.size.area()); - pipelineResult.RawPoint = finalRect; - pipelineResult.IsValid = true; - if (!currentPipeline.isCalibrated) { - pipelineResult.CalibratedX = camera.getCamVals().CenterX; - pipelineResult.CalibratedY = camera.getCamVals().CenterY; - } else { - pipelineResult.CalibratedX = (finalRect.center.y - currentPipeline.b) / currentPipeline.m; - pipelineResult.CalibratedY = (finalRect.center.x * currentPipeline.m) + currentPipeline.b; - } - pipelineResult.Pitch = camera.getCamVals().CalculatePitch(finalRect.center.y, pipelineResult.CalibratedY); - pipelineResult.Yaw = camera.getCamVals().CalculateYaw(finalRect.center.x, pipelineResult.CalibratedX); - pipelineResult.Area = finalRect.size.area(); - drawContour(outputImage, finalRect); - } - } - } + pipelineResult.RawPoint = finalRect; + pipelineResult.IsValid = true; + if (!currentPipeline.isCalibrated) { + pipelineResult.CalibratedX = camera.getCamVals().CenterX; + pipelineResult.CalibratedY = camera.getCamVals().CenterY; + } else { + pipelineResult.CalibratedX = (finalRect.center.y - currentPipeline.b) / currentPipeline.m; + pipelineResult.CalibratedY = (finalRect.center.x * currentPipeline.m) + currentPipeline.b; + } + pipelineResult.Pitch = camera.getCamVals().CalculatePitch(finalRect.center.y, pipelineResult.CalibratedY); + pipelineResult.Yaw = camera.getCamVals().CalculateYaw(finalRect.center.x, pipelineResult.CalibratedX); + pipelineResult.Area = finalRect.size.area(); + drawContour(outputImage, finalRect); + } + } + } - return pipelineResult; - } + return pipelineResult; + } - @Override - public void run() { - // processing time tracking - long startTime; - long fpsLastTime = 0; - double processTimeMs; - double fps = 0; - double uiFps = 0; - int maxFps = camera.getVideoMode().fps; + @Override + public void run() { + // processing time tracking + long startTime; + long fpsLastTime = 0; + double processTimeMs; + double fps = 0; + double uiFps = 0; + int maxFps = camera.getVideoMode().fps; - new Thread(cameraProcess).start(); + new Thread(cameraProcess).start(); - long lastFrameEndNanosec = 0; + long lastFrameEndNanosec = 0; - while (!Thread.interrupted()) { - startTime = System.nanoTime(); - if ((startTime - lastFrameEndNanosec) * 1e-6 >= 1000.0 / maxFps + 3) { // 3 additional fps to allow for overhead - foundContours.clear(); - filteredContours.clear(); - groupedContours.clear(); + while (!Thread.interrupted()) { + startTime = System.nanoTime(); + if ((startTime - lastFrameEndNanosec) * 1e-6 >= 1000.0 / maxFps + 3) { // 3 additional fps to allow for overhead + foundContours.clear(); + filteredContours.clear(); + groupedContours.clear(); - // update FPS for ui only every 0.5 seconds - if ((startTime - fpsLastTime) * 1e-6 >= 500) { - if (fps >= maxFps) { - uiFps = maxFps; - } else { - uiFps = fps; - } - fpsLastTime = System.nanoTime(); - } + // update FPS for ui only every 0.5 seconds + if ((startTime - fpsLastTime) * 1e-6 >= 500) { + if (fps >= maxFps) { + uiFps = maxFps; + } else { + uiFps = fps; + } + fpsLastTime = System.nanoTime(); + } - currentPipeline = camera.getCurrentPipeline(); - // start fps counter right before grabbing input frame - timeStamp = cameraProcess.getLatestFrame(cameraInputMat); - if (cameraInputMat.cols() == 0 && cameraInputMat.rows() == 0) { - continue; - } + currentPipeline = camera.getCurrentPipeline(); + // start fps counter right before grabbing input frame + timeStamp = cameraProcess.getLatestFrame(cameraInputMat); + if (cameraInputMat.cols() == 0 && cameraInputMat.rows() == 0) { + continue; + } - // get vision data - var pipelineResult = runVisionProcess(cameraInputMat, streamOutputMat); - updateNetworkTables(pipelineResult); - if (cameraName.equals(SettingsManager.GeneralSettings.currentCamera)) { - HashMap WebSend = new HashMap<>(); - HashMap point = new HashMap<>(); - HashMap calculated = new HashMap<>(); - List center = new ArrayList<>(); - if (pipelineResult.IsValid) { - center.add(pipelineResult.RawPoint.center.x); - center.add(pipelineResult.RawPoint.center.y); - calculated.put("pitch", pipelineResult.Pitch); - calculated.put("yaw", pipelineResult.Yaw); - } else { - center.add(0.0); - center.add(0.0); - calculated.put("pitch", 0); - calculated.put("yaw", 0); - } - point.put("fps", uiFps); - point.put("calculated",calculated); - point.put("rawPoint",center); - WebSend.put("point", point); - ServerHandler.broadcastMessage(WebSend); - } + // get vision data + var pipelineResult = runVisionProcess(cameraInputMat, streamOutputMat); + updateNetworkTables(pipelineResult); + if (cameraName.equals(SettingsManager.GeneralSettings.currentCamera)) { + HashMap WebSend = new HashMap<>(); + HashMap point = new HashMap<>(); + HashMap calculated = new HashMap<>(); + List center = new ArrayList<>(); + if (pipelineResult.IsValid) { + center.add(pipelineResult.RawPoint.center.x); + center.add(pipelineResult.RawPoint.center.y); + calculated.put("pitch", pipelineResult.Pitch); + calculated.put("yaw", pipelineResult.Yaw); + } else { + center.add(0.0); + center.add(0.0); + calculated.put("pitch", 0); + calculated.put("yaw", 0); + } + point.put("fps", uiFps); + point.put("calculated", calculated); + point.put("rawPoint", center); + WebSend.put("point", point); + ServerHandler.broadcastMessage(WebSend); + } - cameraProcess.updateFrame(streamOutputMat); + cameraProcess.updateFrame(streamOutputMat); - cameraInputMat.release(); - hsvThreshMat.release(); + cameraInputMat.release(); + hsvThreshMat.release(); - // calculate FPS - lastFrameEndNanosec = System.nanoTime(); - processTimeMs = (lastFrameEndNanosec - startTime) * 1e-6; - fps = 1000 / processTimeMs; - //please dont enable if you are not debugging - // System.out.printf("%s - Process time: %-5.2fms, FPS: %-5.2f, FoundContours: %d, FilteredContours: %d, GroupedContours: %d\n", cameraName, processTimeMs, fps, FoundContours.size(), FilteredContours.size(), GroupedContours.size()); - } - } - } + // calculate FPS + lastFrameEndNanosec = System.nanoTime(); + processTimeMs = (lastFrameEndNanosec - startTime) * 1e-6; + fps = 1000 / processTimeMs; + //please dont enable if you are not debugging + // System.out.printf("%s - Process time: %-5.2fms, FPS: %-5.2f, FoundContours: %d, FilteredContours: %d, GroupedContours: %d\n", cameraName, processTimeMs, fps, FoundContours.size(), FilteredContours.size(), GroupedContours.size()); + } + } + } } diff --git a/Main/src/main/java/com/chameleonvision/web/Server.java b/Main/src/main/java/com/chameleonvision/web/Server.java index a3ee30ce4..aab69bf47 100644 --- a/Main/src/main/java/com/chameleonvision/web/Server.java +++ b/Main/src/main/java/com/chameleonvision/web/Server.java @@ -25,7 +25,8 @@ public class Server { ws.onBinaryMessage(ctx -> { handler.onBinaryMessage(ctx); }); - app.start(port); }); + + app.start(port); } } \ No newline at end of file diff --git a/Main/src/main/java/com/chameleonvision/web/ServerHandler.java b/Main/src/main/java/com/chameleonvision/web/ServerHandler.java index 01c60ae11..f2d1e0e17 100644 --- a/Main/src/main/java/com/chameleonvision/web/ServerHandler.java +++ b/Main/src/main/java/com/chameleonvision/web/ServerHandler.java @@ -43,41 +43,42 @@ public class ServerHandler { } void onBinaryMessage(WsBinaryMessageContext context) throws Exception { - Map deserialized = objectMapper.readValue(ArrayUtils.toPrimitive(context.data()), new TypeReference>(){}); - for (Map.Entry entry: deserialized.entrySet()) { + Map deserialized = objectMapper.readValue(ArrayUtils.toPrimitive(context.data()), new TypeReference>() { + }); + for (Map.Entry entry : deserialized.entrySet()) { try { switch (entry.getKey()) { case "generalSettings": { - for (HashMap.Entry e : ((HashMap)entry.getValue()).entrySet()){ - setField(SettingsManager.GeneralSettings,e.getKey(),e.getValue()); + for (HashMap.Entry e : ((HashMap) entry.getValue()).entrySet()) { + setField(SettingsManager.GeneralSettings, e.getKey(), e.getValue()); } break; } case "cameraSettings": { - HashMap camSettings = (HashMap)entry.getValue(); - CameraManager.getCurrentCamera().setFOV((Number)camSettings.get("fov")); + HashMap camSettings = (HashMap) entry.getValue(); + CameraManager.getCurrentCamera().setFOV((Number) camSettings.get("fov")); CameraManager.getCurrentCamera().setStreamDivisor((Integer) camSettings.get("streamDivisor")); - CameraManager.getCurrentCamera().setCamVideoMode((Integer) camSettings.get("resolution"),true); + CameraManager.getCurrentCamera().setCamVideoMode((Integer) camSettings.get("resolution"), true); break; } - case "changeCameraName":{ + case "changeCameraName": { // needs to be implemented } - case "changePipelineName":{ + case "changePipelineName": { // needs to be implemented } - case "duplicatePipeline":{ + case "duplicatePipeline": { // needs to be implemented } case "command": { - switch ((String) entry.getValue()){ + switch ((String) entry.getValue()) { case "addNewPipeline": CameraManager.getCurrentCamera().addPipeline(); break; case "deleteCurrentPipeline": var cam = CameraManager.getCurrentCamera(); CameraManager.getCurrentCamera().deleteCurrentPipeline(); - CameraManager.getCurrentCamera().setCurrentPipelineIndex(cam.getCurrentPipelineIndex() -1); + CameraManager.getCurrentCamera().setCurrentPipelineIndex(cam.getCurrentPipelineIndex() - 1); sendFullSettings(); break; } @@ -86,31 +87,31 @@ public class ServerHandler { } case "currentCamera": { CameraManager.setCurrentCamera((String) entry.getValue()); - HashMap tmp = new HashMap<>(); - tmp.put("pipeline",CameraManager.getCurrentCamera().getCurrentPipeline()); + HashMap tmp = new HashMap<>(); + tmp.put("pipeline", CameraManager.getCurrentCamera().getCurrentPipeline()); tmp.put("port", CameraManager.getCurrentCamera().getStreamPort()); - tmp.put("resolutionList",CameraManager.getResolutionList()); + tmp.put("resolutionList", CameraManager.getResolutionList()); broadcastMessage(tmp); break; } case "currentPipeline": { CameraManager.getCurrentCamera().setCurrentPipelineIndex((Integer) entry.getValue()); - HashMap tmp = new HashMap<>(); - tmp.put("pipeline",getOrdinalPipeline()); + HashMap tmp = new HashMap<>(); + tmp.put("pipeline", getOrdinalPipeline()); broadcastMessage(tmp); break; } default: { - setField(CameraManager.getCurrentCamera().getCurrentPipeline(),entry.getKey(),entry.getValue()); - switch (entry.getKey()){ - case "exposure":{ - try{ + setField(CameraManager.getCurrentCamera().getCurrentPipeline(), entry.getKey(), entry.getValue()); + switch (entry.getKey()) { + case "exposure": { + try { CameraManager.getCurrentCamera().setExposure((Integer) entry.getValue()); - } catch (Exception e){ + } catch (Exception e) { System.err.println("Camera Does not support exposure change"); } } - case "brightness":{ + case "brightness": { CameraManager.getCurrentCamera().setBrightness((Integer) entry.getValue()); } } @@ -120,21 +121,22 @@ public class ServerHandler { } catch (Exception e) { System.err.println(e.getMessage()); } - broadcastMessage(deserialized,context); + broadcastMessage(deserialized, context); } } + private void setField(Object obj, String fieldName, Object value) { try { Field field = obj.getClass().getField(fieldName); - if (BeanUtils.isSimpleValueType(field.getType())){ - if (field.getType().isEnum()){ - field.set(obj,field.getType().getEnumConstants()[(Integer) value]); - }else{ - field.set(obj,value); + if (BeanUtils.isSimpleValueType(field.getType())) { + if (field.getType().isEnum()) { + field.set(obj, field.getType().getEnumConstants()[(Integer) value]); + } else { + field.set(obj, value); } - } else if(field.getType() == List.class){ + } else if (field.getType() == List.class) { // if(((ParameterizedType)field.getGenericType()).getActualTypeArguments()[0] == Double.class){ - field.set(obj,value); + field.set(obj, value); } } catch (NoSuchFieldException | IllegalAccessException ex) { ex.printStackTrace(); @@ -147,7 +149,7 @@ public class ServerHandler { if (userToSkip != null && user.getSessionId().equals(userToSkip.getSessionId())) { continue; } - try{ + try { ByteBuffer b = ByteBuffer.wrap(objectMapper.writeValueAsBytes(obj)); user.send(b); } catch (JsonProcessingException e) { @@ -160,46 +162,49 @@ public class ServerHandler { broadcastMessage(obj, null);//Broadcasts the message to every user } - private static HashMap getOrdinalPipeline() throws CameraException, IllegalAccessException { - HashMap tmp = new HashMap<>(); - for (Field f : Pipeline.class.getFields()){ - if (!f.getType().isEnum()){ - tmp.put(f.getName(),f.get(CameraManager.getCurrentCamera().getCurrentPipeline())); - } else{ + private static HashMap getOrdinalPipeline() throws CameraException, IllegalAccessException { + HashMap tmp = new HashMap<>(); + for (Field f : Pipeline.class.getFields()) { + if (!f.getType().isEnum()) { + tmp.put(f.getName(), f.get(CameraManager.getCurrentCamera().getCurrentPipeline())); + } else { var i = (Enum) f.get(CameraManager.getCurrentCamera().getCurrentPipeline()); - tmp.put(f.getName(),i.ordinal()); + tmp.put(f.getName(), i.ordinal()); } } return tmp; } - private static HashMap getOrdinalSettings(){ - HashMap tmp = new HashMap<>(); - tmp.put("teamNumber",SettingsManager.GeneralSettings.teamNumber); - tmp.put("connectionType",SettingsManager.GeneralSettings.connectionType.ordinal()); - tmp.put("ip",SettingsManager.GeneralSettings.ip); - tmp.put("gateway",SettingsManager.GeneralSettings.gateway); - tmp.put("netmask",SettingsManager.GeneralSettings.netmask); - tmp.put("hostname",SettingsManager.GeneralSettings.hostname); + + private static HashMap getOrdinalSettings() { + HashMap tmp = new HashMap<>(); + tmp.put("teamNumber", SettingsManager.GeneralSettings.teamNumber); + tmp.put("connectionType", SettingsManager.GeneralSettings.connectionType.ordinal()); + tmp.put("ip", SettingsManager.GeneralSettings.ip); + tmp.put("gateway", SettingsManager.GeneralSettings.gateway); + tmp.put("netmask", SettingsManager.GeneralSettings.netmask); + tmp.put("hostname", SettingsManager.GeneralSettings.hostname); return tmp; } - private static HashMap getOrdinalCameraSettings(){ - HashMap tmp = new HashMap<>(); + + private static HashMap getOrdinalCameraSettings() { + HashMap tmp = new HashMap<>(); try { var currentCamera = CameraManager.getCurrentCamera(); - tmp.put("fov",currentCamera.getFOV()); - tmp.put("streamDivisor",currentCamera.getStreamDivisor().ordinal()); - tmp.put("resolution",currentCamera.getVideoModeIndex()); + tmp.put("fov", currentCamera.getFOV()); + tmp.put("streamDivisor", currentCamera.getStreamDivisor().ordinal()); + tmp.put("resolution", currentCamera.getVideoModeIndex()); } catch (CameraException e) { e.printStackTrace(); } return tmp; } + public static void sendFullSettings() { //General settings Map fullSettings = new HashMap<>(); try { fullSettings.put("settings", getOrdinalSettings()); - fullSettings.put("cameraSettings",getOrdinalCameraSettings()); + fullSettings.put("cameraSettings", getOrdinalCameraSettings()); fullSettings.put("cameraList", CameraManager.getAllCamerasByName().keySet()); var currentCamera = CameraManager.getCurrentCamera(); fullSettings.put("pipeline", getOrdinalPipeline()); diff --git a/Main/src/main/resources/web/index.html b/Main/src/main/resources/web/index.html index 7fdcc6cff..6ee955593 100644 --- a/Main/src/main/resources/web/index.html +++ b/Main/src/main/resources/web/index.html @@ -1 +1 @@ -Chameleon Vision
\ No newline at end of file +Chameleon Vision
\ No newline at end of file diff --git a/Main/src/main/resources/web/js/app.4845058e.js b/Main/src/main/resources/web/js/app.4845058e.js deleted file mode 100644 index 68c6375c5..000000000 --- a/Main/src/main/resources/web/js/app.4845058e.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(e){function t(t){for(var a,r,c=t[0],s=t[1],u=t[2],l=0,d=[];l({}),created(){this.$options.sockets.onmessage=async e=>{try{var t=await e.data.arrayBuffer();let n=this.$msgPack.decode(t);for(let e in n)n.hasOwnProperty(e)&&this.handleMessage(e,n[e])}catch(n){console.error("error: "+e.data+" , "+n)}}}},c=o,s=(n("034f"),n("2877")),u=n("6544"),l=n.n(u),d=n("7496"),p=n("40dc"),h=n("a523"),f=n("a75b"),m=n("0e8f"),b=n("a722"),k=n("71a3"),v=n("fe57"),g=n("2a7f"),y=Object(s["a"])(c,r,i,!1,null,null,null),w=y.exports;l()(y,{VApp:d["a"],VAppBar:p["a"],VContainer:h["a"],VContent:f["a"],VFlex:m["a"],VLayout:b["a"],VTab:k["a"],VTabs:v["a"],VToolbarItems:g["a"],VToolbarTitle:g["b"]});var C=n("8c4f");function x(e){return()=>n("1a5d")(`./${e}.vue`)}a["a"].use(C["a"]);var P=new C["a"]({mode:"history",base:"/",routes:[{path:"/",redirect:"/Vision"},{path:"/Vision",name:"Vision",component:x("Camera")},{path:"/Settings",name:"Settings",component:x("Settings")}]}),V=n("2f62");a["a"].use(V["a"]);const S=e=>(t,n)=>{a["a"].set(t,e,n)};var L=new V["a"].Store({state:{settings:{teamNumber:1577,connectionType:0,ip:"",gateway:"",netmask:"",hostname:"Chameleon-vision"},pipeline:{exposure:0,brightness:0,orientation:0,hue:[0,15],saturation:[0,15],value:[0,25],erode:!1,dilate:!1,area:[0,12],ratio:[0,12],extent:[0,12],targetGrouping:0,targetIntersection:0,sortMode:0,isBinary:0},cameraSettings:{},resolutionList:[],port:1181,currentCameraIndex:0,currentPipelineIndex:0,cameraList:[],pipelineList:[],point:{}},mutations:{settings:S("settings"),pipeline:S("pipeline"),cameraSettings:S("cameraSettings"),resolutionList:S("resolutionList"),port:S("port"),currentCameraIndex:S("currentCameraIndex"),currentPipelineIndex:S("currentPipelineIndex"),cameraList:S("cameraList"),pipelineList:S("pipelineList"),point:S("point")},actions:{settings:e=>e.settings,pipeline:e=>e.pipeline,cameraSettings:e=>e.cameraSettings,resolutionList:e=>e.resolutionList,port:e=>e.port,currentCameraIndex:e=>e.currentCameraIndex,currentPipelineIndex:e=>e.currentPipelineIndex,cameraList:e=>e.cameraList,pipelineList:e=>e.pipelineList,point:e=>e.point,setPipeValues(e,t){for(let n in t)a["a"].set(e.pipeline,n,t[n])}}}),O=(n("5363"),n("d1e7"),n("f309"));a["a"].use(O["a"]);var T=new O["a"]({icons:{}}),_=n("b408"),I=n.n(_),j=n("7d47"),E=n.n(j);a["a"].config.productionTip=!1,a["a"].use(I.a,"ws://"+location.hostname+":8888/websocket"),a["a"].prototype.$msgPack=E()(!0),a["a"].mixin({methods:{handleInput(e,t){let n=this.$msgPack.encode({[e]:t});this.$socket.send(n)}}}),new a["a"]({router:P,store:L,vuetify:T,render:e=>e(w)}).$mount("#app")},cf05:function(e,t,n){e.exports=n.p+"img/logo.e82307fd.png"}}); -//# sourceMappingURL=app.4845058e.js.map \ No newline at end of file diff --git a/Main/src/main/resources/web/js/app.4845058e.js.map b/Main/src/main/resources/web/js/app.4845058e.js.map deleted file mode 100644 index c0cb2a84b..000000000 --- a/Main/src/main/resources/web/js/app.4845058e.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?9745","webpack:///./src/views lazy ^\\.\\/.*\\.vue$ namespace object","webpack:///./src/App.vue?f4e4","webpack:///src/App.vue","webpack:///./src/App.vue?d7d8","webpack:///./src/App.vue?4f7e","webpack:///./src/router.js","webpack:///./src/store.js","webpack:///./src/plugins/vuetify.js","webpack:///./src/main.js","webpack:///./src/assets/logo.png"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","map","webpackAsyncContext","req","ids","id","keys","render","_vm","this","_h","$createElement","_c","_self","attrs","staticClass","_v","staticRenderFns","components","methods","$store","state","commit","pipeline","log","$options","sockets","onmessage","async","buffer","arrayBuffer","$msgPack","decode","prop","handleMessage","component","VApp","VAppBar","VContainer","VContent","VFlex","VLayout","VTab","VTabs","VToolbarItems","VToolbar","VToolbarTitle","lazyLoad","view","use","base","routes","path","redirect","set","val","Store","settings","teamNumber","connectionType","ip","gateway","netmask","hostname","exposure","brightness","orientation","hue","saturation","erode","dilate","area","ratio","extent","targetGrouping","targetIntersection","sortMode","isBinary","cameraSettings","resolutionList","port","currentCameraIndex","currentPipelineIndex","cameraList","pipelineList","point","mutations","actions","obj","icons","config","productionTip","location","mixin","msg","encode","$socket","send","router","store","vuetify","h","App","$mount"],"mappings":"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","file":"js/app.4845058e.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-716fb61c\":\"84a36d26\",\"chunk-234aed0c\":\"fbf7ad5e\",\"chunk-1a7066d8\":\"1b23c0c0\",\"chunk-28383ebf\":\"93476238\",\"chunk-38331e86\":\"2606c966\",\"chunk-4b541045\":\"d5203d49\",\"chunk-7a810817\":\"bca05c28\",\"chunk-2d0d3320\":\"bae28379\",\"chunk-6014d13c\":\"c132acbd\",\"chunk-79b72a3d\":\"aeb36768\",\"chunk-7cf477eb\":\"de18472d\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"chunk-716fb61c\":1,\"chunk-234aed0c\":1,\"chunk-28383ebf\":1,\"chunk-38331e86\":1,\"chunk-4b541045\":1,\"chunk-7a810817\":1,\"chunk-6014d13c\":1,\"chunk-79b72a3d\":1,\"chunk-7cf477eb\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-716fb61c\":\"ab43288b\",\"chunk-234aed0c\":\"62cd23bf\",\"chunk-1a7066d8\":\"31d6cfe0\",\"chunk-28383ebf\":\"5bdfa61d\",\"chunk-38331e86\":\"3e507f7b\",\"chunk-4b541045\":\"d47fe89d\",\"chunk-7a810817\":\"e757f52a\",\"chunk-2d0d3320\":\"31d6cfe0\",\"chunk-6014d13c\":\"da97df88\",\"chunk-79b72a3d\":\"52ef46aa\",\"chunk-7cf477eb\":\"a93b3047\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","var map = {\n\t\"./Camera.vue\": [\n\t\t\"6ec0\",\n\t\t\"chunk-716fb61c\",\n\t\t\"chunk-234aed0c\",\n\t\t\"chunk-7a810817\",\n\t\t\"chunk-6014d13c\"\n\t],\n\t\"./CameraViewes/ContoursTab.vue\": [\n\t\t\"5c73\",\n\t\t\"chunk-716fb61c\",\n\t\t\"chunk-234aed0c\",\n\t\t\"chunk-7a810817\",\n\t\t\"chunk-2d0d3320\"\n\t],\n\t\"./CameraViewes/InputTab.vue\": [\n\t\t\"50ef\",\n\t\t\"chunk-716fb61c\",\n\t\t\"chunk-234aed0c\",\n\t\t\"chunk-4b541045\"\n\t],\n\t\"./CameraViewes/OutputTab.vue\": [\n\t\t\"4c92\",\n\t\t\"chunk-716fb61c\",\n\t\t\"chunk-234aed0c\",\n\t\t\"chunk-38331e86\"\n\t],\n\t\"./CameraViewes/ThresholdTab.vue\": [\n\t\t\"1a40\",\n\t\t\"chunk-716fb61c\",\n\t\t\"chunk-7a810817\",\n\t\t\"chunk-79b72a3d\"\n\t],\n\t\"./Settings.vue\": [\n\t\t\"26d3\",\n\t\t\"chunk-716fb61c\",\n\t\t\"chunk-234aed0c\",\n\t\t\"chunk-28383ebf\"\n\t],\n\t\"./SettingsViewes/Cameras.vue\": [\n\t\t\"0b81\",\n\t\t\"chunk-716fb61c\",\n\t\t\"chunk-234aed0c\",\n\t\t\"chunk-1a7066d8\"\n\t],\n\t\"./SettingsViewes/General.vue\": [\n\t\t\"13f2\",\n\t\t\"chunk-716fb61c\",\n\t\t\"chunk-7cf477eb\"\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = \"1a5d\";\nmodule.exports = webpackAsyncContext;","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',[_c('v-app-bar',{attrs:{\"app\":\"\",\"dense\":\"\",\"clipped-left\":\"\",\"dark\":\"\"}},[_c('img',{staticClass:\"imgClass\",attrs:{\"src\":require(\"./assets/logo.png\")}}),_c('v-toolbar-title',{attrs:{\"id\":\"title\"}},[_vm._v(\"Chameleon Vision\")]),_c('div',{staticClass:\"flex-grow-1\"}),_c('v-toolbar-items',[_c('v-tabs',{attrs:{\"dark\":\"\",\"height\":\"48\",\"slider-color\":\"#4baf62\"}},[_c('v-tab',{attrs:{\"to\":\"Vision\"}},[_vm._v(\"Vision\")]),_c('v-tab',{attrs:{\"to\":\"Settings\"}},[_vm._v(\"Settings\")])],1)],1)],1),_c('v-content',[_c('v-container',{attrs:{\"fluid\":\"\",\"fill-height\":\"\"}},[_c('v-layout',[_c('v-flex',[_c('router-view')],1)],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=2d07eee6&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VContent } from 'vuetify/lib/components/VContent';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\nimport { VToolbarItems } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VApp,VAppBar,VContainer,VContent,VFlex,VLayout,VTab,VTabs,VToolbarItems,VToolbarTitle})\n","import Vue from 'vue'\r\nimport Router from 'vue-router'\r\nVue.use(Router)\r\n\r\nfunction lazyLoad(view){\r\n return() => import(`@/views/${view}.vue`)\r\n}\r\nexport default new Router({\r\n mode: 'history',\r\n base: process.env.BASE_URL,\r\n routes: [\r\n {\r\n path: '/',\r\n redirect:'/Vision'\r\n },\r\n {\r\n path: '/Vision',\r\n name: 'Vision',\r\n component: lazyLoad('Camera')\r\n },\r\n {\r\n path: '/Settings',\r\n name: 'Settings',\r\n component: lazyLoad('Settings')\r\n }\r\n ]\r\n})\r\n","import Vue from 'vue'\r\nimport Vuex from 'vuex'\r\n\r\nVue.use(Vuex)\r\n\r\nconst set = key => (state,val) =>{\r\n Vue.set(state,key,val);\r\n};\r\n\r\nexport default new Vuex.Store({\r\n state: {\r\n settings:{\r\n teamNumber:1577,\r\n connectionType:0,\r\n ip:\"\",\r\n gateway:\"\",\r\n netmask:\"\",\r\n hostname: \"Chameleon-vision\"\r\n },\r\n pipeline:{\r\n exposure:0,\r\n brightness:0,\r\n orientation:0,\r\n hue:[0,15],\r\n saturation:[0,15],\r\n value:[0,25],\r\n erode:false,\r\n dilate:false,\r\n area:[0,12],\r\n ratio:[0,12],\r\n extent:[0,12],\r\n targetGrouping:0,\r\n targetIntersection:0,\r\n sortMode:0,\r\n isBinary:0\r\n },\r\n cameraSettings:{},\r\n resolutionList:[],\r\n port:1181,\r\n currentCameraIndex:0,\r\n currentPipelineIndex:0,\r\n cameraList:[],\r\n pipelineList:[],\r\n point:{}\r\n },\r\n mutations: {\r\n settings: set('settings'),\r\n pipeline: set('pipeline'),\r\n cameraSettings: set('cameraSettings'),\r\n resolutionList: set('resolutionList'),\r\n port: set('port'),\r\n currentCameraIndex: set('currentCameraIndex'),\r\n currentPipelineIndex: set('currentPipelineIndex'),\r\n cameraList: set('cameraList'),\r\n pipelineList: set('pipelineList'),\r\n point:set('point')\r\n },\r\n actions: {\r\n settings: state => state.settings,\r\n pipeline: state => state.pipeline,\r\n cameraSettings: state =>state.cameraSettings,\r\n resolutionList: state =>state.resolutionList,\r\n port: state =>state.port,\r\n currentCameraIndex: state =>state.currentCameraIndex,\r\n currentPipelineIndex: state =>state.currentPipelineIndex,\r\n cameraList: state =>state.cameraList,\r\n pipelineList: state =>state.pipelineList,\r\n point: state =>state.point,\r\n setPipeValues(state,obj){\r\n for(let i in obj){\r\n Vue.set(state.pipeline,i,obj[i]);\r\n }\r\n }\r\n }\r\n})\r\n","\r\nimport '@mdi/font/css/materialdesignicons.css';\r\nimport 'material-design-icons-iconfont/dist/material-design-icons.css'\r\nimport Vue from 'vue';\r\nimport Vuetify from 'vuetify/lib';\r\nVue.use(Vuetify);\r\n\r\nexport default new Vuetify({\r\n icons: {\r\n \r\n}\r\n \r\n});\r\n","import Vue from 'vue'\r\nimport App from './App.vue'\r\nimport router from './router'\r\nimport store from './store'\r\nimport vuetify from './plugins/vuetify';\r\nimport VueNativeSock from 'vue-native-websocket';\r\nimport msgPack from 'msgpack5';\r\n\r\nVue.config.productionTip = false;\r\n// Vue.use(VueNativeSock,'ws://' + location.host + '/websocket',{format: 'json'});\r\nVue.use(VueNativeSock,'ws://'+location.hostname+':8888/websocket');\r\nVue.prototype.$msgPack = msgPack(true)\r\nVue.mixin({\r\n methods:{\r\n handleInput(key,value){\r\n let msg = this.$msgPack.encode({[key]:value})\r\n this.$socket.send(msg);\r\n }\r\n }\r\n})\r\nnew Vue({\r\n router,\r\n store,\r\n vuetify,\r\n render: h => h(App)\r\n}).$mount('#app')\r\n","module.exports = __webpack_public_path__ + \"img/logo.e82307fd.png\";"],"sourceRoot":""} \ No newline at end of file diff --git a/Main/src/main/resources/web/js/app.62b07d03.js b/Main/src/main/resources/web/js/app.62b07d03.js new file mode 100644 index 000000000..967c1a965 --- /dev/null +++ b/Main/src/main/resources/web/js/app.62b07d03.js @@ -0,0 +1,2 @@ +(function(e){function t(t){for(var r,a,c=t[0],s=t[1],u=t[2],l=0,d=[];l({}),created(){this.$options.sockets.onmessage=async e=>{try{var t=await e.data.arrayBuffer();let n=this.$msgPack.decode(t);for(let e in n)n.hasOwnProperty(e)&&this.handleMessage(e,n[e])}catch(n){console.error("error: "+e.data+" , "+n)}}}},c=o,s=(n("034f"),n("2877")),u=n("6544"),l=n.n(u),d=n("7496"),p=n("40dc"),f=n("a523"),h=n("a75b"),m=n("0e8f"),b=n("a722"),k=n("71a3"),v=n("fe57"),g=n("2a7f"),y=Object(s["a"])(c,a,i,!1,null,null,null),w=y.exports;l()(y,{VApp:d["a"],VAppBar:p["a"],VContainer:f["a"],VContent:h["a"],VFlex:m["a"],VLayout:b["a"],VTab:k["a"],VTabs:v["a"],VToolbarItems:g["a"],VToolbarTitle:g["b"]});var C=n("8c4f");function x(e){return()=>n("1a5d")(`./${e}.vue`)}r["a"].use(C["a"]);var P=new C["a"]({base:"/",routes:[{path:"/",redirect:"/Vision"},{path:"/Vision",name:"Vision",component:x("Camera")},{path:"/Settings",name:"Settings",component:x("Settings")}]}),V=n("2f62");r["a"].use(V["a"]);const S=e=>(t,n)=>{r["a"].set(t,e,n)};var L=new V["a"].Store({state:{settings:{teamNumber:1577,connectionType:0,ip:"",gateway:"",netmask:"",hostname:"Chameleon-vision"},pipeline:{exposure:0,brightness:0,orientation:0,hue:[0,15],saturation:[0,15],value:[0,25],erode:!1,dilate:!1,area:[0,12],ratio:[0,12],extent:[0,12],targetGrouping:0,targetIntersection:0,sortMode:0,isBinary:0},cameraSettings:{},resolutionList:[],port:1181,currentCameraIndex:0,currentPipelineIndex:0,cameraList:[],pipelineList:[],point:{}},mutations:{settings:S("settings"),pipeline:S("pipeline"),cameraSettings:S("cameraSettings"),resolutionList:S("resolutionList"),port:S("port"),currentCameraIndex:S("currentCameraIndex"),currentPipelineIndex:S("currentPipelineIndex"),cameraList:S("cameraList"),pipelineList:S("pipelineList"),point:S("point")},actions:{settings:e=>e.settings,pipeline:e=>e.pipeline,cameraSettings:e=>e.cameraSettings,resolutionList:e=>e.resolutionList,port:e=>e.port,currentCameraIndex:e=>e.currentCameraIndex,currentPipelineIndex:e=>e.currentPipelineIndex,cameraList:e=>e.cameraList,pipelineList:e=>e.pipelineList,point:e=>e.point,setPipeValues(e,t){for(let n in t)r["a"].set(e.pipeline,n,t[n])}}}),O=(n("5363"),n("d1e7"),n("f309"));r["a"].use(O["a"]);var T=new O["a"]({icons:{}}),_=n("b408"),I=n.n(_),j=n("7d47"),E=n.n(j);r["a"].config.productionTip=!1,r["a"].use(I.a,"ws://"+location.hostname+":8888/websocket"),r["a"].prototype.$msgPack=E()(!0),r["a"].mixin({methods:{handleInput(e,t){let n=this.$msgPack.encode({[e]:t});this.$socket.send(n)}}}),new r["a"]({router:P,store:L,vuetify:T,render:e=>e(w)}).$mount("#app")},cf05:function(e,t,n){e.exports=n.p+"img/logo.e82307fd.png"}}); +//# sourceMappingURL=app.62b07d03.js.map \ No newline at end of file diff --git a/Main/src/main/resources/web/js/app.62b07d03.js.map b/Main/src/main/resources/web/js/app.62b07d03.js.map new file mode 100644 index 000000000..8fc3a0fe9 --- /dev/null +++ b/Main/src/main/resources/web/js/app.62b07d03.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?9745","webpack:///./src/views lazy ^\\.\\/.*\\.vue$ namespace object","webpack:///./src/App.vue?e060","webpack:///src/App.vue","webpack:///./src/App.vue?d7d8","webpack:///./src/App.vue?4f7e","webpack:///./src/router.js","webpack:///./src/store.js","webpack:///./src/plugins/vuetify.js","webpack:///./src/main.js","webpack:///./src/assets/logo.png"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","jsonpScriptSrc","p","exports","module","l","e","promises","cssChunks","Promise","resolve","reject","href","fullhref","existingLinkTags","document","getElementsByTagName","tag","dataHref","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","head","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","map","webpackAsyncContext","req","ids","id","keys","render","_vm","this","_h","$createElement","_c","_self","attrs","staticClass","_v","staticRenderFns","components","methods","$store","state","commit","pipeline","log","$options","sockets","onmessage","async","buffer","arrayBuffer","$msgPack","decode","prop","handleMessage","component","VApp","VAppBar","VContainer","VContent","VFlex","VLayout","VTab","VTabs","VToolbarItems","VToolbar","VToolbarTitle","lazyLoad","view","use","base","routes","path","redirect","set","val","Store","settings","teamNumber","connectionType","ip","gateway","netmask","hostname","exposure","brightness","orientation","hue","saturation","erode","dilate","area","ratio","extent","targetGrouping","targetIntersection","sortMode","isBinary","cameraSettings","resolutionList","port","currentCameraIndex","currentPipelineIndex","cameraList","pipelineList","point","mutations","actions","obj","icons","config","productionTip","location","mixin","msg","encode","$socket","send","router","store","vuetify","h","App","$mount"],"mappings":"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","file":"js/app.62b07d03.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-716fb61c\":\"84a36d26\",\"chunk-234aed0c\":\"be70e2b2\",\"chunk-1a7066d8\":\"62f1ea08\",\"chunk-28383ebf\":\"995507d7\",\"chunk-38331e86\":\"79b1cbc4\",\"chunk-4b541045\":\"184cf02c\",\"chunk-7a810817\":\"774f35d1\",\"chunk-2d0d3320\":\"6be348e1\",\"chunk-6014d13c\":\"5e43ddd0\",\"chunk-79b72a3d\":\"bdb0c98e\",\"chunk-7cf477eb\":\"c81dadc5\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"chunk-716fb61c\":1,\"chunk-234aed0c\":1,\"chunk-28383ebf\":1,\"chunk-38331e86\":1,\"chunk-4b541045\":1,\"chunk-7a810817\":1,\"chunk-6014d13c\":1,\"chunk-79b72a3d\":1,\"chunk-7cf477eb\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({}[chunkId]||chunkId) + \".\" + {\"chunk-716fb61c\":\"ab43288b\",\"chunk-234aed0c\":\"62cd23bf\",\"chunk-1a7066d8\":\"31d6cfe0\",\"chunk-28383ebf\":\"5bdfa61d\",\"chunk-38331e86\":\"3e507f7b\",\"chunk-4b541045\":\"d47fe89d\",\"chunk-7a810817\":\"e757f52a\",\"chunk-2d0d3320\":\"31d6cfe0\",\"chunk-6014d13c\":\"da97df88\",\"chunk-79b72a3d\":\"52ef46aa\",\"chunk-7cf477eb\":\"a93b3047\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","var map = {\n\t\"./Camera.vue\": [\n\t\t\"6ec0\",\n\t\t\"chunk-716fb61c\",\n\t\t\"chunk-234aed0c\",\n\t\t\"chunk-7a810817\",\n\t\t\"chunk-6014d13c\"\n\t],\n\t\"./CameraViewes/ContoursTab.vue\": [\n\t\t\"5c73\",\n\t\t\"chunk-716fb61c\",\n\t\t\"chunk-234aed0c\",\n\t\t\"chunk-7a810817\",\n\t\t\"chunk-2d0d3320\"\n\t],\n\t\"./CameraViewes/InputTab.vue\": [\n\t\t\"50ef\",\n\t\t\"chunk-716fb61c\",\n\t\t\"chunk-234aed0c\",\n\t\t\"chunk-4b541045\"\n\t],\n\t\"./CameraViewes/OutputTab.vue\": [\n\t\t\"4c92\",\n\t\t\"chunk-716fb61c\",\n\t\t\"chunk-234aed0c\",\n\t\t\"chunk-38331e86\"\n\t],\n\t\"./CameraViewes/ThresholdTab.vue\": [\n\t\t\"1a40\",\n\t\t\"chunk-716fb61c\",\n\t\t\"chunk-7a810817\",\n\t\t\"chunk-79b72a3d\"\n\t],\n\t\"./Settings.vue\": [\n\t\t\"26d3\",\n\t\t\"chunk-716fb61c\",\n\t\t\"chunk-234aed0c\",\n\t\t\"chunk-28383ebf\"\n\t],\n\t\"./SettingsViewes/Cameras.vue\": [\n\t\t\"0b81\",\n\t\t\"chunk-716fb61c\",\n\t\t\"chunk-234aed0c\",\n\t\t\"chunk-1a7066d8\"\n\t],\n\t\"./SettingsViewes/General.vue\": [\n\t\t\"13f2\",\n\t\t\"chunk-716fb61c\",\n\t\t\"chunk-7cf477eb\"\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = \"1a5d\";\nmodule.exports = webpackAsyncContext;","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',[_c('v-app-bar',{attrs:{\"app\":\"\",\"dense\":\"\",\"clipped-left\":\"\",\"dark\":\"\"}},[_c('img',{staticClass:\"imgClass\",attrs:{\"src\":require(\"./assets/logo.png\")}}),_c('v-toolbar-title',{attrs:{\"id\":\"title\"}},[_vm._v(\"Chameleon Vision\")]),_c('div',{staticClass:\"flex-grow-1\"}),_c('v-toolbar-items',[_c('v-tabs',{attrs:{\"dark\":\"\",\"height\":\"48\",\"slider-color\":\"#4baf62\"}},[_c('v-tab',{attrs:{\"to\":\"Vision\"}},[_vm._v(\"Vision\")]),_c('v-tab',{attrs:{\"to\":\"Settings\"}},[_vm._v(\"Settings\")])],1)],1)],1),_c('v-content',[_c('v-container',{attrs:{\"fluid\":\"\",\"fill-height\":\"\"}},[_c('v-layout',[_c('v-flex',[_c('router-view')],1)],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/vuetify-loader/lib/loader.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=2d07eee6&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VContent } from 'vuetify/lib/components/VContent';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VLayout } from 'vuetify/lib/components/VGrid';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\nimport { VToolbarItems } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VApp,VAppBar,VContainer,VContent,VFlex,VLayout,VTab,VTabs,VToolbarItems,VToolbarTitle})\n","import Vue from 'vue'\r\nimport Router from 'vue-router'\r\nVue.use(Router)\r\n\r\nfunction lazyLoad(view){\r\n return() => import(`@/views/${view}.vue`)\r\n}\r\nexport default new Router({\r\n // mode: 'history',\r\n base: process.env.BASE_URL,\r\n routes: [\r\n {\r\n path: '/',\r\n redirect:'/Vision'\r\n },\r\n {\r\n path: '/Vision',\r\n name: 'Vision',\r\n component: lazyLoad('Camera')\r\n },\r\n {\r\n path: '/Settings',\r\n name: 'Settings',\r\n component: lazyLoad('Settings')\r\n }\r\n ]\r\n})\r\n","import Vue from 'vue'\r\nimport Vuex from 'vuex'\r\n\r\nVue.use(Vuex)\r\n\r\nconst set = key => (state,val) =>{\r\n Vue.set(state,key,val);\r\n};\r\n\r\nexport default new Vuex.Store({\r\n state: {\r\n settings:{\r\n teamNumber:1577,\r\n connectionType:0,\r\n ip:\"\",\r\n gateway:\"\",\r\n netmask:\"\",\r\n hostname: \"Chameleon-vision\"\r\n },\r\n pipeline:{\r\n exposure:0,\r\n brightness:0,\r\n orientation:0,\r\n hue:[0,15],\r\n saturation:[0,15],\r\n value:[0,25],\r\n erode:false,\r\n dilate:false,\r\n area:[0,12],\r\n ratio:[0,12],\r\n extent:[0,12],\r\n targetGrouping:0,\r\n targetIntersection:0,\r\n sortMode:0,\r\n isBinary:0\r\n },\r\n cameraSettings:{},\r\n resolutionList:[],\r\n port:1181,\r\n currentCameraIndex:0,\r\n currentPipelineIndex:0,\r\n cameraList:[],\r\n pipelineList:[],\r\n point:{}\r\n },\r\n mutations: {\r\n settings: set('settings'),\r\n pipeline: set('pipeline'),\r\n cameraSettings: set('cameraSettings'),\r\n resolutionList: set('resolutionList'),\r\n port: set('port'),\r\n currentCameraIndex: set('currentCameraIndex'),\r\n currentPipelineIndex: set('currentPipelineIndex'),\r\n cameraList: set('cameraList'),\r\n pipelineList: set('pipelineList'),\r\n point:set('point')\r\n },\r\n actions: {\r\n settings: state => state.settings,\r\n pipeline: state => state.pipeline,\r\n cameraSettings: state =>state.cameraSettings,\r\n resolutionList: state =>state.resolutionList,\r\n port: state =>state.port,\r\n currentCameraIndex: state =>state.currentCameraIndex,\r\n currentPipelineIndex: state =>state.currentPipelineIndex,\r\n cameraList: state =>state.cameraList,\r\n pipelineList: state =>state.pipelineList,\r\n point: state =>state.point,\r\n setPipeValues(state,obj){\r\n for(let i in obj){\r\n Vue.set(state.pipeline,i,obj[i]);\r\n }\r\n }\r\n }\r\n})\r\n","\r\nimport '@mdi/font/css/materialdesignicons.css';\r\nimport 'material-design-icons-iconfont/dist/material-design-icons.css'\r\nimport Vue from 'vue';\r\nimport Vuetify from 'vuetify/lib';\r\nVue.use(Vuetify);\r\n\r\nexport default new Vuetify({\r\n icons: {\r\n \r\n}\r\n \r\n});\r\n","import Vue from 'vue'\r\nimport App from './App.vue'\r\nimport router from './router'\r\nimport store from './store'\r\nimport vuetify from './plugins/vuetify';\r\nimport VueNativeSock from 'vue-native-websocket';\r\nimport msgPack from 'msgpack5';\r\n\r\nVue.config.productionTip = false;\r\n// Vue.use(VueNativeSock,'ws://' + location.host + '/websocket',{format: 'json'});\r\nVue.use(VueNativeSock,'ws://'+location.hostname+':8888/websocket');\r\nVue.prototype.$msgPack = msgPack(true)\r\nVue.mixin({\r\n methods:{\r\n handleInput(key,value){\r\n let msg = this.$msgPack.encode({[key]:value})\r\n this.$socket.send(msg);\r\n }\r\n }\r\n})\r\nnew Vue({\r\n router,\r\n store,\r\n vuetify,\r\n render: h => h(App)\r\n}).$mount('#app')\r\n","module.exports = __webpack_public_path__ + \"img/logo.e82307fd.png\";"],"sourceRoot":""} \ No newline at end of file diff --git a/Main/src/main/resources/web/js/chunk-1a7066d8.1b23c0c0.js b/Main/src/main/resources/web/js/chunk-1a7066d8.62f1ea08.js similarity index 98% rename from Main/src/main/resources/web/js/chunk-1a7066d8.1b23c0c0.js rename to Main/src/main/resources/web/js/chunk-1a7066d8.62f1ea08.js index 82a1fa12a..967efd5f6 100644 --- a/Main/src/main/resources/web/js/chunk-1a7066d8.1b23c0c0.js +++ b/Main/src/main/resources/web/js/chunk-1a7066d8.62f1ea08.js @@ -1,2 +1,2 @@ (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-1a7066d8"],{"0b81":function(e,t,a){"use strict";a.r(t);var s=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",[a("CVselect",{attrs:{name:"Camera",list:e.cameraList},model:{value:e.currentCameraIndex,callback:function(t){e.currentCameraIndex=t},expression:"currentCameraIndex"}}),a("CVselect",{attrs:{name:"Resulotion",list:e.resolutionList},model:{value:e.cameraSettings.resolution,callback:function(t){e.$set(e.cameraSettings,"resolution",t)},expression:"cameraSettings.resolution"}}),a("CVselect",{attrs:{name:"Stream Resulotion",list:["1:1","1:2","1:4","1:6"]},model:{value:e.cameraSettings.streamDivisor,callback:function(t){e.$set(e.cameraSettings,"streamDivisor",t)},expression:"cameraSettings.streamDivisor"}}),a("CVnumberinput",{attrs:{name:"Diagonal FOV"},model:{value:e.cameraSettings.fov,callback:function(t){e.$set(e.cameraSettings,"fov",t)},expression:"cameraSettings.fov"}}),a("v-btn",{staticStyle:{"margin-top":"10px"},attrs:{small:"",color:"#4baf62"},on:{click:e.sendCameraSettings}},[e._v("Save Camera Settings")])],1)},n=[],r=a("8384"),i=a("9696"),l={name:"CameraSettings",components:{CVselect:r["a"],CVnumberinput:i["a"]},data(){return{}},methods:{sendCameraSettings(){this.handleInput("cameraSettings",this.cameraSettings)}},computed:{currentCameraIndex:{get(){return this.$store.state.currentCameraIndex},set(e){this.$store.commit("currentCameraIndex",e)}},cameraList:{get(){return this.$store.state.cameraList},set(e){this.$store.commit("cameraList",e)}},resolutionList:{get(){return this.$store.state.resolutionList}},cameraSettings:{get(){return this.$store.state.cameraSettings},set(e){this.$store.commit("cameraSettings",e)}}}},c=l,o=a("2877"),m=a("6544"),u=a.n(m),d=a("8336"),p=Object(o["a"])(c,s,n,!1,null,"04c1992d",null);t["default"]=p.exports;u()(p,{VBtn:d["a"]})},9696:function(e,t,a){"use strict";var s=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",[a("v-row",{attrs:{dense:"",align:"center"}},[a("v-col",{attrs:{cols:2}},[a("span",[e._v(e._s(e.name))])]),a("v-col",[a("v-text-field",{staticClass:"mt-0 pt-0",staticStyle:{width:"70px"},attrs:{dark:"","hide-details":"","single-line":"",type:"number"},model:{value:e.localValue,callback:function(t){e.localValue=t},expression:"localValue"}})],1)],1)],1)},n=[],r={name:"NumberInput",props:["name","value"],data(){return{}},computed:{localValue:{get(){return this.value},set(e){this.$emit("input",parseInt(e))}}}},i=r,l=a("2877"),c=a("6544"),o=a.n(c),m=a("62ad"),u=a("0fd9"),d=a("8654"),p=Object(l["a"])(i,s,n,!1,null,"10e05c36",null);t["a"]=p.exports;o()(p,{VCol:m["a"],VRow:u["a"],VTextField:d["a"]})}}]); -//# sourceMappingURL=chunk-1a7066d8.1b23c0c0.js.map \ No newline at end of file +//# sourceMappingURL=chunk-1a7066d8.62f1ea08.js.map \ No newline at end of file diff --git a/Main/src/main/resources/web/js/chunk-1a7066d8.1b23c0c0.js.map b/Main/src/main/resources/web/js/chunk-1a7066d8.62f1ea08.js.map similarity index 98% rename from Main/src/main/resources/web/js/chunk-1a7066d8.1b23c0c0.js.map rename to Main/src/main/resources/web/js/chunk-1a7066d8.62f1ea08.js.map index bfe2ac23e..3a7c0bc4f 100644 --- a/Main/src/main/resources/web/js/chunk-1a7066d8.1b23c0c0.js.map +++ b/Main/src/main/resources/web/js/chunk-1a7066d8.62f1ea08.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./src/views/SettingsViewes/Cameras.vue?ff96","webpack:///src/views/SettingsViewes/Cameras.vue","webpack:///./src/views/SettingsViewes/Cameras.vue?2252","webpack:///./src/views/SettingsViewes/Cameras.vue","webpack:///./src/components/cv-number-input.vue?a59e","webpack:///src/components/cv-number-input.vue","webpack:///./src/components/cv-number-input.vue?616c","webpack:///./src/components/cv-number-input.vue"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","cameraList","model","value","callback","$$v","currentCameraIndex","expression","resolutionList","cameraSettings","$set","staticStyle","on","sendCameraSettings","_v","staticRenderFns","name","components","CVselect","CVnumberinput","methods","handleInput","computed","$store","state","commit","component","VBtn","_s","staticClass","localValue","VCol","VRow","VTextField"],"mappings":"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","file":"js/chunk-1a7066d8.1b23c0c0.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('CVselect',{attrs:{\"name\":\"Camera\",\"list\":_vm.cameraList},model:{value:(_vm.currentCameraIndex),callback:function ($$v) {_vm.currentCameraIndex=$$v},expression:\"currentCameraIndex\"}}),_c('CVselect',{attrs:{\"name\":\"Resulotion\",\"list\":_vm.resolutionList},model:{value:(_vm.cameraSettings.resolution),callback:function ($$v) {_vm.$set(_vm.cameraSettings, \"resolution\", $$v)},expression:\"cameraSettings.resolution\"}}),_c('CVselect',{attrs:{\"name\":\"Stream Resulotion\",\"list\":['1:1','1:2','1:4','1:6']},model:{value:(_vm.cameraSettings.streamDivisor),callback:function ($$v) {_vm.$set(_vm.cameraSettings, \"streamDivisor\", $$v)},expression:\"cameraSettings.streamDivisor\"}}),_c('CVnumberinput',{attrs:{\"name\":\"Diagonal FOV\"},model:{value:(_vm.cameraSettings.fov),callback:function ($$v) {_vm.$set(_vm.cameraSettings, \"fov\", $$v)},expression:\"cameraSettings.fov\"}}),_c('v-btn',{staticStyle:{\"margin-top\":\"10px\"},attrs:{\"small\":\"\",\"color\":\"#4baf62\"},on:{\"click\":_vm.sendCameraSettings}},[_vm._v(\"Save Camera Settings\")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/vuetify-loader/lib/loader.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Cameras.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/vuetify-loader/lib/loader.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Cameras.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Cameras.vue?vue&type=template&id=04c1992d&scoped=true&\"\nimport script from \"./Cameras.vue?vue&type=script&lang=js&\"\nexport * from \"./Cameras.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"04c1992d\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\ninstallComponents(component, {VBtn})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-row',{attrs:{\"dense\":\"\",\"align\":\"center\"}},[_c('v-col',{attrs:{\"cols\":2}},[_c('span',[_vm._v(_vm._s(_vm.name))])]),_c('v-col',[_c('v-text-field',{staticClass:\"mt-0 pt-0\",staticStyle:{\"width\":\"70px\"},attrs:{\"dark\":\"\",\"hide-details\":\"\",\"single-line\":\"\",\"type\":\"number\"},model:{value:(_vm.localValue),callback:function ($$v) {_vm.localValue=$$v},expression:\"localValue\"}})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./cv-number-input.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./cv-number-input.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./cv-number-input.vue?vue&type=template&id=10e05c36&scoped=true&\"\nimport script from \"./cv-number-input.vue?vue&type=script&lang=js&\"\nexport * from \"./cv-number-input.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"10e05c36\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VCol,VRow,VTextField})\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///./src/views/SettingsViewes/Cameras.vue?f2b2","webpack:///src/views/SettingsViewes/Cameras.vue","webpack:///./src/views/SettingsViewes/Cameras.vue?2252","webpack:///./src/views/SettingsViewes/Cameras.vue","webpack:///./src/components/cv-number-input.vue?5228","webpack:///src/components/cv-number-input.vue","webpack:///./src/components/cv-number-input.vue?616c","webpack:///./src/components/cv-number-input.vue"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","cameraList","model","value","callback","$$v","currentCameraIndex","expression","resolutionList","cameraSettings","$set","staticStyle","on","sendCameraSettings","_v","staticRenderFns","name","components","CVselect","CVnumberinput","methods","handleInput","computed","$store","state","commit","component","VBtn","_s","staticClass","localValue","VCol","VRow","VTextField"],"mappings":"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","file":"js/chunk-1a7066d8.62f1ea08.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('CVselect',{attrs:{\"name\":\"Camera\",\"list\":_vm.cameraList},model:{value:(_vm.currentCameraIndex),callback:function ($$v) {_vm.currentCameraIndex=$$v},expression:\"currentCameraIndex\"}}),_c('CVselect',{attrs:{\"name\":\"Resulotion\",\"list\":_vm.resolutionList},model:{value:(_vm.cameraSettings.resolution),callback:function ($$v) {_vm.$set(_vm.cameraSettings, \"resolution\", $$v)},expression:\"cameraSettings.resolution\"}}),_c('CVselect',{attrs:{\"name\":\"Stream Resulotion\",\"list\":['1:1','1:2','1:4','1:6']},model:{value:(_vm.cameraSettings.streamDivisor),callback:function ($$v) {_vm.$set(_vm.cameraSettings, \"streamDivisor\", $$v)},expression:\"cameraSettings.streamDivisor\"}}),_c('CVnumberinput',{attrs:{\"name\":\"Diagonal FOV\"},model:{value:(_vm.cameraSettings.fov),callback:function ($$v) {_vm.$set(_vm.cameraSettings, \"fov\", $$v)},expression:\"cameraSettings.fov\"}}),_c('v-btn',{staticStyle:{\"margin-top\":\"10px\"},attrs:{\"small\":\"\",\"color\":\"#4baf62\"},on:{\"click\":_vm.sendCameraSettings}},[_vm._v(\"Save Camera Settings\")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/vuetify-loader/lib/loader.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Cameras.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/vuetify-loader/lib/loader.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Cameras.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Cameras.vue?vue&type=template&id=04c1992d&scoped=true&\"\nimport script from \"./Cameras.vue?vue&type=script&lang=js&\"\nexport * from \"./Cameras.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"04c1992d\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\ninstallComponents(component, {VBtn})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-row',{attrs:{\"dense\":\"\",\"align\":\"center\"}},[_c('v-col',{attrs:{\"cols\":2}},[_c('span',[_vm._v(_vm._s(_vm.name))])]),_c('v-col',[_c('v-text-field',{staticClass:\"mt-0 pt-0\",staticStyle:{\"width\":\"70px\"},attrs:{\"dark\":\"\",\"hide-details\":\"\",\"single-line\":\"\",\"type\":\"number\"},model:{value:(_vm.localValue),callback:function ($$v) {_vm.localValue=$$v},expression:\"localValue\"}})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./cv-number-input.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/vuetify-loader/lib/loader.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./cv-number-input.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./cv-number-input.vue?vue&type=template&id=10e05c36&scoped=true&\"\nimport script from \"./cv-number-input.vue?vue&type=script&lang=js&\"\nexport * from \"./cv-number-input.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"10e05c36\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VCol,VRow,VTextField})\n"],"sourceRoot":""} \ No newline at end of file diff --git a/Main/src/main/resources/web/js/chunk-234aed0c.fbf7ad5e.js b/Main/src/main/resources/web/js/chunk-234aed0c.be70e2b2.js similarity index 99% rename from Main/src/main/resources/web/js/chunk-234aed0c.fbf7ad5e.js rename to Main/src/main/resources/web/js/chunk-234aed0c.be70e2b2.js index eb36e7283..cbbf65abd 100644 --- a/Main/src/main/resources/web/js/chunk-234aed0c.fbf7ad5e.js +++ b/Main/src/main/resources/web/js/chunk-234aed0c.be70e2b2.js @@ -1,2 +1,2 @@ (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-234aed0c"],{"0bc6":function(t,e,i){},"16b7":function(t,e,i){"use strict";var s=i("2b0e");e["a"]=s["a"].extend().extend({name:"delayable",props:{openDelay:{type:[Number,String],default:0},closeDelay:{type:[Number,String],default:0}},data:()=>({openTimeout:void 0,closeTimeout:void 0}),methods:{clearDelay(){clearTimeout(this.openTimeout),clearTimeout(this.closeTimeout)},runDelay(t,e){this.clearDelay();const i=parseInt(this[`${t}Delay`],10);this[`${t}Timeout`]=setTimeout(e||(()=>{this.isActive={open:!0,close:!1}[t]}),i)}}})},1800:function(t,e,i){"use strict";var s=i("2b0e");e["a"]=s["a"].extend({name:"v-list-item-action",functional:!0,render(t,{data:e,children:i=[]}){e.staticClass=e.staticClass?`v-list-item__action ${e.staticClass}`:"v-list-item__action";const s=i.filter(t=>{return!1===t.isComment&&" "!==t.text});return s.length>1&&(e.staticClass+=" v-list-item__action--stack"),t("div",e,i)}})},"21be":function(t,e,i){"use strict";var s=i("2b0e"),n=i("80d2");e["a"]=s["a"].extend().extend({name:"stackable",data(){return{stackElement:null,stackExclude:null,stackMinZIndex:0,isActive:!1}},computed:{activeZIndex(){if("undefined"===typeof window)return 0;const t=this.stackElement||this.$refs.content,e=this.isActive?this.getMaxZIndex(this.stackExclude||[t])+2:Object(n["q"])(t);return null==e?e:parseInt(e)}},methods:{getMaxZIndex(t=[]){const e=this.$el,i=[this.stackMinZIndex,Object(n["q"])(e)],s=[...document.getElementsByClassName("v-menu__content--active"),...document.getElementsByClassName("v-dialog__content--active")];for(let a=0;a{return["string","object"].includes(typeof t)}},disabled:Boolean,internalActivator:Boolean,openOnHover:Boolean},data:()=>({activatorElement:null,activatorNode:[],events:["click","mouseenter","mouseleave"],listeners:{}}),watch:{activator:"resetActivator",activatorElement(t){t&&this.addActivatorEvents()},openOnHover:"resetActivator"},mounted(){const t=Object(o["p"])(this,"activator",!0);t&&["v-slot","normal"].includes(t)&&Object(l["b"])('The activator slot must be bound, try \'