diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..b0794e2b02 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,30 @@ +{ + "name": "photonvision", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "pnpm": "^11.0.8" + } + }, + "node_modules/pnpm": { + "version": "11.0.8", + "resolved": "https://registry.npmjs.org/pnpm/-/pnpm-11.0.8.tgz", + "integrity": "sha512-TECX4d0tQjcsTn+lp5H/KPx1pITHrBkuZLHfD97xdZS6mC+bT+2a37PHV4RvVlt5mydj+zcz0d4by4LPRmhJEg==", + "license": "MIT", + "bin": { + "pn": "bin/pnpm.mjs", + "pnpm": "bin/pnpm.mjs", + "pnpx": "bin/pnpx.mjs", + "pnx": "bin/pnpx.mjs" + }, + "engines": { + "node": ">=22.13" + }, + "funding": { + "url": "https://opencollective.com/pnpm" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000000..886bafe068 --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "pnpm": "^11.0.8" + } +} diff --git a/photon-client/src/components/dashboard/tabs/AprilTagTab.vue b/photon-client/src/components/dashboard/tabs/AprilTagTab.vue index f653bc6674..30503e262f 100644 --- a/photon-client/src/components/dashboard/tabs/AprilTagTab.vue +++ b/photon-client/src/components/dashboard/tabs/AprilTagTab.vue @@ -8,6 +8,8 @@ import { useStateStore } from "@/stores/StateStore"; import { useCameraSettingsStore } from "@/stores/settings/CameraSettingsStore"; import { useDisplay } from "vuetify"; +import { useSettingsStore } from "@/stores/settings/GeneralSettingsStore"; + // TODO fix pipeline typing in order to fix this, the store settings call should be able to infer that only valid pipeline type settings are exposed based on pre-checks for the entire config section // Defer reference to store access method const currentPipelineSettings = computed( @@ -90,5 +92,29 @@ const interactiveCols = computed(() => (value) => useCameraSettingsStore().changeCurrentPipelineSetting({ refineEdges: value }, false) " /> + diff --git a/photon-client/src/types/PipelineTypes.ts b/photon-client/src/types/PipelineTypes.ts index 64abdc80fa..7e0e6451d4 100644 --- a/photon-client/src/types/PipelineTypes.ts +++ b/photon-client/src/types/PipelineTypes.ts @@ -276,6 +276,7 @@ export interface AprilTagPipelineSettings extends PipelineSettings { tagFamily: AprilTagFamily; doMultiTarget: boolean; doSingleTargetAlways: boolean; + excludeTags: Set; } export type ConfigurableAprilTagPipelineSettings = Partial< Omit @@ -299,7 +300,8 @@ export const DefaultAprilTagPipelineSettings: AprilTagPipelineSettings = { threads: 4, tagFamily: AprilTagFamily.Family36h11, doMultiTarget: false, - doSingleTargetAlways: false + doSingleTargetAlways: false, + excludeTags: new Set() }; export interface ArucoPipelineSettings extends PipelineSettings { @@ -320,6 +322,7 @@ export interface ArucoPipelineSettings extends PipelineSettings { doMultiTarget: boolean; doSingleTargetAlways: boolean; + excludeTags: Set; } export type ConfigurableArucoPipelineSettings = Partial> & ConfigurablePipelineSettings; @@ -342,7 +345,8 @@ export const DefaultArucoPipelineSettings: ArucoPipelineSettings = { aruco3MinMarkerSideRatio: 0.02, aruco3MinCanonicalImgSide: 32, doMultiTarget: false, - doSingleTargetAlways: false + doSingleTargetAlways: false, + excludeTags: new Set() }; export interface ObjectDetectionPipelineSettings extends PipelineSettings { diff --git a/photon-client/tsconfig.json b/photon-client/tsconfig.json index 9a24a21279..2aa874d829 100644 --- a/photon-client/tsconfig.json +++ b/photon-client/tsconfig.json @@ -14,5 +14,5 @@ "paths": { "@/*": ["./src/*"] } - }, + } } diff --git a/photon-core/src/main/java/org/photonvision/vision/pipeline/AprilTagPipeline.java b/photon-core/src/main/java/org/photonvision/vision/pipeline/AprilTagPipeline.java index 5ae3539aaf..808ce3745e 100644 --- a/photon-core/src/main/java/org/photonvision/vision/pipeline/AprilTagPipeline.java +++ b/photon-core/src/main/java/org/photonvision/vision/pipeline/AprilTagPipeline.java @@ -158,14 +158,16 @@ protected CVPipelineResult process(Frame frame, AprilTagPipelineSettings setting // Populate target list for multitag // (TODO: Address circular dependencies. Multitag only requires corners and IDs, this should // not be necessary.) - TrackedTarget target = - new TrackedTarget( - detection, - null, - new TargetCalculationParameters( - false, null, null, null, null, frameStaticProperties)); - - targetList.add(target); + if (settings.excludeTags.contains(detection.getId())) { + TrackedTarget target = + new TrackedTarget( + detection, + null, + new TargetCalculationParameters( + false, null, null, null, null, frameStaticProperties)); + + targetList.add(target); + } } // Do multi-tag pose estimation diff --git a/photon-core/src/main/java/org/photonvision/vision/pipeline/AprilTagPipelineSettings.java b/photon-core/src/main/java/org/photonvision/vision/pipeline/AprilTagPipelineSettings.java index 0c4b054759..96b7ac2102 100644 --- a/photon-core/src/main/java/org/photonvision/vision/pipeline/AprilTagPipelineSettings.java +++ b/photon-core/src/main/java/org/photonvision/vision/pipeline/AprilTagPipelineSettings.java @@ -18,12 +18,14 @@ package org.photonvision.vision.pipeline; import com.fasterxml.jackson.annotation.JsonTypeName; +import java.util.HashSet; import org.photonvision.vision.apriltag.AprilTagFamily; import org.photonvision.vision.target.TargetModel; @JsonTypeName("AprilTagPipelineSettings") public class AprilTagPipelineSettings extends AdvancedPipelineSettings { public AprilTagFamily tagFamily = AprilTagFamily.kTag36h11; + public HashSet excludeTags = new HashSet<>(); public int decimate = 1; public double blur = 0; public int threads = 4; // Multiple threads seems to be better performance on most platforms diff --git a/photon-core/src/main/java/org/photonvision/vision/pipeline/ArucoPipeline.java b/photon-core/src/main/java/org/photonvision/vision/pipeline/ArucoPipeline.java index 52c2f9f5bd..cf6779e3b9 100644 --- a/photon-core/src/main/java/org/photonvision/vision/pipeline/ArucoPipeline.java +++ b/photon-core/src/main/java/org/photonvision/vision/pipeline/ArucoPipeline.java @@ -151,13 +151,14 @@ protected CVPipelineResult process(Frame frame, ArucoPipelineSettings settings) // Populate target list for multitag // (TODO: Address circular dependencies. Multitag only requires corners and IDs, this should // not be necessary.) - - targetList.add( - new TrackedTarget( - detection, - null, - new TargetCalculationParameters( - false, null, null, null, null, frameStaticProperties))); + if (settings.excludeTags.contains(detection.getId())) { + targetList.add( + new TrackedTarget( + detection, + null, + new TargetCalculationParameters( + false, null, null, null, null, frameStaticProperties))); + } } // Do multi-tag pose estimation diff --git a/photon-core/src/main/java/org/photonvision/vision/pipeline/ArucoPipelineSettings.java b/photon-core/src/main/java/org/photonvision/vision/pipeline/ArucoPipelineSettings.java index 7d7d6ea88e..40b6756949 100644 --- a/photon-core/src/main/java/org/photonvision/vision/pipeline/ArucoPipelineSettings.java +++ b/photon-core/src/main/java/org/photonvision/vision/pipeline/ArucoPipelineSettings.java @@ -18,6 +18,7 @@ package org.photonvision.vision.pipeline; import com.fasterxml.jackson.annotation.JsonTypeName; +import java.util.HashSet; import org.photonvision.common.util.numbers.IntegerCouple; import org.photonvision.vision.apriltag.AprilTagFamily; import org.photonvision.vision.target.TargetModel; @@ -25,7 +26,7 @@ @JsonTypeName("ArucoPipelineSettings") public class ArucoPipelineSettings extends AdvancedPipelineSettings { public AprilTagFamily tagFamily = AprilTagFamily.kTag36h11; - + public HashSet excludeTags = new HashSet<>(); public IntegerCouple threshWinSizes = new IntegerCouple(11, 91); public int threshStepSize = 40; public double threshConstant = 10;