panlei
2019-09-10 e2aab518eddae165b9a7c517fbaddaf692ac4070
ruleserver/ruleToformula.go
@@ -20,7 +20,7 @@
      // 拿到本摄像机的区域
      cameraPolygons := GetPolygons(args.CameraId)
      // 把所有的sdk提取的数据都按所属摄像机的区域归置
      //logger.Debug("当前摄像机id为:",message.Cid,"当前摄像机执行的任务是:",message.Tasklab.Taskname)
      logger.Debug("当前摄像机id为:",message.Cid,"当前摄像机执行的任务是:",message.Tasklab.Taskname,"--任务id为:",message.Tasklab.Taskid)
      for _, arg := range args.Sdkdata {
         SdkDataFormat(args.CameraId, arg, cameraPolygons)
      }
@@ -64,7 +64,7 @@
   }
}
func RunRule1(args *structure.SdkDatas, groupRule *protomsg.GroupRule, taskId string, message *protomsg.SdkMessage, label structure.Others) bool {
func RunRule(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string, message *protomsg.SdkMessage, label Others) (bool,[]int) {
   defer func() {
      if err := recover(); err != nil {
         logger.Error("比对规则有误", err)
@@ -231,6 +231,7 @@
                  }
               }
            }
            logger.Info("face标签的长度:",len(faces))
            //for _,face := range faces  {
            //   //logger.Debug("————————————————________________看看人脸的坐标:",face.Location)
            //}
@@ -251,27 +252,30 @@
            } else {
               islink = false
            }
            var labelTypes []int // 0为yolo标签,1为face标签 2为两者标签
            if sdkNames != "" {
               args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]structure.Result), structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, locations, polygonId, islink, label,})
               args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, locations, polygonId, islink,label,})
               labelTypes = append(labelTypes,0)
               //logger.Info("-------------------yolo结果标签长度", len(args.RuleResult["yolo"].([]Result)))
            }
            if faceFlag {
               args.RuleResult["face"] = append(args.RuleResult["face"].([]structure.FaceResult), structure.FaceResult{structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, []structure.Rect{}, polygonId, islink, label,}, faces})
               //logger.Info("-------------------face结果标签", len(args.RuleResult["face"].([]FaceResult)))
               labelTypes = append(labelTypes,1)
            }
            return true
            return true,labelTypes
         } else {
            return false
            return false,[]int{}
         }
      } else {
         // 结果为假时也要走,有时候为假的状态反转数据也需要记录下来
         // 结果为假时也要走,有杀死定时器的操作
         TimerAlarm(&label, groupRule.GroupId, result.(bool))
         //fmt.Println(timeFlag)
         return false
         return false,[]int{}
      }
   } else {
      return false
      return false,[]int{}
   }
}
@@ -336,7 +340,7 @@
      }
   }
   // 往数组里赋值
   isOk := RunRule(args, groupRule, taskId, message, label)
   isOk,labelTypes := RunRule(args, groupRule, taskId, message, label)
   if isOk {
      logger.Info("这帧图像在任务下的一整条规则下(联动任务下就是跟本摄像机像相关的小规则)的判断结果为true")
      // 根据cameraId去更新或者插入结果,然后判断是否数组是否可以得出报警的结论
@@ -409,8 +413,20 @@
      } else {
         logger.Warn("数组不圆满不打标签")
         // 倒是把打的组规则标签给去掉了啊
         lens := len(args.RuleResult["yolo"].([]structure.Result)) - 1
         args.RuleResult["yolo"] = args.RuleResult["yolo"].([]structure.Result)[0:lens]
         for _,val := range labelTypes {
            if val == 0 {
               if len(args.RuleResult["yolo"].([]Result)) >= 1 {
                  lens := len(args.RuleResult["yolo"].([]Result))-1
                  args.RuleResult["yolo"] = args.RuleResult["yolo"].([]Result)[0:lens]
               }
            }
            if val == 1 {
               if len(args.RuleResult["face"].([]FaceResult)) >= 1 {
                  lens := len(args.RuleResult["face"].([]FaceResult))-1
                  args.RuleResult["face"] = args.RuleResult["face"].([]FaceResult)[0:lens]
               }
            }
         }
      }
   } else { // 没有报警,
      //logger.Info("这帧图像在任务下的一整条规则下(联动任务下就是跟本摄像机像相关的小规则)的判断结果为false")
@@ -430,7 +446,6 @@
   }
}
// 如果有持续时间条件维护开启一个定时器
func duration(rule *protomsg.Rule, groupId string, am *structure.AreaMap, args *structure.SdkDatas, message *protomsg.SdkMessage) {
   if rule.PolygonId == am.AreaId { // 首先规则所对应的区域id要跟区域数据的id对的上  配置的算法要对的上