Bläddra i källkod

Merge branch 'wyf-dev' into 'all'

feat: 算法参数配置增加字段

See merge request skyeye/skyeye_frontend/skyeye-admin!149
yunfeng wu 1 år sedan
förälder
incheckning
adca28b14f

+ 77 - 0
src/views/cameras/preview/components/AlgorithmsSetting/AlgoSettingCard.vue

@@ -95,6 +95,59 @@
         />
         <span style="font-size: 12px; margin-left: 5px">S/次</span>
       </div>
+      <div class="algoRow" style="align-items: center">
+        <div class="algoLabel">持续时间:</div>
+        <ElInputNumber
+          v-model="selectedAlgoDetail.eventDurationMinMs"
+          controls-position="right"
+          :min="1"
+          :step="1"
+          size="small"
+          style="width: 186px"
+          @blur="checkDurationMinMsValid"
+        />
+        <span style="font-size: 12px; margin-left: 5px">毫秒</span>
+      </div>
+      <div class="algoRow" style="align-items: center">
+        <div class="algoLabel">持续帧数:</div>
+        <ElInputNumber
+          v-model="selectedAlgoDetail.eventDurationMinFrames"
+          controls-position="right"
+          :min="1"
+          :step="1"
+          size="small"
+          style="width: 186px"
+          @blur="checkDurationMinFramesValid"
+        />
+        <span style="font-size: 12px; margin-left: 5px">帧</span>
+      </div>
+      <div class="algoRow" style="align-items: center">
+        <div class="algoLabel">报警时间间隔:</div>
+        <ElInputNumber
+          v-model="selectedAlgoDetail.eventAlarmIntervalMs"
+          controls-position="right"
+          :min="1"
+          :step="1"
+          size="small"
+          style="width: 186px"
+          @blur="checkAlarmIntervalMsValid"
+        />
+        <span style="font-size: 12px; margin-left: 5px">秒</span>
+      </div>
+      <div class="algoRow" style="align-items: center">
+        <div class="algoLabel">报警帧间隔:</div>
+        <ElInputNumber
+          v-model="selectedAlgoDetail.eventAlarmIntervalFrames"
+          controls-position="right"
+          :min="1"
+          :step="1"
+          size="small"
+          style="width: 186px"
+          @blur="checkAlarmIntervalFramesValid"
+        />
+        <span style="font-size: 12px; margin-left: 5px">帧</span>
+      </div>
+
       <div
         v-if="selectedAlgoDetail.timeWindow !== undefined"
         class="algoRow"
@@ -227,6 +280,26 @@
       selectedAlgoDetail.value.detectionFrequency,
     );
   };
