2024-01-15 22:28:34 -05:00
< script setup lang = "ts" >
import { useCameraSettingsStore } from "@/stores/settings/CameraSettingsStore" ;
2024-01-16 22:23:05 -05:00
import { type ActivePipelineSettings , PipelineType } from "@/types/PipelineTypes" ;
2024-01-15 22:28:34 -05:00
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
2024-01-16 22:23:05 -05:00
const currentPipelineSettings = computed < ActivePipelineSettings > (
( ) => useCameraSettingsStore ( ) . currentPipelineSettings
) ;
2024-01-15 22:28:34 -05:00
2024-01-23 14:10:31 -05:00
// 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 )
} ) ;
2024-01-16 22:23:05 -05:00
const interactiveCols = computed ( ( ) =>
( getCurrentInstance ( ) ? . proxy . $vuetify . breakpoint . mdAndDown || false ) &&
( ! useStateStore ( ) . sidebarFolded || useCameraSettingsStore ( ) . isDriverMode )
? 9
: 8
) ;
2024-01-15 22:28:34 -05:00
< / 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)"
/ >
2024-01-23 14:10:31 -05:00
< 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)"
/ >
2024-01-15 22:28:34 -05:00
< / div >
< / template >