panlei
2019-11-07 5ae97eebd0dfcaad32e92f9df7b7f73caad922bf
ruleserver/readyDataForRule.go
@@ -6,9 +6,7 @@
   "encoding/json"
   "errors"
   "fmt"
   "github.com/go-yaml/yaml"
   "github.com/golang/protobuf/proto"
   "io/ioutil"
   "math"
   "nanomsg.org/go-mangos"
   "nanomsg.org/go-mangos/protocol/req"
@@ -33,23 +31,6 @@
}
func Init() {
   data, err := ioutil.ReadFile("./config/conf.yml")
   if err != nil {
      fmt.Println("读取配置文件出错--", err)
      logger.Error("读取配置文件出错--", err)
   }
   c := conf{}
   //把yaml形式的字符串解析成struct类型
   yaml.Unmarshal(data, &c)
   logger.Debug("配置文件的值为:", c)
   serverIp = c.ServerIp
   serverPort = c.ServerPort
   dbTablePersons = c.DbTablePersons
   localConfig, err1 := cache.GetServerInfo()
   if err1 != nil {
      logger.Error("查询本机信息失败!")
   }
   logger.Debug("本机信息和server信息:", localConfig, serverIp, serverPort)
   go Push1()
}
@@ -80,7 +61,6 @@
         taskGroup = task
      }
   }
   logger.Debug("当前数据帧要匹配的规则组:-------------------------","摄像机id:",cameraId,"任务id",taskId)
   if taskGroup == nil  {
      return nil
   } else {
@@ -106,10 +86,10 @@
}
func Decimal(value float32) float64 {
   value1, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", float64(value)), 64)
   logger.Info("初步保留两位成str:",value1)
   //logger.Info("初步保留两位成str:",value1)
   n10 := math.Pow10(4)
   value2 := math.Trunc((value1+0.5/n10)*n10) / n10
   logger.Info("初步保留两位成str::::",value2)
   //logger.Info("初步保留两位成str::::",value2)
   return value2
}
// 取出某个时间规则的第几天的规则段集合
@@ -162,7 +142,7 @@
}
// 给目标填充liker
func FillLiker(arg *structure.Arg,tableId []string, compareThreshold float32) {
func fillLiker(tableId []string, compareThreshold float32,arg *structure.Arg) {
   //bytes := bigCache.GetComparePersonBaseInfo(tableId, arg.Feature, compareThreshold)
   comArg := &protomsg.CompareArgs{
      TableIds:tableId,
@@ -229,7 +209,7 @@
         if groupRule.Rules[j].SdkArgAlias == "compareBase" && groupRule.Rules[j].SdkArgValue == "" { // 配的参数是比对全部底库
            compareFlag = 1
         }
         if groupRule.Rules[j].SdkArgAlias == "threshold" {
         if groupRule.Rules[j].SdkArgAlias == "cmpThreshold" {
            v2, err := strconv.ParseFloat(groupRule.Rules[j].SdkArgValue, 32)
            if err != nil {
               logger.Error("string转float32失败!")
@@ -256,19 +236,19 @@
                     //logger.Info("--------------看看compareFlag的值和tableId和areaMap.args的长度:",compareFlag,tableIds,len(areaMap.args))
                     for _, arg := range areaMap.Args {
                        arg.Liker = arg.Liker[0:0]
                        logger.Info("清空之后看看之前打的人脸标签变了没:")
                        if args.RuleResult["face"] != nil && len(args.RuleResult["face"].([]structure.FaceResult)) > 0 {
                           for _, faceResult := range args.RuleResult["face"].([]structure.FaceResult) {
                              for _,arg := range faceResult.Args {
                                 logger.Info("人员分值是:",arg.Score,"liker的数量为",arg.Liker)
                              }
                           }
                        }
                        //logger.Info("清空之后看看之前打的人脸标签变了没:")
                        //if args.RuleResult["face"] != nil && len(args.RuleResult["face"].([]FaceResult)) > 0 {
                        //   for _, faceResult := range args.RuleResult["face"].([]FaceResult) {
                        //      for _,arg := range faceResult.Args {
                        //         logger.Info("人员分值是:",arg.Score,"liker的数量为",arg.Liker)
                        //      }
                        //   }
                        //}
                        if compareFlag == 1 {
                           FillLiker(arg,nil, threshold)
                           fillLiker(nil, threshold, arg)
                        }
                        if compareFlag == 2 {
                           FillLiker(arg,tableIds, threshold)
                           fillLiker(tableIds, threshold, arg)
                        }
                        //logger.Info("-------------------成功给liker赋值,长度为:", len(arg.Liker))
                     }
@@ -288,16 +268,17 @@
func CountAreaObjs(a *structure.AreaMap,arg *structure.SdkData) {
   a.TargetNum = 0
   threshold := 0.5       // 相似度
   threshold := 80.0       // 相似度
   intersectionper := 0.2 // 占比
   size := 0.0            // 尺寸
   areaPoints := Json2points(a.AreaJson)
   widthScale := float64(arg.ImageWidth / 960)
   heigthScale := float64(arg.ImageHeight / 540)
   logger.Info("看看图片的width和height:",arg.ImageWidth,arg.ImageHeight)
   widthScale := float64(arg.ImageWidth) / 960
   heigthScale := float64(arg.ImageHeight) / 540
   for _, obj := range arg.Photo {
      //logger.Info("------------------看看sdkData:", arg.SdkName, "的Photo数据----------------", obj, "----顺便看看占比-----:", PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale))
      if threshold <= obj.Score && size <= float64(obj.Rects.Width*obj.Rects.Height) && intersectionper <= PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale) {
      if  obj.Score >= threshold && float64(obj.Rects.Width*obj.Rects.Height) >= size && PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale) >= intersectionper {
         // 这步要备齐表达式里所需要的所有参数
         a.TargetNum++
         arg1 := structure.Arg{obj.Id,obj.Score, PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), obj.IsYolo, obj.Rects, obj.Feature, obj.ThftRes, []*structure.BaseInfo{}}
@@ -393,6 +374,7 @@
      // case <-ctx.Done():
      //    return
      case data := <- sender:
         logger.Info("比对进程入参:",data.TableIds,data.CompareThreshold)
         bytes,err1 := proto.Marshal(data)
         logger.Info("数据长度为:",len(bytes))
         if err1 != nil {