mirror of
https://github.com/PhotonVision/photonvision
synced 2026-06-19 00:41:41 +00:00
* Sort object detection results and reduce code dup. * Filter objdet results by ratio and area * Address code review --------- Co-authored-by: Mohammad Durrani <46766905+mdurrani808@users.noreply.github.com>
84 lines
3.6 KiB
Vue
84 lines
3.6 KiB
Vue
<script setup lang="ts">
|
|
import { useCameraSettingsStore } from "@/stores/settings/CameraSettingsStore";
|
|
import { type ActivePipelineSettings, PipelineType } from "@/types/PipelineTypes";
|
|
import PvSlider from "@/components/common/pv-slider.vue";
|
|
import { computed, getCurrentInstance } from "vue";
|
|
import { useStateStore } from "@/stores/StateStore";
|
|
|
|
// 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<ActivePipelineSettings>(
|
|
() => useCameraSettingsStore().currentPipelineSettings
|
|
);
|
|
|
|
// TODO fix pv-range-slider so that store access doesn't need to be deferred
|
|
const contourArea = computed<[number, number]>({
|
|
get: () => Object.values(useCameraSettingsStore().currentPipelineSettings.contourArea) as [number, number],
|
|
set: (v) => (useCameraSettingsStore().currentPipelineSettings.contourArea = v)
|
|
});
|
|
const contourRatio = computed<[number, number]>({
|
|
get: () => Object.values(useCameraSettingsStore().currentPipelineSettings.contourRatio) as [number, number],
|
|
set: (v) => (useCameraSettingsStore().currentPipelineSettings.contourRatio = v)
|
|
});
|
|
|
|
const interactiveCols = computed(() =>
|
|
(getCurrentInstance()?.proxy.$vuetify.breakpoint.mdAndDown || false) &&
|
|
(!useStateStore().sidebarFolded || useCameraSettingsStore().isDriverMode)
|
|
? 9
|
|
: 8
|
|
);
|
|
</script>
|
|
|
|
<template>
|
|
<div v-if="currentPipelineSettings.pipelineType === PipelineType.ObjectDetection">
|
|
<pv-slider
|
|
v-model="currentPipelineSettings.confidence"
|
|
class="pt-2"
|
|
:slider-cols="interactiveCols"
|
|
label="Confidence"
|
|
tooltip="The minimum confidence for a detection to be considered valid. Bigger numbers mean fewer but more probable detections are allowed through."
|
|
:min="0"
|
|
:max="1"
|
|
:step="0.01"
|
|
@input="(value) => useCameraSettingsStore().changeCurrentPipelineSetting({ confidence: value }, false)"
|
|
/>
|
|
<pv-range-slider
|
|
v-model="contourArea"
|
|
label="Area"
|
|
:min="0"
|
|
:max="100"
|
|
:slider-cols="interactiveCols"
|
|
:step="0.01"
|
|
@input="(value) => useCameraSettingsStore().changeCurrentPipelineSetting({ contourArea: value }, false)"
|
|
/>
|
|
<pv-range-slider
|
|
v-model="contourRatio"
|
|
label="Ratio (W/H)"
|
|
tooltip="Min and max ratio between the width and height of a contour's bounding rectangle"
|
|
:min="0"
|
|
:max="100"
|
|
:slider-cols="interactiveCols"
|
|
:step="0.01"
|
|
@input="(value) => useCameraSettingsStore().changeCurrentPipelineSetting({ contourRatio: value }, false)"
|
|
/>
|
|
<pv-select
|
|
v-model="useCameraSettingsStore().currentPipelineSettings.contourTargetOrientation"
|
|
label="Target Orientation"
|
|
tooltip="Used to determine how to calculate target landmarks, as well as aspect ratio"
|
|
:items="['Portrait', 'Landscape']"
|
|
:select-cols="interactiveCols"
|
|
@input="
|
|
(value) => useCameraSettingsStore().changeCurrentPipelineSetting({ contourTargetOrientation: value }, false)
|
|
"
|
|
/>
|
|
<pv-select
|
|
v-model="currentPipelineSettings.contourSortMode"
|
|
label="Target Sort"
|
|
tooltip="Chooses the sorting mode used to determine the 'best' targets to provide to user code"
|
|
:select-cols="interactiveCols"
|
|
:items="['Largest', 'Smallest', 'Highest', 'Lowest', 'Rightmost', 'Leftmost', 'Centermost']"
|
|
@input="(value) => useCameraSettingsStore().changeCurrentPipelineSetting({ contourSortMode: value }, false)"
|
|
/>
|
|
</div>
|
|
</template>
|