| | |
| | | |
| | | 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 // 人脸的数组 改为数量 |
| | |
| | | } 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 + "-没有人脸,被重置为空") |
| | |
| | | } 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 |
| | |
| | | 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 { // 此人脸不在池子中 |
| | |
| | | } 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() |
| | | } |
| | | } |