panlei
2019-07-02 9ac06d86026340a0dfe0348068d7659b04abfe7e
ruleserver/ruleToformula.go
@@ -4,7 +4,6 @@
   "encoding/json"
   "fmt"
   "log"
   "os"
   "ruleprocess/cache"
   "sort"
   "strconv"
@@ -253,7 +252,7 @@
   for _, sdkData := range args.Sdkdata {
      for _, areaMap := range sdkData.AreaMapList {
         for j := 0; j < len(groupRule.Rules); j++ {
            putFaceToResult(groupRule.Rules[j], &areaMap, faces)
            faces = append(faces,putFaceToResult(groupRule.Rules[j], &areaMap)...)
         }
      }
   }
@@ -331,15 +330,16 @@
            for j := 0; j < len(groupRule.Rules); j++ {
               for _, sdkData := range args.Sdkdata {
                  if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo && !strings.Contains(sdkName,sdkData.SdkName) { // 只记录yolo符合规则的sdk 同时要避免重复拼接
                     sdkName = sdkName + "," + sdkData.SdkName
                     sdkName = sdkData.SdkName + " "
                  }
               }
            }
            args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText})
            log.Println("-------------------yolo结果标签",args.RuleResult["yolo"].([]Result))
            if args.RuleResult["faces"] != nil {
               log.Println("-------------------face结果标签",args.RuleResult["faces"].([]Arg))
               os.Exit(1)
            if sdkName != "" {
               args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText})
               log.Println("-------------------yolo结果标签",args.RuleResult["yolo"].([]Result))
            }
            if args.RuleResult["face"] != nil {
               log.Println("-------------------face结果标签",args.RuleResult["face"].([]Arg))
            }
            return true
         } else {
@@ -351,14 +351,18 @@
   }
}
func putFaceToResult(rule *protomsg.Rule, am *AreaMap, faces []Arg) {
func putFaceToResult(rule *protomsg.Rule, am *AreaMap) []Arg {
   faces := []Arg{}
   if rule.SdkId == am.sdkId {
      if len(am.filterData) > 0 {
         for _, data := range am.filterData {
            log.Println("---------------------------------------------------------------------有这个data",data)
            faces = append(faces, data)
         }
      }
   }
   log.Println("-----------------------------------------------听说你是空的?",faces)
   return faces
}
// 计算区域内的目标数量以及将相似度、占比、尺寸等打包
@@ -394,7 +398,7 @@
   a.time = time.Unix(time.Now().Unix(), 0).String()[11:16]
   a.keepRight = arg.KeepRight
   a.isStatic = arg.IsStatic
   log.Println("--------------------看看区域数据:",*a)
   //log.Println("--------------------看看区域数据:",*a)
}
// 将字符串格式的坐标序列化为Point格式
@@ -522,7 +526,7 @@
func filterRule(rule *protomsg.Rule, am *AreaMap) LittleRuleResult {
   if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a971" {
      // 处理的是人脸算法 如果这条规则配置的是人脸算法,过滤完条件之后直接得出结果,因为肯定没有数量条件,自己拼接
      log.Println("------------------------------------------------------------------------------------------------------------------------------------终于等到你")
      if rule.SdkId == am.sdkId && rule.PolygonId == am.areaId { // 算法和区域都得对的上
         if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a971" {
@@ -560,6 +564,7 @@
            return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + flag, rule.Sort}
         }
         if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" { // 人脸检测
            log.Println("------------------------------------------------------------------------------------------------------------------------------------终于等到你")
            if rule.Operator == "==" || rule.Operator == ">=" || rule.Operator == "<=" || rule.Operator == "<" || rule.Operator == ">" || rule.Operator == "!=" {
               // 如果是不规矩的连接符统统返回false 规则也只能判断人脸的相似度,所以不存在别的连接符
               if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 判断的是相似值,占比,尺寸等过滤条件,如果再有,还可以再加
@@ -589,6 +594,7 @@
                  am.targetNum = len(am.filterData) // 把符合条件的目标数量更新到targetNum字段
               }
               if am.targetNum > 0 {
                  log.Println("!!!!!!!!!人脸检测成功")
                  return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "true", rule.Sort}
               } else {
                  return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "false", rule.Sort}