panlei
2019-09-11 46bc6d6fd8024f3d9401936308915ad9e8cc2d18
ruleserver/personTrack.go
@@ -4,6 +4,7 @@
   "basic.com/pubsub/protomsg.git"
   "github.com/golang/protobuf/proto"
   "ruleprocess/logger"
   "ruleprocess/structure"
)
var TrackPond = make(map[string]*PersonTrack)
@@ -21,6 +22,10 @@
// 检查是否前后两次的数据id是否完全相同(人脸)
func FaceIsSame(msg *protomsg.SdkMessage) {
   logger.Debug("+++++++++++++++++++++追踪开始+++++++++++++++摄像机id为:", msg.Cid, "---缓存池为:", TrackPond)
   if msg.Tasklab == nil {
      logger.Info("数据为空,不必追踪")
      return
   }
   for _, sdkinfo := range msg.Tasklab.Sdkinfos { // 遍历各算法的sdkData
      if sdkinfo.Sdktype == "FaceDetect" { // 人脸检测
         logger.Info("数据长度为:", len(sdkinfo.Sdkdata))
@@ -45,11 +50,11 @@
         }
      }
   }
   logger.Debug("---------------------------------------人脸追踪结束--------------------------------------")
   logger.Debug("--------------------------------人脸追踪结束--------------------------------------")
}
//  追踪人体,检查数量是否一致
func BodyIsSame(msg *protomsg.SdkMessage) {
func BodyIsSame(msg *protomsg.SdkMessage) bool{
   logger.Debug("+++++++++++++++++++++追踪开始+++++++++++++++摄像机id为:", msg.Cid, "---缓存池为:", TrackPond)
   for _, sdkinfo := range msg.Tasklab.Sdkinfos { // 遍历各算法的sdkData
      if sdkinfo.Sdktype == "Yolo" {
@@ -72,12 +77,13 @@
                     logger.Info("================追踪之前yolo的个数:", yoloNum, "还没有这个摄像机的缓存")
                  }
                  if yoloParam.Infos != nil && TrackPond[msg.Cid] != nil && yoloNum == TrackPond[msg.Cid].Yolo { // yolo的如果数量相同则视为不变、把yolo的sdkData清空
                     yoloParam.Infos = (yoloParam.Infos)[0:0]
                     sdkinfo.Sdkdata, err = proto.Marshal(&yoloParam)
                     if err != nil {
                        logger.Error("yolo序列化错误", err)
                     }
                     //yoloParam.Infos = (yoloParam.Infos)[0:0]
                     //sdkinfo.Sdkdata, err = proto.Marshal(&yoloParam)
                     //if err != nil {
                     //   logger.Error("yolo序列化错误", err)
                     //}
                     logger.Info("跟之前相同,清空yolo数据")
                     return true
                  } else {
                     if TrackPond[msg.Cid] != nil {
                        logger.Info("更新当前摄像机缓存池中的yolo个数:", yoloNum)
@@ -86,6 +92,7 @@
                        logger.Info("新建当前摄像机缓存池中的yolo个数:", yoloNum)
                        TrackPond[msg.Cid] = &PersonTrack{Yolo: yoloNum}
                     }
                     return false
                  }
               } else {
                  if TrackPond[msg.Cid] != nil {
@@ -98,7 +105,18 @@
         }
      }
   }
   logger.Debug("---------------------------------------追踪结束--------------------------------------")
   logger.Debug("---------------------------------追踪结束--------------------------------------")
   return false
}
func TrackOrNot(label map[string]interface{}) bool{
   if label["yolo"] != nil && len(label["yolo"].([]structure.Result)) > 0 {
      for _,res := range label["yolo"].([]structure.Result) {
         if res.TimeLabel == "10" {
            return true
         }
      }
   }
   return false
}
// 过滤掉那些已在缓存中且分值更低的人脸,更新缓存(没有的加上,分值更新为更高的,多的删除)