+  const checkDurationMinMsValid = () => {
+    selectedAlgoDetail.value.eventDurationMinMs = Math.ceil(
+      selectedAlgoDetail.value.eventDurationMinMs,
+    );
+  };
+  const checkDurationMinFramesValid = () => {
+    selectedAlgoDetail.value.eventDurationMinFrames = Math.ceil(
+      selectedAlgoDetail.value.eventDurationMinFrames,
+    );
+  };
+  const checkAlarmIntervalMsValid = () => {
+    selectedAlgoDetail.value.eventAlarmIntervalMs = Math.ceil(
+      selectedAlgoDetail.value.eventAlarmIntervalMs,
+    );
+  };
+  const checkAlarmIntervalFramesValid = () => {
+    selectedAlgoDetail.value.eventAlarmIntervalFrames = Math.ceil(
+      selectedAlgoDetail.value.eventAlarmIntervalFrames,
+    );
+  };
 
   const checkTimeWindowValid = () => {
     selectedAlgoDetail.value.timeWindow = Math.ceil(selectedAlgoDetail.value.timeWindow || 1);
@@ -323,6 +396,10 @@
       inferCode: detail.inferCode,
       algoId: detail.algoId,
       detectionFrequency: detail.detectionFrequency,
+      eventDurationMinMs: detail.eventDurationMinMs,
+      eventDurationMinFrames: detail.eventDurationMinFrames,
+      eventAlarmIntervalMs: detail.eventAlarmIntervalMs,
+      eventAlarmIntervalFrames: detail.eventAlarmIntervalFrames,
       regionJudge: detail.regionJudge,
       detectionTime: JSON.stringify(detail.timeRangeArr),
       metaObjs,

+ 20 - 0
src/views/cameras/preview/components/AlgorithmsSetting/AlgorithmsSetting.vue

@@ -143,6 +143,22 @@
       metaValues,
       regionJudge: commonInfo.regionJudge || 0,
       judge: commonInfo.judge || commonInfo.judge == 0 ? commonInfo.judge : 1,
+      eventDurationMinMs:
+        commonInfo.eventDurationMinMs || commonInfo.eventDurationMinMs == 0
+          ? commonInfo.eventDurationMinMs
+          : 1,
+      eventDurationMinFrames:
+        commonInfo.eventDurationMinFrames || commonInfo.eventDurationMinFrames == 0
+          ? commonInfo.eventDurationMinFrames
+          : 1,
+      eventAlarmIntervalMs:
+        commonInfo.eventAlarmIntervalMs || commonInfo.eventAlarmIntervalMs == 0
+          ? commonInfo.eventAlarmIntervalMs
+          : 1,
+      eventAlarmIntervalFrames:
+        commonInfo.eventAlarmIntervalFrames || commonInfo.eventAlarmIntervalFrames == 0
+          ? commonInfo.eventAlarmIntervalFrames
+          : 1,
     };
     fenceStore.getFence({
       algoId: algoId,
@@ -234,6 +250,10 @@
     inferParams.regionJudge = param.regionJudge;
     inferParams.criticalCounts = param.criticalCounts;
     inferParams.judge = param.judge;
+    inferParams.eventDurationMinMs = param.eventDurationMinMs;
+    inferParams.eventDurationMinFrames = param.eventDurationMinFrames;
+    inferParams.eventAlarmIntervalMs = param.eventAlarmIntervalMs;
+    inferParams.eventAlarmIntervalFrames = param.eventAlarmIntervalFrames;
     inferParams.algoCode = selectedAlgoDetail.value.algoInfo.code;
     inferParams.algoType = getAlgoType(selectedAlgoDetail.value.algoInfo.extra);
     if (param.timeWindow) {

+ 20 - 0
src/views/cameras/preview/components/AlgorithmsSetting/utils.ts

@@ -140,6 +140,10 @@ export const getExtraCommonInfo = (detail: CameraAlgoItem | undefined | null) =>
 interface CommonInfo {
   regionJudge?: number;
   judge?: number;
+  eventDurationMinMs?: number;
+  eventDurationMinFrames?: number;
+  eventAlarmIntervalMs?: number;
+  eventAlarmIntervalFrames?: number;
   timeWindow?: number;
 }
 
@@ -150,6 +154,10 @@ const getCommonInfo = (extra: string | undefined | null): CommonInfo => {
   if (!params || (params && params.length == 0)) return {};
   const regionJudge = params[0]?.regionJudge;
   const judge = params[0]?.judge;
+  const eventDurationMinMs = params[0]?.eventDurationMinMs;
+  const eventDurationMinFrames = params[0]?.eventDurationMinFrames;
+  const eventAlarmIntervalMs = params[0]?.eventAlarmIntervalMs;
+  const eventAlarmIntervalFrames = params[0]?.eventAlarmIntervalFrames;
   const timeWindow = params[0]?.timeWindow;
   const ret = {} as CommonInfo;
   if (regionJudge || regionJudge == 0) {
@@ -158,6 +166,18 @@ const getCommonInfo = (extra: string | undefined | null): CommonInfo => {
   if (judge || judge == 0) {
     ret.judge = judge;
   }
+  if (eventDurationMinMs || eventDurationMinMs == 0) {
+    ret.eventDurationMinMs = eventDurationMinMs;
+  }
+  if (eventDurationMinFrames || eventDurationMinFrames == 0) {
+    ret.eventDurationMinFrames = eventDurationMinFrames;
+  }
+  if (eventAlarmIntervalMs || eventAlarmIntervalMs == 0) {
+    ret.eventAlarmIntervalMs = eventAlarmIntervalMs;
+  }
+  if (eventAlarmIntervalFrames || eventAlarmIntervalFrames == 0) {
+    ret.eventAlarmIntervalFrames = eventAlarmIntervalFrames;
+  }
   if (timeWindow) {
     ret.timeWindow = timeWindow;
   }

+ 4 - 0
src/views/cameras/preview/store/useCameraAlgoStore.ts

@@ -15,6 +15,10 @@ interface CameraAlgoItemInCard extends CameraAlgoItem {
   metaValues: AlgoParamMetaItem[];
   judge: number; // 0-小于 1-大于 2-等于
   detectionFrequency: number;
+  eventDurationMinMs: number;
+  eventDurationMinFrames: number;
+  eventAlarmIntervalMs: number;
+  eventAlarmIntervalFrames: number;
   timeWindow?: number;
 }