panlei
2019-07-11 6622f4a2288429d2868ec47d9cd968bace55b37d
ruleserver/ruleToformula.go
@@ -89,8 +89,8 @@
   triggerLine   string
   directionLine string
   targetNum     int    // 区域内目标数量
   args          []*Arg  // 区域内目标集合
   filterData    []*Arg  // 过滤后区域内目标集合
   args          []*Arg // 区域内目标集合
   filterData    []*Arg // 过滤后区域内目标集合
   time          string // 当前时间(用以匹配时间规则)
   keepRight     bool   // 是否靠右行
   isStatic      bool   // 是否静止
@@ -115,7 +115,7 @@
   IsStatic    bool       // 是否静止
   ImageWidth  int        // 摄像机拍摄的图像宽 像素
   ImageHeight int        // 摄像机拍摄的图像高 像素
   AreaMapList []*AreaMap  // 本sdk提取的数据按照区域划分后的数据集合
   AreaMapList []*AreaMap // 本sdk提取的数据按照区域划分后的数据集合
}
// 从算法模块儿拿来的对一帧图像各个算法提取的数据集合
@@ -135,12 +135,13 @@
// 过规则库打上的标签
type Result struct {
   TaskId      string // 任务id
   SdkName     string
   RuleGroupId string // 规则组id
   AlarmLevel  int32  // 报警等级
   RuleText    string // 文字版规则组
   Location    []Rect
   TaskId       string // 任务id
   SdkName      string
   RuleGroupId  string // 规则组id
   AlarmLevel   int32  // 报警等级
   RuleText     string // 文字版规则组
   Location     []Rect // 目标的坐标
   AlarmPolygon string // 触发的报警框
}
type LittleRuleResult struct {
   SdkName string // 记录下此结果是哪个sdk的结果
@@ -222,7 +223,9 @@
      }
   }
}
func (arg *Arg) fillLiker(){
// 给目标填充liker
func (arg *Arg) fillLiker() {
   bytes := bigCache.Getdbpersonmsg("", arg.Feature, true)
   var m map[string]float32
   err1 := json.Unmarshal(bytes, &m)
@@ -277,26 +280,13 @@
                        if compareFlag == 2 {
                           array := strings.Split(tableIds, ",")
                           for i := 0; i < len(array)-1; i++ {
                              bytes := bigCache.Getdbpersonmsg(array[i], arg.Feature, true)
                              var m map[string]float32
                              err1 := json.Unmarshal(bytes, &m)
                              if err1 != nil {
                                 logger.Error("getBaseInfo解压错误", err1)
                              }
                              for key, val := range m {
                                 baseinfo, err1 := esutil.Dbpersoninfosbyid(key)
                                 if err1 != nil {
                                    logger.Error("查询底库人员信息出错", err1)
                                 }
                                 baseinfo.CompareScore = val
                                 arg.Liker = append(arg.Liker, &baseinfo)
                              }
                              arg.fillLiker()
                           }
                        }
                        logger.Info("-------------------成功给liker赋值,长度为:", len(arg.Liker))
                     }
                     areaMap.filterData = areaMap.args
                     logger.Info("=======第一次看args:",areaMap.filterData)
                     //logger.Info("=======第一次看args:",(areaMap.filterData))
                  }
               }
            }
@@ -314,6 +304,7 @@
   Compare(args, groupRule)
   resultSplice := []*LittleRuleResult{}
   sdkNames := ""
   polygonId := ""
   // 先过完条件规则
   for j := 0; j < len(groupRule.Rules); j++ {
      for _, sdkData := range args.Sdkdata {
@@ -324,16 +315,20 @@
         }
         ipcId := sdk.IpcId
         sdkName := sdk.SdkName
         logger.Info("规则的ipcId与sdkData的IpcId:",ipcId,"===",sdkData.IpcId)
         logger.Info("规则的ipcId与sdkData的IpcId:", ipcId, "===", sdkData.IpcId)
         if ipcId == sdkData.IpcId {
            logger.Info("当前走的规则的算法是--:", sdkName, "---")
            for _, areaMap := range sdkData.AreaMapList {
               ruleResult := filterRule(groupRule.Rules[j], areaMap)
               if ruleResult.Result != "" {
                  logger.Info("条件规则结果:", ruleResult.Result)
                  // 如果此结果为真且当前过的是yolo算法,应记下此规则所对应的sdkName,另外,还要去重
                  if ruleResult.Result == "true" && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
                  // 如果此结果为真且当前过的是yolo算法,应记下此规则所对应的sdkName,另外,还要去重 (后加:把此条触碰的区域id也记录下来)
                  if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
                     sdkNames = sdkName + ","
                     polygonId = groupRule.Rules[j].PolygonId + ","
                  }
                  if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(polygonId, groupRule.Rules[j].PolygonId) {
                     polygonId = groupRule.Rules[j].PolygonId + ","
                  }
                  resultSplice = append(resultSplice, &ruleResult)
               }
@@ -357,8 +352,11 @@
               ruleResult := transferParameters(groupRule.Rules[j], areaMap)
               if ruleResult.Result != "" {
                  logger.Info("数量规则结果:", ruleResult.Result)
                  if ruleResult.Result == "true" && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
                  if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
                     sdkNames = sdkName + ","
                  }
                  if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(polygonId, groupRule.Rules[j].PolygonId) {
                     polygonId = groupRule.Rules[j].PolygonId + ","
                  }
                  resultSplice = append(resultSplice, &ruleResult)
               }
@@ -380,8 +378,11 @@
               ruleResult := timeRuleResult(groupRule.Rules[j], areaMap)
               if ruleResult.Result != "" {
                  logger.Info("时间规则结果:", ruleResult.Result)
                  if ruleResult.Result == "true" && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
                  if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
                     sdkNames = sdkName + ","
                  }
                  if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(polygonId, groupRule.Rules[j].PolygonId) {
                     polygonId = groupRule.Rules[j].PolygonId + ","
                  }
                  resultSplice = append(resultSplice, &ruleResult)
               }
@@ -485,7 +486,7 @@
               }
            }
            if sdkNames != "" {
               args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkNames, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, locations})
               args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkNames, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, locations,polygonId})
               logger.Info("-------------------yolo结果标签", args.RuleResult["yolo"].([]Result))
            }
            if args.RuleResult["face"] != nil {
@@ -500,7 +501,7 @@
      return false
   }
}
func TimerAlarm(groupId string) (int){
func TimerAlarm(groupId string) (int) {
   var flagTime int = 0
   for k, timeEle := range TimeEleList {
      if strings.Contains(k, groupId) {
@@ -657,7 +658,7 @@
            result, _ := expression.Evaluate(nil) // 得到数学公式的结果
            if result.(bool) {
               logger.Info("___________________________________________________________________联动任务报警")
               args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, "", groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, []Rect{}})
               args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, "", groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, []Rect{},""})
               logger.Info("-------------------yolo结果标签有几个", len(args.RuleResult["yolo"].([]Result)))
               if args.RuleResult["face"] != nil {
                  logger.Info("-------------------face结果标签有几个", len(args.RuleResult["face"].([]Arg)))