diff --git a/Main/src/main/java/com/chameleonvision/config/CameraConfig.java b/Main/src/main/java/com/chameleonvision/config/CameraConfig.java index b416eb65d..f002223f7 100644 --- a/Main/src/main/java/com/chameleonvision/config/CameraConfig.java +++ b/Main/src/main/java/com/chameleonvision/config/CameraConfig.java @@ -1,37 +1,167 @@ package com.chameleonvision.config; -import com.chameleonvision.vision.camera.USBCameraCapture; -import com.chameleonvision.vision.camera.USBCameraProperties; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.chameleonvision.util.JacksonHelper; +import com.chameleonvision.vision.pipeline.CVPipelineSettings; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; public class CameraConfig { - public final double fov; - public final String path; - public final String name; - public final String nickname; - @JsonCreator - public CameraConfig( - @JsonProperty("fov") double fov, - @JsonProperty("path") String path, - @JsonProperty("name") String name, - @JsonProperty("nickname") String nickname) { - this.fov = fov; - this.path = path; - this.name = name; - this.nickname = nickname; + private static final Path camerasConfigFolderPath = Paths.get(ConfigManager.SettingsPath.toString(), "cameras"); + + private final String cameraConfigName; + private final CameraJsonConfig preliminaryConfig; + + CameraConfig(CameraJsonConfig config) { + preliminaryConfig = config; + cameraConfigName = preliminaryConfig.name.replace(' ', '_'); } - public CameraConfig(String path, String name) { - this.fov = USBCameraProperties.DEFAULT_FOV; - this.path = path; - this.name = name; - this.nickname = name; + public CameraJsonConfig load() { + checkFolder(); + checkConfig(); + checkPipelines(); + checkDriverMode(); + + // todo: add pipelines and drivermode loads + return loadConfig(); } - public static CameraConfig fromUSBCameraProcess(USBCameraCapture process) { - USBCameraProperties camProps = process.getProperties(); - return new CameraConfig(camProps.FOV, camProps.name, camProps.path, camProps.getNickname()); + private CameraJsonConfig loadConfig() { + CameraJsonConfig config = preliminaryConfig; + try { + config = JacksonHelper.deserializer(getConfigPath(), CameraJsonConfig.class); + } catch (IOException e) { + System.err.printf("Failed to load camera config: %s - using default.\n", getConfigPath().toString()); + } + return config; + } + + List loadPipelines() { + List pipelines = new ArrayList<>(); + try { + var pipelineArray = JacksonHelper.deserializer(getPipelinesPath(), CVPipelineSettings[].class); + if (pipelineArray != null) { + pipelines = Arrays.asList(pipelineArray); + } + } catch (IOException e) { + System.err.println("Failed to load camera pipelines: " + getPipelinesPath().toString()); + } + return pipelines; + } + + CVPipelineSettings loadDriverMode() { + CVPipelineSettings driverMode = new CVPipelineSettings(); + driverMode.nickname = "DRIVERMODE"; + try { + driverMode = JacksonHelper.deserializer(getDriverModePath(), CVPipelineSettings.class); + } catch (IOException e) { + System.err.println("Failed to load camera drivermode: " + getDriverModePath().toString()); + } + return driverMode; + } + + void saveConfig(CameraJsonConfig config) { + try { + JacksonHelper.serializer(getConfigPath(), config); + } catch (IOException e) { + System.err.println("Failed to save camera config file: " + getConfigPath().toString()); + } + } + + void savePipelines(List pipelines) { + try { + JacksonHelper.serializer(getPipelinesPath(), pipelines); + } catch (IOException e) { + System.err.println("Failed to save camera pipelines file: " + getConfigPath().toString()); + } + } + + void saveDriverMode(CVPipelineSettings driverMode) { + try { + JacksonHelper.serializer(getDriverModePath(), driverMode); + } catch (IOException e) { + System.err.println("Failed to save camera drivermode file: " + getDriverModePath().toString()); + } + } + + private void checkFolder() { + if (!folderExists()) { + try { + Files.createDirectory(getFolderPath()); + } catch (IOException e) { + System.err.println("Failed to create camera config folder: " + getFolderPath().toString()); + } + } + } + + private void checkConfig() { + if (!configExists()) { + try { + JacksonHelper.serializer(getConfigPath(), preliminaryConfig); + } catch (IOException e) { + System.err.println("Failed to create camera config file: " + getConfigPath().toString()); + } + } + } + + private void checkPipelines() { + if (!pipelinesExists()) { + try { + Files.createFile(getPipelinesPath()); + } catch (IOException e) { + System.err.println("Failed to create camera pipelines file: " + getPipelinesPath().toString()); + } + } + } + + private void checkDriverMode() { + if (!driverModeExists()) { + try { + CVPipelineSettings newDriverModeSettings = new CVPipelineSettings(); + newDriverModeSettings.nickname = "DRIVERMODE"; + JacksonHelper.serializer(getDriverModePath(), newDriverModeSettings); + } catch (IOException e) { + System.err.println("Failed to create camera drivermode file: " + getDriverModePath().toString()); + } + } + } + + private Path getFolderPath() { + return Paths.get(camerasConfigFolderPath.toString(), cameraConfigName); + } + + private Path getConfigPath() { + return Paths.get(getFolderPath().toString(), "camera.json"); + } + + private Path getPipelinesPath() { + return Paths.get(getFolderPath().toString(), "pipelines.json"); + } + + private Path getDriverModePath() { + return Paths.get(getFolderPath().toString(), "drivermode.json"); + } + + private boolean folderExists() { + return Files.exists(getFolderPath()); + } + + private boolean configExists() { + return folderExists() && Files.exists(getConfigPath()); + } + + private boolean pipelinesExists() { + return folderExists() && Files.exists(getPipelinesPath()); + } + + private boolean driverModeExists() { + return folderExists() && Files.exists(getDriverModePath()); } } diff --git a/Main/src/main/java/com/chameleonvision/config/CameraJsonConfig.java b/Main/src/main/java/com/chameleonvision/config/CameraJsonConfig.java new file mode 100644 index 000000000..ebd9e6b56 --- /dev/null +++ b/Main/src/main/java/com/chameleonvision/config/CameraJsonConfig.java @@ -0,0 +1,37 @@ +package com.chameleonvision.config; + +import com.chameleonvision.vision.camera.USBCameraCapture; +import com.chameleonvision.vision.camera.USBCameraProperties; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; + +public class CameraJsonConfig { + public final double fov; + public final String path; + public final String name; + public final String nickname; + + @JsonCreator + public CameraJsonConfig( + @JsonProperty("fov") double fov, + @JsonProperty("path") String path, + @JsonProperty("name") String name, + @JsonProperty("nickname") String nickname) { + this.fov = fov; + this.path = path; + this.name = name; + this.nickname = nickname; + } + + public CameraJsonConfig(String path, String name) { + this.fov = USBCameraProperties.DEFAULT_FOV; + this.path = path; + this.name = name; + this.nickname = name; + } + + public static CameraJsonConfig fromUSBCameraProcess(USBCameraCapture process) { + USBCameraProperties camProps = process.getProperties(); + return new CameraJsonConfig(camProps.FOV, camProps.name, camProps.path, camProps.getNickname()); + } +} diff --git a/Main/src/main/java/com/chameleonvision/config/ConfigManager.java b/Main/src/main/java/com/chameleonvision/config/ConfigManager.java index 68212fc78..9c8329911 100644 --- a/Main/src/main/java/com/chameleonvision/config/ConfigManager.java +++ b/Main/src/main/java/com/chameleonvision/config/ConfigManager.java @@ -1,7 +1,7 @@ package com.chameleonvision.config; import com.chameleonvision.util.ProgramDirectoryUtilities; -import com.chameleonvision.util.FileHelper; +import com.chameleonvision.util.JacksonHelper; import com.chameleonvision.vision.pipeline.CVPipelineSettings; import java.io.File; @@ -10,15 +10,17 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; public class ConfigManager { private ConfigManager() {} - private static final Path SettingsPath = Paths.get(ProgramDirectoryUtilities.getProgramDirectory(), "settings"); - private static final Path cameraConfigPath = Paths.get(SettingsPath.toString(), "cameras"); + static final Path SettingsPath = Paths.get(ProgramDirectoryUtilities.getProgramDirectory(), "settings"); private static final Path settingsFilePath = Paths.get(SettingsPath.toString(), "settings.json"); + private static final LinkedHashMap cameraConfigs = new LinkedHashMap<>(); + public static GeneralSettings settings = new GeneralSettings(); private static boolean settingsFolderExists() { return Files.exists(SettingsPath); } @@ -38,13 +40,13 @@ public class ConfigManager { boolean settingsFileEmpty = settingsFileExists() && new File(settingsFilePath.toString()).length() == 0; if (settingsFileEmpty || !settingsFileExists()) { try { - FileHelper.Serializer(settingsFilePath, settings); + JacksonHelper.serializer(settingsFilePath, settings); } catch (IOException e) { e.printStackTrace(); } } else { try { - settings = FileHelper.DeSerializer(settingsFilePath, GeneralSettings.class); + settings = JacksonHelper.deserializer(settingsFilePath, GeneralSettings.class); } catch (IOException e) { System.err.println("Failed to load settings.json, using defaults."); } @@ -52,13 +54,14 @@ public class ConfigManager { } public static void initializeSettings() { + System.out.println("Settings folder: " + SettingsPath.toString()); checkSettingsFolder(); checkSettingsFile(); } private static void saveSettingsFile() { try { - FileHelper.Serializer(settingsFilePath, settings); + JacksonHelper.serializer(settingsFilePath, settings); } catch (IOException e) { System.err.println("Failed to save settings.json!"); } @@ -69,97 +72,36 @@ public class ConfigManager { saveSettingsFile(); } - private static Path getCameraSpecificFolderPath(String cameraName) { - return Paths.get(cameraConfigPath.toString(), cameraName); - } - - private static Path getCameraSpecificConfigPath(String cameraName) { - return Paths.get(getCameraSpecificFolderPath(cameraName).toString(), "camera.json"); - } - - private static Path getCameraSpecificPipelinesPath(String cameraName) { - return Paths.get(getCameraSpecificFolderPath(cameraName).toString(), "pipelines.json"); - } - - private static Path getCameraSpecificDriverModePath(String cameraName) { - return Paths.get(getCameraSpecificFolderPath(cameraName).toString(), "drivermode.json"); - } - - private static boolean cameraFolderExists(String cameraName) { - return Files.exists(getCameraSpecificFolderPath(cameraName)); - } - - private static boolean cameraConfigExists(String cameraName) { - return cameraFolderExists(cameraName) && Files.exists(getCameraSpecificConfigPath(cameraName)); - } - - private static boolean cameraPipelinesExists(String cameraName) { - return cameraFolderExists(cameraName) && Files.exists(getCameraSpecificPipelinesPath(cameraName)); - } - - private static boolean cameraDriverModeExists(String cameraName) { - return cameraFolderExists(cameraName) && Files.exists(getCameraSpecificDriverModePath(cameraName)); - } - // TODO: (HIGH) cleanup! - public static List initializeCameraConfig(List preliminaryConfigs) { - var configList = new ArrayList(); + public static List initializeCameras(List preliminaryConfigs) { + List configList = new ArrayList<>(); checkSettingsFolder(); // loop over all the camera names and try to create settings folders for it - preliminaryConfigs.forEach((preliminaryConfig) -> { - String cameraName = preliminaryConfig.name; + for (CameraJsonConfig preliminaryConfig : preliminaryConfigs) { + CameraConfig cameraConfiguration = new CameraConfig(preliminaryConfig); + cameraConfigs.put(preliminaryConfig.name, cameraConfiguration); - final Path cameraConfigFolderPath = getCameraSpecificFolderPath(cameraName); - final Path cameraConfigPath = getCameraSpecificConfigPath(cameraName); + CameraJsonConfig camJsonConfig = cameraConfiguration.load(); + List pipelines = cameraConfiguration.loadPipelines(); + CVPipelineSettings driverMode = cameraConfiguration.loadDriverMode(); - // check if the config folder exists, and if not, create it - if (!cameraFolderExists(cameraName)) { - try { - Files.createDirectory(cameraConfigFolderPath); - } catch (IOException e) { - System.err.println("Failed to create camera config folder!"); - } - } else { - CameraConfig config = preliminaryConfig; - - // check if the config exists, and if not, create it - if(!cameraConfigExists(cameraName)) { - try { - FileHelper.Serializer(cameraConfigPath, preliminaryConfig); - } catch (IOException e) { - e.printStackTrace(); - } - } else { - try { - config = FileHelper.DeSerializer(cameraConfigPath, CameraConfig.class); - } catch (IOException e) { - e.printStackTrace(); - } - } - configList.add(config); - } - }); + configList.add(new FullCameraConfiguration(camJsonConfig, pipelines, driverMode)); + } return configList; } - public static void saveCameraPipelines(String cameraName, List pipelines) throws IOException { - Path cameraFolder = Paths.get(cameraConfigPath.toString(), cameraName); - Path filePath = Paths.get(cameraFolder.toString(), cameraName,"pipelines.json"); - FileHelper.CheckPath(cameraFolder); - FileHelper.Serializer(filePath, pipelines); + + public static void saveCameraConfig(String cameraName, CameraJsonConfig config) { + cameraConfigs.get(cameraName).saveConfig(config); } - public static void saveCameraDriverMode(String cameraName, CVPipelineSettings driverMode) throws IOException { - Path cameraFolder = Paths.get(cameraConfigPath.toString(), cameraName); - Path filePath = Paths.get(cameraFolder.toString(), cameraName,"driverMode.json"); - FileHelper.CheckPath(cameraFolder); - FileHelper.Serializer(filePath, driverMode); + + public static void saveCameraPipelines(String cameraName, List pipelines) { + cameraConfigs.get(cameraName).savePipelines(pipelines); } - public static void saveCameraConfig(String cameraName, CameraConfig config) throws IOException { - Path cameraFolder = Paths.get(cameraConfigPath.toString(), cameraName); - Path filePath = Paths.get(cameraFolder.toString(), cameraName,"driverMode.json"); - FileHelper.CheckPath(cameraFolder); - FileHelper.Serializer(filePath, config); + + public static void saveCameraDriverMode(String cameraName, CVPipelineSettings driverMode) { + cameraConfigs.get(cameraName).saveDriverMode(driverMode); } } diff --git a/Main/src/main/java/com/chameleonvision/config/FullCameraConfiguration.java b/Main/src/main/java/com/chameleonvision/config/FullCameraConfiguration.java new file mode 100644 index 000000000..208e007fd --- /dev/null +++ b/Main/src/main/java/com/chameleonvision/config/FullCameraConfiguration.java @@ -0,0 +1,18 @@ +package com.chameleonvision.config; + +import com.chameleonvision.vision.pipeline.CVPipelineSettings; + +import java.util.List; + +public class FullCameraConfiguration { + public final CameraJsonConfig cameraConfig; + public final List pipelines; + public final CVPipelineSettings drivermode; + + + public FullCameraConfiguration(CameraJsonConfig cameraConfig, List pipelines, CVPipelineSettings drivermode) { + this.cameraConfig = cameraConfig; + this.pipelines = pipelines; + this.drivermode = drivermode; + } +} diff --git a/Main/src/main/java/com/chameleonvision/util/FileHelper.java b/Main/src/main/java/com/chameleonvision/util/JacksonHelper.java similarity index 61% rename from Main/src/main/java/com/chameleonvision/util/FileHelper.java rename to Main/src/main/java/com/chameleonvision/util/JacksonHelper.java index cec221a36..68dfd437a 100644 --- a/Main/src/main/java/com/chameleonvision/util/FileHelper.java +++ b/Main/src/main/java/com/chameleonvision/util/JacksonHelper.java @@ -9,38 +9,21 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -public class FileHelper { - private FileHelper() {} // no construction, utility class +public class JacksonHelper { + private JacksonHelper() {} // no construction, utility class - public static void CheckPath(String path) { - if (path.equals("")) return; - Path realPath = Path.of(path); - CheckPath(realPath); - } - - public static void CheckPath(Path path) { - if (!Files.exists(path)) { - try { - Files.createDirectories(path); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - public static void Serializer(Path path, Object object) throws IOException { + public static void serializer(Path path, Object object) throws IOException { PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder().allowIfBaseType(Object.class).build(); ObjectMapper objectMapper = JsonMapper.builder().activateDefaultTyping(ptv, ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT).build(); objectMapper.writerWithDefaultPrettyPrinter().writeValue(new File(path.toString()), object); } - public static T DeSerializer(Path path, Class ref) throws IOException { + public static T deserializer(Path path, Class ref) throws IOException { PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder().allowIfBaseType(ref).build(); ObjectMapper objectMapper = JsonMapper.builder().activateDefaultTyping(ptv).build(); File jsonFile = new File(path.toString()); if (jsonFile.exists() && jsonFile.length() > 0) { - T readObject = objectMapper.readValue(jsonFile, ref); - return readObject; + return objectMapper.readValue(jsonFile, ref); } return null; } diff --git a/Main/src/main/java/com/chameleonvision/vision/VisionManager.java b/Main/src/main/java/com/chameleonvision/vision/VisionManager.java index b0b148796..628e3b38d 100644 --- a/Main/src/main/java/com/chameleonvision/vision/VisionManager.java +++ b/Main/src/main/java/com/chameleonvision/vision/VisionManager.java @@ -1,7 +1,8 @@ package com.chameleonvision.vision; -import com.chameleonvision.config.CameraConfig; +import com.chameleonvision.config.CameraJsonConfig; import com.chameleonvision.config.ConfigManager; +import com.chameleonvision.config.FullCameraConfiguration; import com.chameleonvision.util.Helpers; import com.chameleonvision.util.Platform; import com.chameleonvision.vision.camera.CameraCapture; @@ -20,7 +21,7 @@ public class VisionManager { } private static final LinkedHashMap usbCameraInfosByCameraName = new LinkedHashMap<>(); - private static final LinkedList loadedCameraConfigs = new LinkedList<>(); + private static final LinkedList loadedCameraConfigs = new LinkedList<>(); private static final LinkedList visionProcesses = new LinkedList<>(); private static class VisionProcessManageable { @@ -57,7 +58,7 @@ public class VisionManager { } // load the config - List preliminaryConfigs = new ArrayList<>(); + List preliminaryConfigs = new ArrayList<>(); usbCameraInfosByCameraName.values().forEach((cameraInfo) -> { String truePath; @@ -68,10 +69,10 @@ public class VisionManager { truePath = Arrays.stream(cameraInfo.otherPaths).filter(x -> x.contains("/dev/v4l/by-path")).findFirst().orElse(cameraInfo.path); } - preliminaryConfigs.add(new CameraConfig(truePath, cameraInfo.name)); + preliminaryConfigs.add(new CameraJsonConfig(truePath, cameraInfo.name)); }); - loadedCameraConfigs.addAll(ConfigManager.initializeCameraConfig(preliminaryConfigs)); + loadedCameraConfigs.addAll(ConfigManager.initializeCameras(preliminaryConfigs)); // TODO: (HIGH) Load pipelines from json // UsbCameraInfosByCameraName.forEach((cameraName, cameraInfo) -> { @@ -85,10 +86,15 @@ public class VisionManager { public static boolean initializeProcesses() { for (int i = 0; i < loadedCameraConfigs.size(); i++) { - CameraConfig config = loadedCameraConfigs.get(i); - CameraCapture camera = new USBCameraCapture(config); - VisionProcess process = new VisionProcess(camera, config.name); - visionProcesses.add(new VisionProcessManageable(i, config.name, process)); + FullCameraConfiguration config = loadedCameraConfigs.get(i); + + CameraJsonConfig cameraJsonConfig = config.cameraConfig; + + CameraCapture camera = new USBCameraCapture(cameraJsonConfig); + VisionProcess process = new VisionProcess(camera, cameraJsonConfig.name); + config.pipelines.forEach(process::addPipeline); + process.setDriverModeSettings(config.drivermode); + visionProcesses.add(new VisionProcessManageable(i, cameraJsonConfig.name, process)); } currentUIVisionProcess = getVisionProcessByIndex(0); return true; @@ -136,14 +142,10 @@ public class VisionManager { String cameraName = process.getCamera().getProperties().name; List pipelines = process.getPipelines().stream().map(cvPipeline -> cvPipeline.settings).collect(Collectors.toList()); CVPipelineSettings driverMode = process.getDriverModeSettings(); - CameraConfig config = CameraConfig.fromUSBCameraProcess((USBCameraCapture) process.getCamera()); - try { - ConfigManager.saveCameraPipelines(cameraName, pipelines); - ConfigManager.saveCameraDriverMode(cameraName, driverMode); - ConfigManager.saveCameraConfig(cameraName, config); - } catch (IOException e) { - e.printStackTrace(); - } + CameraJsonConfig config = CameraJsonConfig.fromUSBCameraProcess((USBCameraCapture) process.getCamera()); + ConfigManager.saveCameraPipelines(cameraName, pipelines); + ConfigManager.saveCameraDriverMode(cameraName, driverMode); + ConfigManager.saveCameraConfig(cameraName, config); }); } diff --git a/Main/src/main/java/com/chameleonvision/vision/VisionProcess.java b/Main/src/main/java/com/chameleonvision/vision/VisionProcess.java index 5e5d62552..f974221f8 100644 --- a/Main/src/main/java/com/chameleonvision/vision/VisionProcess.java +++ b/Main/src/main/java/com/chameleonvision/vision/VisionProcess.java @@ -17,6 +17,8 @@ import org.opencv.core.Mat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingDeque; public class VisionProcess { @@ -29,11 +31,12 @@ public class VisionProcess { private CVPipeline currentPipeline; private int currentPipelineIndex = 0; - private final CVPipelineSettings driverModeSettings = new CVPipelineSettings(); - private CVPipeline driverModePipeline = new DriverVisionPipeline(driverModeSettings); + private CVPipeline driverModePipeline = new DriverVisionPipeline(new CVPipelineSettings()); private volatile CVPipelineResult lastPipelineResult; + BlockingQueue streamFrameQueue = new LinkedBlockingDeque<>(1); + // network table stuff private final NetworkTable defaultTable; private NetworkTableEntry ntPipelineEntry; @@ -240,6 +243,12 @@ public class VisionProcess { pipelines.add(pipeline); } + public void addPipeline(CVPipelineSettings settings) { + if (settings instanceof CVPipeline2dSettings) { + pipelines.add(new CVPipeline2d((CVPipeline2dSettings) settings)); + } + } + public CameraCapture getCamera() { return cameraCapture; } @@ -248,6 +257,11 @@ public class VisionProcess { return (currentPipeline == driverModePipeline); } + public void setDriverModeSettings(CVPipelineSettings settings) { + + driverModePipeline.settings = settings; + } + public CVPipelineSettings getDriverModeSettings() { return driverModePipeline.settings; } @@ -285,6 +299,12 @@ public class VisionProcess { } } + try { + streamFrameQueue.add(lastPipelineResult.outputMat); + } catch (Exception e) { + System.out.println("Vision running faster than stream"); + } + var deltaTimeNanos = lastUpdateTimeNanos - System.nanoTime(); fpsAveragingBuffer.addFirst(1.0 / (deltaTimeNanos * 1E-09)); lastUpdateTimeNanos = System.nanoTime(); @@ -310,25 +330,13 @@ public class VisionProcess { private CameraStreamerRunnable(int cameraFPS, CameraStreamer streamer) { // add 2 FPS to allow for a bit of overhead - // TODO: (low) test the effect of this -// super(1000L/(cameraFPS + 2)); - super(10L); + super(1000L/(cameraFPS + 2)); this.streamer = streamer; } @Override protected void process() { -// System.out.println("running camera streamer"); -// Mat latestMat = lastPipelineResult.outputMat; //visionRunnable.result; -// if (latestMat != null && latestMat.cols() > 0) { -// latestMat.copyTo(streamBuffer); -// streamer.runStream(streamBuffer); -// streamBuffer.release(); -// if (toStreamMat != null && toStreamMat.cols() > 0) { -// } else { -// System.out.println("fuuuuck"); -// } -// } + } } } diff --git a/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraCapture.java b/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraCapture.java index ff031de59..d7912b428 100644 --- a/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraCapture.java +++ b/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraCapture.java @@ -1,6 +1,6 @@ package com.chameleonvision.vision.camera; -import com.chameleonvision.config.CameraConfig; +import com.chameleonvision.config.CameraJsonConfig; import edu.wpi.cscore.CvSink; import edu.wpi.cscore.UsbCamera; import edu.wpi.cscore.VideoException; @@ -15,7 +15,7 @@ public class USBCameraCapture implements CameraCapture { private Mat imageBuffer = new Mat(); private USBCameraProperties properties; - public USBCameraCapture(CameraConfig config) { + public USBCameraCapture(CameraJsonConfig config) { baseCamera = new UsbCamera(config.name, config.path); cvSink = CameraServer.getInstance().getVideo(baseCamera); properties = new USBCameraProperties(baseCamera, config); diff --git a/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraProperties.java b/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraProperties.java index 56fd9521c..d98e221ba 100644 --- a/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraProperties.java +++ b/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraProperties.java @@ -1,6 +1,6 @@ package com.chameleonvision.vision.camera; -import com.chameleonvision.config.CameraConfig; +import com.chameleonvision.config.CameraJsonConfig; import com.chameleonvision.util.Platform; import com.chameleonvision.vision.image.CaptureProperties; import edu.wpi.cscore.UsbCamera; @@ -40,7 +40,7 @@ public class USBCameraProperties extends CaptureProperties { private String nickname; public double FOV; - USBCameraProperties(UsbCamera baseCamera, CameraConfig config) { + USBCameraProperties(UsbCamera baseCamera, CameraJsonConfig config) { FOV = config.fov; name = config.name; path = config.path; diff --git a/Main/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline.java b/Main/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline.java index 9b27f65d2..52970d204 100644 --- a/Main/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline.java +++ b/Main/src/main/java/com/chameleonvision/vision/pipeline/CVPipeline.java @@ -10,7 +10,7 @@ import org.opencv.core.Mat; public abstract class CVPipeline { protected Mat outputMat = new Mat(); CameraCapture cameraCapture; - public final S settings; + public S settings; protected CVPipeline(S settings) { this.settings = settings; diff --git a/Main/src/main/java/com/chameleonvision/web/Server.java b/Main/src/main/java/com/chameleonvision/web/Server.java index bbb1c0461..7f8fa656f 100644 --- a/Main/src/main/java/com/chameleonvision/web/Server.java +++ b/Main/src/main/java/com/chameleonvision/web/Server.java @@ -10,7 +10,7 @@ public class Server { public static void main(int port) { handler = new ServerHandler(); - Javalin app = Javalin.create(javalinConfig -> javalinConfig.showJavalinBanner=false); + Javalin app = Javalin.create(javalinConfig -> javalinConfig.showJavalinBanner = false); app.config.addStaticFiles("web"); app.ws("/websocket", ws -> { ws.onConnect(ctx -> {