diff --git a/.gitignore b/.gitignore index e1a08cb49..badf4ec29 100644 --- a/.gitignore +++ b/.gitignore @@ -111,3 +111,4 @@ Main/target New client/chameleon-client/node_modules/ Main/dependency-reduced-pom.xml Main/src/main/java/META-INF +*.prefs diff --git a/Main/.gitignore b/Main/.gitignore new file mode 100644 index 000000000..31636b185 --- /dev/null +++ b/Main/.gitignore @@ -0,0 +1,5 @@ +bin/* +.settings/* +.project +.classpath +*.prefs \ No newline at end of file diff --git a/Main/chameleon-vision.iml b/Main/chameleon-vision.iml index d7ed36ac4..7ef49e681 100644 --- a/Main/chameleon-vision.iml +++ b/Main/chameleon-vision.iml @@ -18,6 +18,25 @@ + + + + + + + + + + + + + + + + + + + @@ -70,4 +89,4 @@ - + \ No newline at end of file diff --git a/Main/src/main/java/com/chameleonvision/vision/VisionManager.java b/Main/src/main/java/com/chameleonvision/vision/VisionManager.java index c6d69d194..b74708265 100644 --- a/Main/src/main/java/com/chameleonvision/vision/VisionManager.java +++ b/Main/src/main/java/com/chameleonvision/vision/VisionManager.java @@ -7,7 +7,6 @@ import com.chameleonvision.util.Platform; import com.chameleonvision.vision.camera.CameraProcess; import com.chameleonvision.vision.camera.USBCameraProcess; import com.chameleonvision.vision.pipeline.CVPipelineSettings; -import com.chameleonvision.web.ServerHandler; import edu.wpi.cscore.UsbCamera; import edu.wpi.cscore.UsbCameraInfo; import org.opencv.videoio.VideoCapture; @@ -20,9 +19,9 @@ public class VisionManager { private VisionManager() { } - private static final LinkedHashMap UsbCameraInfosByCameraName = new LinkedHashMap<>(); - private static final LinkedList LoadedCameraConfigs = new LinkedList<>(); - private static final LinkedList VisionProcesses = new LinkedList<>(); + private static final LinkedHashMap usbCameraInfosByCameraName = new LinkedHashMap<>(); + private static final LinkedList loadedCameraConfigs = new LinkedList<>(); + private static final LinkedList visionProcesses = new LinkedList<>(); private static class VisionProcessManageable { public final int index; @@ -45,22 +44,22 @@ public class VisionManager { if (cap.isOpened()) { cap.release(); String name = info.name; - while (UsbCameraInfosByCameraName.containsKey(name)) { + while (usbCameraInfosByCameraName.containsKey(name)) { suffix++; name = String.format("%s (%d)", name, suffix); } - UsbCameraInfosByCameraName.put(name, info); + usbCameraInfosByCameraName.put(name, info); } } - if (UsbCameraInfosByCameraName.isEmpty()) { + if (usbCameraInfosByCameraName.isEmpty()) { return false; } // load the config List preliminaryConfigs = new ArrayList<>(); - UsbCameraInfosByCameraName.values().forEach((cameraInfo) -> { + usbCameraInfosByCameraName.values().forEach((cameraInfo) -> { String truePath; if (Platform.CurrentPlatform.isWindows()) { @@ -72,7 +71,7 @@ public class VisionManager { preliminaryConfigs.add(new CameraConfig(truePath, cameraInfo.name)); }); - LoadedCameraConfigs.addAll(ConfigManager.initializeCameraConfig(preliminaryConfigs)); + loadedCameraConfigs.addAll(ConfigManager.initializeCameraConfig(preliminaryConfigs)); // TODO: (HIGH) Load pipelines from json // UsbCameraInfosByCameraName.forEach((cameraName, cameraInfo) -> { @@ -85,18 +84,18 @@ public class VisionManager { } public static boolean initializeProcesses() { - for (int i = 0; i < LoadedCameraConfigs.size(); i++) { - CameraConfig config = LoadedCameraConfigs.get(i); + for (int i = 0; i < loadedCameraConfigs.size(); i++) { + CameraConfig config = loadedCameraConfigs.get(i); CameraProcess camera = new USBCameraProcess(config); VisionProcess process = new VisionProcess(camera, config.name); - VisionProcesses.add(new VisionProcessManageable(i, config.name, process)); + visionProcesses.add(new VisionProcessManageable(i, config.name, process)); } currentUIVisionProcess = getVisionProcessByIndex(0); return true; } public static void startProcesses() { - VisionProcesses.forEach((vpm) -> { + visionProcesses.forEach((vpm) -> { vpm.visionProcess.start(); }); } @@ -106,7 +105,7 @@ public class VisionManager { } public static void setCurrentProcessByIndex(int processIndex) { - if (processIndex > VisionProcesses.size() - 1) { + if (processIndex > visionProcesses.size() - 1) { return; } @@ -114,16 +113,16 @@ public class VisionManager { } public static VisionProcess getVisionProcessByIndex(int processIndex) { - if (processIndex > VisionProcesses.size() - 1) { + if (processIndex > visionProcesses.size() - 1) { return null; } - VisionProcessManageable vpm = VisionProcesses.stream().filter(manageable -> manageable.index == processIndex).findFirst().orElse(null); + VisionProcessManageable vpm = visionProcesses.stream().filter(manageable -> manageable.index == processIndex).findFirst().orElse(null); return vpm != null ? vpm.visionProcess : null; } public static List getAllCameraNicknames() { - return VisionProcesses.stream().map(vpm -> vpm.visionProcess.getCamera() + return visionProcesses.stream().map(vpm -> vpm.visionProcess.getCamera() .getProperties().getNickname()).collect(Collectors.toList()); } @@ -132,7 +131,7 @@ public class VisionManager { } public static void saveCameras() { - VisionProcesses.forEach((vpm) -> { + visionProcesses.forEach((vpm) -> { VisionProcess process = vpm.visionProcess; String cameraName = process.getCamera().getProperties().name; List pipelines = process.getPipelines().stream().map(cvPipeline -> cvPipeline.settings).collect(Collectors.toList()); @@ -153,7 +152,7 @@ public class VisionManager { } public static int getCurrentUIVisionProcessIndex() { - VisionProcessManageable vpm = VisionProcesses.stream().filter(v -> v.visionProcess == currentUIVisionProcess).findFirst().orElse(null); + VisionProcessManageable vpm = visionProcesses.stream().filter(v -> v.visionProcess == currentUIVisionProcess).findFirst().orElse(null); return vpm != null ? vpm.index : -1; } } diff --git a/Main/src/main/java/com/chameleonvision/web/ServerHandler.java b/Main/src/main/java/com/chameleonvision/web/ServerHandler.java index 1160f9669..e453689c3 100644 --- a/Main/src/main/java/com/chameleonvision/web/ServerHandler.java +++ b/Main/src/main/java/com/chameleonvision/web/ServerHandler.java @@ -269,6 +269,19 @@ public class ServerHandler { return tmp; } + private static Map allFieldsToMap(Object obj) { + Map map = new HashMap<>(); + try { + Field[] fields = obj.getClass().getFields(); + for (Field field : fields) { + map.put(field.getName(), field.get(obj)); + } + } catch (IllegalAccessException e) { + System.err.println("Illegal Access error:" + Arrays.toString(e.getStackTrace())); + } + return map; + } + public static void sendFullSettings() { //General settings Map fullSettings = new HashMap<>(); @@ -278,6 +291,8 @@ public class ServerHandler { CVPipeline currentPipeline = currentProcess.getCurrentPipeline(); try { + fullSettings.putAll(allFieldsToMap(ConfigManager.settings)); + fullSettings.putAll(allFieldsToMap(currentPipeline)); fullSettings.put("settings", getOrdinalSettings()); fullSettings.put("cameraSettings", getOrdinalCameraSettings()); fullSettings.put("cameraList", VisionManager.getAllCameraNicknames()); @@ -286,6 +301,7 @@ public class ServerHandler { // TODO (HIGH) all of these settings! fullSettings.put("pipelineList", VisionManager.getCurrentCameraPipelineNicknames()); fullSettings.put("resolutionList", VisionManager.getCurrentCameraResolutionList()); + fullSettings.put("FOV", currentCamera.getProperties().FOV); fullSettings.put("port", currentProcess.cameraStreamer.getStreamPort()); fullSettings.put("currentPipelineIndex", VisionManager.getCurrentUIVisionProcess().getCurrentPipelineIndex()); fullSettings.put("currentCameraIndex", VisionManager.getCurrentUIVisionProcessIndex());