Fix pipeline renaming and saving, RotationMode UI fix

This commit is contained in:
Banks Troutman
2019-11-29 00:30:29 -05:00
parent 0b1e0e4701
commit 25613d2625
8 changed files with 56 additions and 33 deletions

View File

@@ -17,7 +17,7 @@ public class CameraConfig {
private final String cameraConfigName;
private final CameraJsonConfig preliminaryConfig;
private final PipelineConfig pipelineConfig;
public final PipelineConfig pipelineConfig;
CameraConfig(CameraJsonConfig config) {
preliminaryConfig = config;
@@ -31,7 +31,7 @@ public class CameraConfig {
checkDriverMode();
pipelineConfig.check();
return new FullCameraConfiguration(loadConfig(), pipelineConfig.load(), loadDriverMode());
return new FullCameraConfiguration(loadConfig(), pipelineConfig.load(), loadDriverMode(), this);
}
private CameraJsonConfig loadConfig() {

View File

@@ -8,10 +8,12 @@ public class FullCameraConfiguration {
public final CameraJsonConfig cameraConfig;
public final List<CVPipelineSettings> pipelines;
public final CVPipelineSettings drivermode;
public final CameraConfig fileConfig;
FullCameraConfiguration(CameraJsonConfig cameraConfig, List<CVPipelineSettings> pipelines, CVPipelineSettings drivermode) {
FullCameraConfiguration(CameraJsonConfig cameraConfig, List<CVPipelineSettings> pipelines, CVPipelineSettings drivermode, CameraConfig fileConfig) {
this.cameraConfig = cameraConfig;
this.pipelines = pipelines;
this.drivermode = drivermode;
this.fileConfig = fileConfig;
}
}

View File

@@ -64,7 +64,7 @@ public class PipelineConfig {
return Files.exists(getPipelinePath(setting));
}
private void save(CVPipelineSettings settings) {
public void save(CVPipelineSettings settings) {
var path = getPipelinePath(settings);

View File

@@ -1,5 +1,6 @@
package com.chameleonvision.vision;
import com.chameleonvision.config.CameraConfig;
import com.chameleonvision.config.CameraJsonConfig;
import com.chameleonvision.config.ConfigManager;
import com.chameleonvision.config.FullCameraConfiguration;
@@ -7,13 +8,11 @@ import com.chameleonvision.util.Helpers;
import com.chameleonvision.util.Platform;
import com.chameleonvision.vision.camera.CameraCapture;
import com.chameleonvision.vision.camera.USBCameraCapture;
import com.chameleonvision.vision.pipeline.CVPipeline;
import com.chameleonvision.vision.pipeline.CVPipelineSettings;
import edu.wpi.cscore.UsbCamera;
import edu.wpi.cscore.UsbCameraInfo;
import org.opencv.videoio.VideoCapture;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
@@ -75,13 +74,6 @@ public class VisionManager {
loadedCameraConfigs.addAll(ConfigManager.initializeCameras(preliminaryConfigs));
// TODO: (HIGH) Load pipelines from json
// UsbCameraInfosByCameraName.forEach((cameraName, cameraInfo) -> {
// Path cameraConfigFolder = Paths.get(CamConfigPath.toString(), String.format("%s\\", cameraName));
// Path cameraConfigPath = Paths.get(cameraConfigFolder.toString(), String.format("%s.json", cameraName));
// Path cameraPipelinesPath = Paths.get(cameraConfigFolder.toString(), "pipelines.json");
// Path cameraDrivermodePath = Paths.get(cameraConfigFolder.toString(), "drivermode.json");
return true;
}
@@ -102,15 +94,23 @@ public class VisionManager {
}
public static void startProcesses() {
visionProcesses.forEach((vpm) -> {
vpm.visionProcess.start();
});
visionProcesses.forEach((vpm) -> vpm.visionProcess.start());
}
public static VisionProcess getCurrentUIVisionProcess() {
return currentUIVisionProcess;
}
private static CameraConfig getCameraConfig(VisionProcess process) {
String cameraName = process.getCamera().getProperties().name;
return Objects.requireNonNull(loadedCameraConfigs.stream().filter(x -> x.cameraConfig.name.equals(cameraName)).findFirst().orElse(null)).fileConfig;
}
public static void addPipelineToCamera(CVPipelineSettings newPipeline, VisionProcess process) {
getCameraConfig(process).pipelineConfig.save(newPipeline);
process.addPipeline(newPipeline);
}
public static void setCurrentProcessByIndex(int processIndex) {
if (processIndex > visionProcesses.size() - 1) {
return;

View File

@@ -6,7 +6,6 @@ import com.chameleonvision.vision.VisionProcess;
import com.chameleonvision.vision.camera.CameraCapture;
import com.chameleonvision.vision.enums.ImageRotationMode;
import com.chameleonvision.vision.pipeline.CVPipeline;
import com.chameleonvision.vision.pipeline.CVPipeline2dSettings;
import com.chameleonvision.vision.pipeline.CVPipelineSettings;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
@@ -16,7 +15,6 @@ import io.javalin.websocket.WsCloseContext;
import io.javalin.websocket.WsConnectContext;
import io.javalin.websocket.WsContext;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.SerializationUtils;
import org.msgpack.jackson.dataformat.MessagePackFactory;
import java.lang.reflect.Field;
@@ -86,15 +84,20 @@ public class SocketHandler {
CVPipelineSettings origPipeline = currentProcess.getPipelineByIndex(pipelineIndex).settings;
String val = mapper.writeValueAsString(origPipeline);
CVPipelineSettings newPipeline = mapper.readValue(val, origPipeline.getClass());
newPipeline.nickname += "(Copy)";
if (cameraIndex != -1) {
VisionProcess newProcess = VisionManager.getVisionProcessByIndex(cameraIndex);
if (newProcess != null) {
VisionManager.addPipelineToCamera(newPipeline, newProcess);
newProcess.addPipeline(newPipeline);
}
} else {
VisionManager.addPipelineToCamera(newPipeline, currentProcess);
currentProcess.addPipeline(newPipeline);
}
VisionManager.saveCurrentCameraPipelines();
sendFullSettings();
break;