panlei
2019-10-22 cf6237c84f750ff595064c6685039ebffd4ef50d
ruleserver/personTrack.go
@@ -2,12 +2,14 @@
import (
   "basic.com/pubsub/protomsg.git"
   "github.com/golang/protobuf/proto"
   "basic.com/valib/logger.git"
   "github.com/golang/protobuf/proto"
   "ruleprocess/structure"
   "sync"
)
var TrackPond = make(map[string]*PersonTrack)
var lock = sync.RWMutex{}
type PersonTrack struct {
   Faces []*Face // 人脸的数组  改为数量
@@ -35,9 +37,13 @@
            } else {
               if TrackPond[msg.Cid] != nil {
                  logger.Info("如果不为空:", TrackPond[msg.Cid])
                  lock.Lock()
                  TrackPond[msg.Cid].Faces = nil
                  lock.Unlock()
               } else {
                  lock.Lock()
                  TrackPond[msg.Cid] = &PersonTrack{Faces: nil}
                  lock.Unlock()
                  logger.Info("如果为空:", TrackPond[msg.Cid])
               }
               logger.Info("摄像机:" + msg.Cid + "-没有人脸,被重置为空")
@@ -83,18 +89,26 @@
                  } else {
                     if TrackPond[msg.Cid] != nil {
                        logger.Info("更新当前摄像机缓存池中的yolo个数:", yoloNum)
                        lock.Lock()
                        TrackPond[msg.Cid].Yolo = yoloNum
                        lock.Unlock()
                     } else {
                        logger.Info("新建当前摄像机缓存池中的yolo个数:", yoloNum)
                        lock.Lock()
                        TrackPond[msg.Cid] = &PersonTrack{Yolo: yoloNum}
                        lock.Unlock()
                     }
                     return false
                  }
               } else {
                  if TrackPond[msg.Cid] != nil {
                     lock.Lock()
                     TrackPond[msg.Cid].Yolo = 0
                     lock.Unlock()
                  } else {
                     lock.Lock()
                     TrackPond[msg.Cid] = &PersonTrack{Yolo: 0}
                     lock.Unlock()
                  }
                  logger.Info("摄像机:" + msg.Cid + "-没有yolo,被重置为0")
                  continue
@@ -149,7 +163,9 @@
            if faceParam.Faces[i].Pos.FaceID == val.Id && faceParam.Faces[i].Pos.FAngle.Confidence > val.Score { // 在池子里并且分值更高,更新缓存
               faceFlag = true
               logger.Info("分值由", val.Score, "更新为:", faceParam.Faces[i].Pos.FAngle.Confidence, "此数据由于在池子中且分值更高,是要被传递下去的数据")
               lock.Lock()
               val.Score = faceParam.Faces[i].Pos.FAngle.Confidence
               lock.Unlock()
            }
         }
         if !faceFlag { // 此人脸不在池子中
@@ -180,10 +196,14 @@
         } else {
            // 此数据在缓存中但不在来的数据帧中,删除此数据更新缓存
            logger.Info("删除池子中的数据更新缓存")
            lock.Lock()
            TrackPond[cameraId].Faces = append(TrackPond[cameraId].Faces[:i], TrackPond[cameraId].Faces[i+1:]...)
            lock.Unlock()
         }
      }
   } else {
      lock.Lock()
      TrackPond[cameraId] = &PersonTrack{Faces: nil} 
      lock.Unlock()
   }
}