diff --git a/Main/chameleon-vision.iml b/Main/chameleon-vision.iml index d298ab873..d285b15a4 100644 --- a/Main/chameleon-vision.iml +++ b/Main/chameleon-vision.iml @@ -10,6 +10,23 @@ + + + + + + + + + + + + + + + + + @@ -40,25 +57,27 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Main/src/main/java/com/chameleonvision/vision/camera/CameraManager.java b/Main/src/main/java/com/chameleonvision/vision/camera/CameraManager.java index 891e0e6e6..ebbb08bef 100644 --- a/Main/src/main/java/com/chameleonvision/vision/camera/CameraManager.java +++ b/Main/src/main/java/com/chameleonvision/vision/camera/CameraManager.java @@ -16,8 +16,10 @@ import java.io.*; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; +import java.util.stream.Collectors; public class CameraManager { @@ -49,38 +51,38 @@ public class CameraManager { public static boolean initializeCameras() { if (AllUsbCameraInfosByName.size() == 0) return false; FileHelper.CheckPath(CamConfigPath); - for (var entry : AllUsbCameraInfosByName.entrySet()) { - var camPath = Paths.get(CamConfigPath.toString(), String.format("%s.json", entry.getKey())); + AllUsbCameraInfosByName.forEach((key, value) -> { + var camPath = Paths.get(CamConfigPath.toString(), String.format("%s.json", key)); File camJsonFile = new File(camPath.toString()); if (camJsonFile.exists() && camJsonFile.length() != 0) { try { Gson gson = new GsonBuilder().registerTypeAdapter(Camera.class, new CameraDeserializer()).create(); var camJsonFileReader = new FileReader(camPath.toString()); var gsonRead = gson.fromJson(camJsonFileReader, Camera.class); - AllCamerasByName.put(entry.getKey(), gsonRead); + AllCamerasByName.put(key, gsonRead); } catch (FileNotFoundException ex) { ex.printStackTrace(); } } else { - if (!addCamera(new Camera(entry.getKey()), entry.getKey())) { + if (!addCamera(new Camera(key), key)) { System.err.println("Failed to add camera! Already exists!"); } } - } + }); return true; } public static void initializeThreads(){ - for (var camSet : AllCamerasByName.entrySet()) { - VisionProcess visionProcess = new VisionProcess(camSet.getValue()); - AllVisionProcessesByName.put(camSet.getKey(),visionProcess); + AllCamerasByName.forEach((key, value) -> { + VisionProcess visionProcess = new VisionProcess(value); + AllVisionProcessesByName.put(key, visionProcess); new Thread(visionProcess).start(); - } + }); } private static boolean addCamera(Camera camera, String cameraName) { if (AllCamerasByName.containsKey(cameraName)) return false; - for (int i = 0; i < 10;i++){ + for (int i = 0; i < 10; i++){ camera.addPipeline(); // simple fix to create more pipelines for now } AllCamerasByName.put(cameraName, camera); @@ -118,11 +120,8 @@ public class CameraManager { public static List getResolutionList() throws CameraException { if (!SettingsManager.GeneralSettings.curr_camera.equals("")) { - List list = new ArrayList<>(); - for (var res : CameraManager.getCamera(SettingsManager.GeneralSettings.curr_camera).getAvailableVideoModes()) { - list.add(String.format("%s X %s at %s fps", res.width, res.height, res.fps)); - } - return list; + return Arrays.stream(CameraManager.getCamera(SettingsManager.GeneralSettings.curr_camera).getAvailableVideoModes()) + .map(res -> String.format("%s X %s at %s fps", res.width, res.height, res.fps)).collect(Collectors.toList()); } throw new CameraException(CameraException.CameraExceptionType.NO_CAMERA); } 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 47c7bbe1a..fb96c13b2 100644 --- a/Main/src/main/java/com/chameleonvision/vision/process/PipelineResult.java +++ b/Main/src/main/java/com/chameleonvision/vision/process/PipelineResult.java @@ -8,5 +8,6 @@ public class PipelineResult { 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 feae97ead..ebe8cc58b 100644 --- a/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java +++ b/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java @@ -46,17 +46,17 @@ public class VisionProcess implements Runnable { // 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("Valid"); + 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.setString("pipeline" + camera.getCurrentPipelineIndex()); + ntPipelineEntry.setNumber(camera.getCurrentPipelineIndex()); // camera settings cvProcess = new CVProcess(camera.getCamVals()); @@ -75,7 +75,7 @@ public class VisionProcess implements Runnable { } private void PipelineListener(EntryNotification entryNotification) { - var ntPipelineIndex = Integer.parseInt(entryNotification.value.getString().replace("pipeline", "")); + var ntPipelineIndex = (int) entryNotification.value.getDouble(); if (camera.getPipelines().containsKey(ntPipelineIndex)) { // camera.setEntryNotification.value.getString()); var pipeline = camera.getCurrentPipeline(); @@ -93,10 +93,9 @@ public class VisionProcess implements Runnable { pipeChange.put("curr_pipeline", ntPipelineIndex); ServerHandler.broadcastMessage(pipeChange); ServerHandler.sendFullSettings(); - } } else { - ntPipelineEntry.setString("pipeline" + camera.getCurrentPipelineIndex()); + ntPipelineEntry.setNumber(camera.getCurrentPipelineIndex()); } } @@ -115,6 +114,7 @@ public class VisionProcess implements Runnable { if (pipelineResult.IsValid) { ntYawEntry.setNumber(pipelineResult.Yaw); ntPitchEntry.setNumber(pipelineResult.Pitch); + ntDistanceEntry.setNumber(pipelineResult.Area); } ntTimeStampEntry.setNumber(TimeStamp); } @@ -161,6 +161,7 @@ public class VisionProcess implements Runnable { } 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); } } diff --git a/Main/src/main/java/com/chameleonvision/web/ServerHandler.java b/Main/src/main/java/com/chameleonvision/web/ServerHandler.java index 40c113c77..698f5bb45 100644 --- a/Main/src/main/java/com/chameleonvision/web/ServerHandler.java +++ b/Main/src/main/java/com/chameleonvision/web/ServerHandler.java @@ -99,12 +99,10 @@ public class ServerHandler { sendFullSettings(); break; case "curr_pipeline": - String newPipeline = value.toString(); - var pipelineNumber = Integer.parseInt(newPipeline.replace("pipeline", "")); + int newPipeline = (int) value; System.out.printf("Changing pipeline to %s\n", newPipeline); - CameraManager.setCurrentPipeline(pipelineNumber); - var Proccess = CameraManager.getCurrentCameraProcess(); - Proccess.ntPipelineEntry.setString("pipeline"+pipelineNumber); + CameraManager.setCurrentPipeline(newPipeline); + CameraManager.getCurrentCameraProcess().ntPipelineEntry.setNumber(newPipeline); broadcastMessage(allFieldsToMap(CameraManager.getCurrentPipeline())); break;