---
panlei
2019-12-17 b2a7c4aec7f2441fc545ada6cbd7d2a771331043
algorithm/personTrack/personTrack.go
@@ -19,7 +19,7 @@
)
var sender chan []byte = make(chan []byte)
var receiver chan string = make(chan string)
var receiver chan map[string]interface{} = make(chan map[string]interface{})
var sock mangos.Socket
func Init() {
@@ -104,18 +104,28 @@
   if err != nil {
      logger.Error("json序列化错误", err)
   }
   dataId := getCompareMsg(b)
   if esId == dataId || dataId == ""{ // 说明没比到相似的人
      logger.Info("没比到人")
   result := getCompareMsg(b)
   if esId == result["esId"].(string) || result["esId"].(string) == ""{ // 说明没比到相似的人,是新人
      logger.Info("没比到人,可以入库",am.CameraId)
      arg.Uuid = esId
   } else {
      logger.Info("比对出来的dataId:",dataId)
      base := structure.BaseInfo{TargetId:dataId}
      arg.Liker = append(arg.Liker, &base)
      if result["isHave"].(bool){ // 比到了相似的人且在此摄像机下已经出现过,最后不能插入数据库
         logger.Info("不许入库的数据",am.CameraId)
         arg.Uuid = ""
      } else { // 比到了相似的人但在此摄像机下未出现过,要插入数据库
         logger.Info("准备入库的数据",am.CameraId)
         base := structure.BaseInfo{TargetId:result["esId"].(string)}
         arg.Liker = append(arg.Liker, &base)
      }
   }
}
func track (rule *protomsg.Rule,am *structure.AreaMap) structure.LittleRuleResult{
   defer func() {
      if err := recover();err != nil {
         logger.Error("追踪判断失败",err)
      }
   }()
   var threshold float32 = 60 // 默认阈值为70
   if th,err := strconv.ParseFloat(rule.SdkArgValue,32); err == nil {
      threshold = float32(th)
@@ -178,14 +188,16 @@
            logger.Error("接收响应失败: %s", err.Error())
         }
         logger.Debug("数据推送成功!收到响应,数据长度为:",len(msg))
         receiver <- string(msg)
         recive := make(map[string]interface{})
         _ = json.Unmarshal(msg,&recive)
         receiver <- recive
      default:
         time.Sleep(time.Millisecond * 10)
      }
   }
}
func getCompareMsg(data []byte) string{
func getCompareMsg(data []byte) map[string]interface{}{
   sender <- data
   return <- receiver
}