panlei
2019-07-11 95652c49ee7c0a4a9b167c6bcbe585ebd58ab2e5
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提取的数据按照区域划分后的数据集合
}
// 从算法模块儿拿来的对一帧图像各个算法提取的数据集合
@@ -180,7 +180,7 @@
      areaMap := AreaMap{cameraId: cameraId, areaId: polygon.Id, areaJson: polygon.Polygon, triggerLine: polygon.TriggerLine, directionLine: polygon.DirectionLine}
      // 为每个摄像机区域填充数据
      areaMap.CountAreaObjs(arg)
      arg.AreaMapList = append(arg.AreaMapList, areaMap)
      arg.AreaMapList = append(arg.AreaMapList, &areaMap)
   }
}
@@ -222,6 +222,25 @@
      }
   }
}
func (arg *Arg) fillLiker(){
   bytes := bigCache.Getdbpersonmsg("", arg.Feature, true)
   var m map[string]float32
   err1 := json.Unmarshal(bytes, &m)
   if err1 != nil {
      logger.Error("getBaseInfo解压错误", err1)
   }
   logger.Info("----------------------------------------map是", m)
   for key, val := range m {
      logger.Info("_______________________________________对比库的返回值", key, val)
      baseinfo, err1 := esutil.Dbpersoninfosbyid(key)
      if err1 != nil {
         logger.Error("查询底库人员信息出错", err1)
      }
      baseinfo.CompareScore = val
      arg.Liker = append(arg.Liker, &baseinfo)
   }
   //logger.Info("------------------第一次看args:",*arg)
}
func Compare(args *SdkDatas, groupRule *protomsg.GroupRule) {
   compareFlag := 0
   tableIds := ""
@@ -253,22 +272,7 @@
                  if groupRule.Rules[j].PolygonId == areaMap.areaId {
                     for _, arg := range areaMap.args {
                        if compareFlag == 1 {
                           bytes := bigCache.Getdbpersonmsg("", arg.Feature, true)
                           var m map[string]float32
                           err1 := json.Unmarshal(bytes, &m)
                           if err1 != nil {
                              logger.Error("getBaseInfo解压错误", err1)
                           }
                           logger.Info("----------------------------------------map是", m)
                           for key, val := range m {
                              logger.Info("_______________________________________对比库的返回值", key, val)
                              baseinfo, err1 := esutil.Dbpersoninfosbyid(key)
                              if err1 != nil {
                                 logger.Error("查询底库人员信息出错", err1)
                              }
                              baseinfo.CompareScore = val
                              arg.Liker = append(arg.Liker, &baseinfo)
                           }
                           arg.fillLiker()
                        }
                        if compareFlag == 2 {
                           array := strings.Split(tableIds, ",")
@@ -292,6 +296,7 @@
                        logger.Info("-------------------成功给liker赋值,长度为:", len(arg.Liker))
                     }
                     areaMap.filterData = areaMap.args
                     logger.Info("=======第一次看args:",areaMap.filterData)
                  }
               }
            }
@@ -323,7 +328,7 @@
         if ipcId == sdkData.IpcId {
            logger.Info("当前走的规则的算法是--:", sdkName, "---")
            for _, areaMap := range sdkData.AreaMapList {
               ruleResult := filterRule(groupRule.Rules[j], &areaMap)
               ruleResult := filterRule(groupRule.Rules[j], areaMap)
               if ruleResult.Result != "" {
                  logger.Info("条件规则结果:", ruleResult.Result)
                  // 如果此结果为真且当前过的是yolo算法,应记下此规则所对应的sdkName,另外,还要去重
@@ -349,7 +354,7 @@
         sdkName := sdk.SdkName
         if ipcId == sdkData.IpcId {
            for _, areaMap := range sdkData.AreaMapList {
               ruleResult := transferParameters(groupRule.Rules[j], &areaMap)
               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) {
@@ -372,7 +377,7 @@
         sdkName := sdk.SdkName
         if ipcId == sdkData.IpcId {
            for _, areaMap := range sdkData.AreaMapList {
               ruleResult := timeRuleResult(groupRule.Rules[j], &areaMap)
               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) {
@@ -395,7 +400,7 @@
         if ipcId == sdkData.IpcId {
            for _, areaMap := range sdkData.AreaMapList {
               // 去开启一个定时器
               duration(groupRule.Rules[j], groupRule.GroupId, &areaMap, args)
               duration(groupRule.Rules[j], groupRule.GroupId, areaMap, args)
            }
         }
      }
@@ -462,7 +467,7 @@
            for _, sdkData := range args.Sdkdata {
               if sdkData.IpcId == "A8B73405-373D-4F23-CED2-A617EBD7EC55" && faceFlag { // sdkData里有人脸数据且配置了算法才把符合条件的数据塞进标签里去
                  for _, areaMap := range sdkData.AreaMapList {
                     faces = append(faces, putFaceToResult(&areaMap)...)
                     faces = append(faces, putFaceToResult(areaMap)...)
                  }
               }
            }
@@ -475,7 +480,7 @@
            for _, sdkData := range args.Sdkdata {
               if sdkData.IpcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && sdkNames != "" { // 把yolo数据的各个目标的坐标输出方便后面画框
                  for _, areaMap := range sdkData.AreaMapList {
                     locations = append(locations, putYolosToResult(&areaMap)...)
                     locations = append(locations, putYolosToResult(areaMap)...)
                  }
               }
            }
@@ -517,7 +522,7 @@
   faces := []Arg{}
   if len(am.filterData) > 0 {
      for _, data := range am.filterData {
         faces = append(faces, data)
         faces = append(faces, *data)
      }
   }
@@ -554,8 +559,8 @@
         a.targetNum++
         arg1 := Arg{obj.Score, PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), obj.IsYolo, obj.Rects, obj.Feature, obj.ThftRes, []*protomsg.Baseinfo{}}
         //logger.Println("放进去的arg:-------", arg1)
         a.args = append(a.args, arg1)
         a.filterData = append(a.filterData, arg1)
         a.args = append(a.args, &arg1)
         a.filterData = append(a.filterData, &arg1)
      }
   }
   a.time = time.Unix(time.Now().Unix(), 0).String()[11:16]
@@ -723,7 +728,7 @@
               // 如果是不规矩的连接符统统返回false 规则也只能判断人脸的相似度,所以不存在别的连接符
               if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 判断的是相似值,占比,尺寸等过滤条件,如果再有,还可以再加
                  logger.Info("--------------------终于等到你的下文")
                  var args []Arg
                  var args []*Arg
                  if rule.RuleWithPre == "&&" {
                     args = am.filterData
                  } else {
@@ -772,7 +777,7 @@
      if rule.PolygonId == am.areaId { // 首先这条规则得是这个算法的规则,其次规则所对应的区域id要跟区域数据的id对的上
         if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 判断的是相似值,占比,尺寸等过滤条件,如果再有,还可以再加
            logger.Info("----------当前条件规则:---------", rule)
            var args []Arg
            var args []*Arg
            if rule.RuleWithPre == "&&" {
               args = am.filterData
            } else {