panlei
2019-12-09 f800147e68f2831ef3233555b7e2b3499b35bc5e
algorithm/personTrack/personTrack.go
@@ -3,14 +3,16 @@
import (
   "encoding/json"
   "errors"
   uuid "github.com/satori/go.uuid"
   "net"
   "strconv"
   "time"
   "nanomsg.org/go-mangos"
   "nanomsg.org/go-mangos/protocol/req"
   "nanomsg.org/go-mangos/transport/tcp"
   "github.com/knetic/govaluate"
   logger "github.com/alecthomas/log4go"
   "basic.com/valib/logger.git"
   "basic.com/pubsub/protomsg.git"
   "ruleprocess/structure"
@@ -94,7 +96,9 @@
// 给目标填充liker
func fillLiker(compareThreshold float32,arg *structure.Arg,am *structure.AreaMap) {
   trackArg := make(map[string]interface{})
   trackArg["esId"] = ""
   esId := uuid.NewV4().String()
   trackArg["esId"] = esId
   trackArg["threshold"] = compareThreshold
   trackArg["cameraId"] = am.CameraId
   trackArg["bodyFeature"] = arg.Feature
   trackArg["faceFeature"]   = arg.AttachArg.Feature
@@ -102,10 +106,15 @@
   if err != nil {
      _ = logger.Error("json序列化错误", err)
   }
   esId := getCompareMsg(b)
   logger.Info("比对出来的esid:",esId)
   base := structure.BaseInfo{TargetId:esId}
   arg.Liker = append(arg.Liker, &base)
   dataId := getCompareMsg(b)
   if esId == dataId { // 说明没比到相似的人
      logger.Info("没比到人")
      arg.Uuid = dataId
   } else {
      logger.Info("比对出来的dataId:",dataId)
      base := structure.BaseInfo{TargetId:dataId}
      arg.Liker = append(arg.Liker, &base)
   }
}
func track (rule *protomsg.Rule,am *structure.AreaMap) structure.LittleRuleResult{
@@ -113,18 +122,20 @@
   if th,err := strconv.ParseFloat(rule.SdkArgValue,32); err == nil {
      threshold = float32(th)
   }
   for i, arg := range am.FilterData {
   for _, arg := range am.FilterData {
      fillLiker(threshold,arg,am)
      if len(arg.Liker) == 0 {
         // 如果没有相似者则删除本目标数据
         am.FilterData = append(am.FilterData[:i],am.FilterData[i+1:]...)
      }
      //if len(arg.Liker) == 0 {
      //   // 如果没有相似者则删除本目标数据
      //   am.FilterData = append(am.FilterData[:i],am.FilterData[i+1:]...)
      //}
   }
   if len(am.FilterData) > 0 {
      return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
   } else {
      return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
   }
   //if len(am.FilterData) > 0 {
   //   return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
   //} else {
   //   return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
   //}
   // 无论有没有相似者都要返回true
   return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
}
func Push(){
@@ -148,13 +159,8 @@
   initFlag = true
   for {
      select {
      // case <-ctx.Done():
      //    return
      case data := <- sender:
         logger.Info("数据长度为:",len(data))
         logger.Debug("推送数据")
         logger.Debug("推送数据:",len(data))
         if err = sock.Send(data); err != nil {
            _ = logger.Error("推送socket发送数据失败: %s", err.Error())
         }
@@ -164,7 +170,7 @@
         logger.Debug("数据推送成功!收到响应,数据长度为:",len(msg))
         receiver <- string(msg)
      default:
         time.Sleep(time.Millisecond * 10)
      }
   }
}