panlei
2019-07-19 68c576e6f05a8913bc8f6f60dd2ca03314a7136d
ruleserver/personTrack.go
@@ -19,33 +19,38 @@
// 检查是否前后两次的数据id是否完全相同(人脸和yolo)
func IsSame(msg *protomsg.SdkMessage) {
   logger.Debug("++++++++++++++++++++++++++++追踪开始++++++++++++++++++++++++")
   logger.Debug("++++++++++++++++++++++++++++追踪开始+++++++++++++++++++++摄像机id为:",msg.Cid)
   for _, sdkinfo := range msg.Tasklab.Sdkinfos { // 遍历各算法的sdkData
      if sdkinfo.Sdktype == "FaceDetect" { // 人脸检测
         if len(sdkinfo.Sdkdata) > 1 {
            faceParam := protomsg.ParamFacePos{}
            err := proto.Unmarshal(sdkinfo.Sdkdata, &faceParam)
            if err != nil {
               logger.Info("解析face sdk数据时出现错误", err)
               continue
            }
            logger.Info("================追踪之前人脸的个数:",len(faceParam.Faces))
            if len(faceParam.Faces) == TrackPond[msg.Cid].Yolo { // yolo的如果数量相同则视为不变、把yolo的sdkData清空
               faceParam.Faces = (faceParam.Faces)[0:0]
            } else {
               TrackPond[msg.Cid].Face = len(faceParam.Faces)
            }
            //for i := 0;  i < len(faceParam.Faces); {
            //   if flag := IsInPond(msg.Cid,faceParam.Faces[i]);flag { // 已经存在,从msg的人脸数组中删除这个元素,不必传到下一个环节
            //      faceParam.Faces = append(faceParam.Faces[:i], faceParam.Faces[i+1:]...)
            //   } else {
            //      i++
            //   }
            //}
         } else {
            continue
         }
      }
      //if sdkinfo.Sdktype == "FaceDetect" { // 人脸检测
      //   if len(sdkinfo.Sdkdata) > 1 {
      //      faceParam := protomsg.ParamFacePos{}
      //      err := proto.Unmarshal(sdkinfo.Sdkdata, &faceParam)
      //      if err != nil {
      //         logger.Info("解析face sdk数据时出现错误", err)
      //         continue
      //      }
      //      logger.Info("================追踪之前人脸的个数:",len(faceParam.Faces))
      //      if faceParam.Faces != nil && TrackPond[msg.Cid] != nil  && len(faceParam.Faces) == TrackPond[msg.Cid].Yolo { // yolo的如果数量相同则视为不变、把yolo的sdkData清空
      //         faceParam.Faces = (faceParam.Faces)[0:0]
      //         sdkinfo.Sdkdata,err = proto.Marshal(&faceParam)
      //         if err != nil {
      //            logger.Error("人脸序列化错误",err)
      //         }
      //         logger.Info("===================追踪中途人脸的个数",len(faceParam.Faces))
      //      } else {
      //         TrackPond[msg.Cid] = &PersonTrack{Face:len(faceParam.Faces)}
      //      }
      //      //for i := 0;  i < len(faceParam.Faces); {
      //      //   if flag := IsInPond(msg.Cid,faceParam.Faces[i]);flag { // 已经存在,从msg的人脸数组中删除这个元素,不必传到下一个环节
      //      //      faceParam.Faces = append(faceParam.Faces[:i], faceParam.Faces[i+1:]...)
      //      //   } else {
      //      //      i++
      //      //   }
      //      //}
      //   } else {
      //      continue
      //   }
      //}
      if sdkinfo.Sdktype == "Yolo" {
         if len(sdkinfo.Sdkdata) > 1 {
            yoloParam := protomsg.ParamYoloObj{}
@@ -54,11 +59,21 @@
               logger.Info("解析yolo数据时出现错误", err)
               continue
            }
            logger.Info("================追踪之前yolo的个数:",len(yoloParam.Infos))
            if len(yoloParam.Infos) == TrackPond[msg.Cid].Yolo { // yolo的如果数量相同则视为不变、把yolo的sdkData清空
            var yoloNum int = 0
            for i := 0;i < len(yoloParam.Infos); i++ {
               if yoloParam.Infos[i].Typ == 0 {
                  yoloNum++
               }
            }
            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)
               }
            } else {
               TrackPond[msg.Cid].Yolo = len(yoloParam.Infos)
               TrackPond[msg.Cid] = &PersonTrack{Yolo:yoloNum}
            }
         } else {
            continue