From 4e0ca3df468ec7f2ef035e7a2f0057b3834082bb Mon Sep 17 00:00:00 2001 From: Sriman Achanta <68172138+srimanachanta@users.noreply.github.com> Date: Mon, 9 Oct 2023 16:45:45 -0400 Subject: [PATCH 01/10] Add backend topics --- .../server/DataSocketHandler.java | 24 +++++++++++++++++++ .../server/DataSocketMessageType.java | 2 ++ 2 files changed, 26 insertions(+) diff --git a/photon-server/src/main/java/org/photonvision/server/DataSocketHandler.java b/photon-server/src/main/java/org/photonvision/server/DataSocketHandler.java index 19fc18f937..43a9520748 100644 --- a/photon-server/src/main/java/org/photonvision/server/DataSocketHandler.java +++ b/photon-server/src/main/java/org/photonvision/server/DataSocketHandler.java @@ -265,6 +265,30 @@ public void onBinaryMessage(WsBinaryMessageContext context) { dcService.publishEvent(changePipelineEvent); break; } + case SMT_SAVEINPUTSNAPSHOT: + { + var takeInputSnapshotEvent = + new IncomingWebSocketEvent<>( + DataChangeDestination.DCD_ACTIVEMODULE, + "saveInputSnapshot", + 0, + cameraIndex, + context); + dcService.publishEvent(takeInputSnapshotEvent); + break; + } + case SMT_SAVEOUTPUTSNAPSHOT: + { + var takeOutputSnapshotEvent = + new IncomingWebSocketEvent<>( + DataChangeDestination.DCD_ACTIVEMODULE, + "saveOutputSnapshot", + 0, + cameraIndex, + context); + dcService.publishEvent(takeOutputSnapshotEvent); + break; + } case SMT_TAKECALIBRATIONSNAPSHOT: { var takeCalSnapshotEvent = diff --git a/photon-server/src/main/java/org/photonvision/server/DataSocketMessageType.java b/photon-server/src/main/java/org/photonvision/server/DataSocketMessageType.java index 256695f2c8..f5222cf371 100644 --- a/photon-server/src/main/java/org/photonvision/server/DataSocketMessageType.java +++ b/photon-server/src/main/java/org/photonvision/server/DataSocketMessageType.java @@ -32,6 +32,8 @@ public enum DataSocketMessageType { SMT_PIPELINESETTINGCHANGE("changePipelineSetting"), SMT_CURRENTPIPELINE("currentPipeline"), SMT_STARTPNPCALIBRATION("startPnpCalibration"), + SMT_SAVEINPUTSNAPSHOT("saveInputSnapshot"), + SMT_SAVEOUTPUTSNAPSHOT("saveOutputSnapshot"), SMT_TAKECALIBRATIONSNAPSHOT("takeCalibrationSnapshot"), SMT_DUPLICATEPIPELINE("duplicatePipeline"), SMT_CHANGEBRIGHTNESS("enabledLEDPercentage"), From e448371f506324e8da6c3d53b17d9a67e12489ae Mon Sep 17 00:00:00 2001 From: Sriman Achanta <68172138+srimanachanta@users.noreply.github.com> Date: Mon, 9 Oct 2023 16:46:00 -0400 Subject: [PATCH 02/10] Implement logic to take snapshots --- .../vision/frame/consumer/FileSaveFrameConsumer.java | 4 ++++ .../org/photonvision/vision/processes/VisionModule.java | 8 ++++++++ .../vision/processes/VisionModuleChangeSubscriber.java | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/photon-core/src/main/java/org/photonvision/vision/frame/consumer/FileSaveFrameConsumer.java b/photon-core/src/main/java/org/photonvision/vision/frame/consumer/FileSaveFrameConsumer.java index e9773122a0..241ad8fbca 100644 --- a/photon-core/src/main/java/org/photonvision/vision/frame/consumer/FileSaveFrameConsumer.java +++ b/photon-core/src/main/java/org/photonvision/vision/frame/consumer/FileSaveFrameConsumer.java @@ -102,4 +102,8 @@ public void updateCameraNickname(String newCameraNickname) { this.subTable.getEntry(ntEntryName).setInteger(imgSaveCountInternal); this.entry = subTable.getIntegerTopic(ntEntryName).getEntry(-1); // Default negative } + + public void overrideTakeSnapshot() { + entry.set(entry.get() + 1); + } } diff --git a/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java b/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java index bf0ac94427..b71226328e 100644 --- a/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java +++ b/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java @@ -351,6 +351,14 @@ public void startCalibration(UICalibrationData data) { setPipeline(PipelineManager.CAL_3D_INDEX); } + public void saveInputSnapshot() { + inputFrameSaver.overrideTakeSnapshot(); + } + + public void saveOutputSnapshot() { + outputFrameSaver.overrideTakeSnapshot(); + } + public void takeCalibrationSnapshot() { pipelineManager.calibration3dPipeline.takeSnapshot(); } diff --git a/photon-core/src/main/java/org/photonvision/vision/processes/VisionModuleChangeSubscriber.java b/photon-core/src/main/java/org/photonvision/vision/processes/VisionModuleChangeSubscriber.java index e16e4eeedd..e824ce89dc 100644 --- a/photon-core/src/main/java/org/photonvision/vision/processes/VisionModuleChangeSubscriber.java +++ b/photon-core/src/main/java/org/photonvision/vision/processes/VisionModuleChangeSubscriber.java @@ -107,6 +107,12 @@ public void onDataChangeEvent(DataChangeEvent event) { parentModule.startCalibration(data); parentModule.saveAndBroadcastAll(); return; + case "saveInputSnapshot": + parentModule.saveInputSnapshot(); + return; + case "saveOutputSnapshot": + parentModule.saveOutputSnapshot(); + return; case "takeCalSnapshot": parentModule.takeCalibrationSnapshot(); return; From 446364bd5c7054e646d6e3a5643bc42b96c22428 Mon Sep 17 00:00:00 2001 From: Sriman Achanta <68172138+srimanachanta@users.noreply.github.com> Date: Mon, 9 Oct 2023 16:47:37 -0400 Subject: [PATCH 03/10] Add UI methods --- .../stores/settings/CameraSettingsStore.ts | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/photon-client/src/stores/settings/CameraSettingsStore.ts b/photon-client/src/stores/settings/CameraSettingsStore.ts index a86a09f409..e3ac87e05d 100644 --- a/photon-client/src/stores/settings/CameraSettingsStore.ts +++ b/photon-client/src/stores/settings/CameraSettingsStore.ts @@ -366,6 +366,26 @@ export const useCameraSettingsStore = defineStore("cameraSettings", { takeCalibrationSnapshot(takeSnapshot = true, cameraIndex: number = useStateStore().currentCameraIndex) { const payload = { takeCalibrationSnapshot: takeSnapshot, + /** + * Save a snapshot of the input frame of the camera. + * + * @param cameraIndex the index of the camera + */ + saveInputSnapshot(cameraIndex: number = useStateStore().currentCameraIndex) { + const payload = { + saveInputSnapshot: true, + cameraIndex: cameraIndex + }; + useStateStore().websocket?.send(payload, true); + }, + /** + * Save a snapshot of the output frame of the camera. + * + * @param cameraIndex the index of the camera + */ + saveOutputSnapshot(cameraIndex: number = useStateStore().currentCameraIndex) { + const payload = { + saveOutputSnapshot: true, cameraIndex: cameraIndex }; useStateStore().websocket?.send(payload, true); From 543519a461c4db03a8b79bd39a37710dabfdcd4c Mon Sep 17 00:00:00 2001 From: Sriman Achanta <68172138+srimanachanta@users.noreply.github.com> Date: Mon, 9 Oct 2023 16:48:00 -0400 Subject: [PATCH 04/10] Make takeCalibrationSnapshot always true this will never need to be false --- photon-client/src/stores/settings/CameraSettingsStore.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/photon-client/src/stores/settings/CameraSettingsStore.ts b/photon-client/src/stores/settings/CameraSettingsStore.ts index e3ac87e05d..7115729adb 100644 --- a/photon-client/src/stores/settings/CameraSettingsStore.ts +++ b/photon-client/src/stores/settings/CameraSettingsStore.ts @@ -360,12 +360,15 @@ export const useCameraSettingsStore = defineStore("cameraSettings", { /** * Take a snapshot for the calibration processes * - * @param takeSnapshot whether or not to take a snapshot. Defaults to true * @param cameraIndex the index of the camera that is currently in the calibration process */ - takeCalibrationSnapshot(takeSnapshot = true, cameraIndex: number = useStateStore().currentCameraIndex) { + takeCalibrationSnapshot(cameraIndex: number = useStateStore().currentCameraIndex) { const payload = { - takeCalibrationSnapshot: takeSnapshot, + takeCalibrationSnapshot: true, + cameraIndex: cameraIndex + }; + useStateStore().websocket?.send(payload, true); + }, /** * Save a snapshot of the input frame of the camera. * From d042aa056aa5de2099b1d9ce061a67fe2cfeeae2 Mon Sep 17 00:00:00 2001 From: Sriman Achanta <68172138+srimanachanta@users.noreply.github.com> Date: Mon, 9 Oct 2023 17:35:25 -0400 Subject: [PATCH 05/10] add ui buttons --- .../src/components/cameras/CamerasView.vue | 70 ++++++++++++------- .../src/components/dashboard/CamerasCard.vue | 64 +++++++++-------- 2 files changed, 81 insertions(+), 53 deletions(-) diff --git a/photon-client/src/components/cameras/CamerasView.vue b/photon-client/src/components/cameras/CamerasView.vue index 8b7f1785dc..a6b2d62808 100644 --- a/photon-client/src/components/cameras/CamerasView.vue +++ b/photon-client/src/components/cameras/CamerasView.vue @@ -1,6 +1,6 @@