panlei
2019-10-22 cf6237c84f750ff595064c6685039ebffd4ef50d
对人脸追踪加锁
1个文件已修改
22 ■■■■■ 已修改文件
ruleserver/personTrack.go 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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()
    }
}