panlei
2019-10-22 f2035d0fcbb1f09fdc00c468ed6a3d0842d0ad02
加一行空格测试goland ctrl+k
1个文件已修改
132 ■■■■ 已修改文件
ruleserver/personTrack.go 132 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruleserver/personTrack.go
@@ -21,6 +21,7 @@
}
var num int = 25
// 检查是否前后两次的数据id是否完全相同(人脸)
func FaceIsSame(msg *protomsg.SdkMessage) {
    logger.Debug("+++++++++++++++++++++人脸追踪开始+++++++++++++++摄像机id为:", msg.Cid, "---缓存池为:", TrackPond)
@@ -32,7 +33,7 @@
                FaceIsInPond(msg.Cid, sdkinfo)
            } else {
                if num > 0 { // 连续num次没有数据才算是没有数据,不然只算作丢帧
                    logger.Info("我认为你只是丢帧了,此时的num值为:",num)
                    logger.Info("我认为你只是丢帧了,此时的num值为:", num)
                    num--
                } else {
                    if TrackPond[msg.Cid] != nil {
@@ -56,71 +57,71 @@
}
//  追踪人体,检查数量是否一致
func BodyIsSame(msg *protomsg.SdkMessage) bool{
func BodyIsSame(msg *protomsg.SdkMessage) bool {
    logger.Debug("+++++++++++++++++++++人体追踪开始+++++++++++++++摄像机id为:", msg.Cid, "---缓存池为:", TrackPond)
    for _, sdkinfo := range msg.Tasklab.Sdkinfos { // 遍历各算法的sdkData
        if sdkinfo.Sdktype == "Yolo" {
                    if len(sdkinfo.Sdkdata) > 1 {
                        yoloParam := protomsg.ParamYoloObj{}
                        err := proto.Unmarshal(sdkinfo.Sdkdata, &yoloParam)
                        if err != nil {
                            logger.Info("解析yolo数据时出现错误", err)
                            continue
                        }
                        var yoloNum int = 0
                        for i := 0; i < len(yoloParam.Infos); i++ {
                            if yoloParam.Infos[i].Typ == 0 {
                                yoloNum++
                            }
                        }
                        if TrackPond[msg.Cid] != nil {
                            logger.Info("================追踪之前yolo的个数:", yoloNum, "现在缓存池中记录的个数:", TrackPond[msg.Cid].Yolo)
                        } else {
                            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)
                            //}
                            logger.Info("跟之前相同,清空yolo数据")
                            return true
                        } 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
                        }
            if len(sdkinfo.Sdkdata) > 1 {
                yoloParam := protomsg.ParamYoloObj{}
                err := proto.Unmarshal(sdkinfo.Sdkdata, &yoloParam)
                if err != nil {
                    logger.Info("解析yolo数据时出现错误", err)
                    continue
                }
                var yoloNum int = 0
                for i := 0; i < len(yoloParam.Infos); i++ {
                    if yoloParam.Infos[i].Typ == 0 {
                        yoloNum++
                    }
                }
                if TrackPond[msg.Cid] != nil {
                    logger.Info("================追踪之前yolo的个数:", yoloNum, "现在缓存池中记录的个数:", TrackPond[msg.Cid].Yolo)
                } else {
                    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)
                    //}
                    logger.Info("跟之前相同,清空yolo数据")
                    return true
                } else {
                    if TrackPond[msg.Cid] != nil {
                        logger.Info("更新当前摄像机缓存池中的yolo个数:", yoloNum)
                        lock.Lock()
                        TrackPond[msg.Cid].Yolo = yoloNum
                        lock.Unlock()
                    } 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
                        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
            }
        }
    }
    logger.Debug("---------------------------------人体追踪结束--------------------------------------")
    return false
}
func TrackOrNot(label map[string]interface{}) bool{
func TrackOrNot(label map[string]interface{}) bool {
    if label["yolo"] != nil && len(label["yolo"].([]structure.Result)) > 0 {
        for _,res := range label["yolo"].([]structure.Result) {
        for _, res := range label["yolo"].([]structure.Result) {
            if res.TimeLabel == "10" {
                return true
            }
@@ -133,8 +134,8 @@
func FaceIsInPond(cameraId string, sdkinfor *protomsg.SdkmsgWithTask) {
    if TrackPond[cameraId] != nil {
        logger.Info("----马前炮:", TrackPond[cameraId], "=====", len(TrackPond[cameraId].Faces))
        for _,face := range TrackPond[cameraId].Faces  {
            logger.Info("缓存中存储的face数据:",face.Id,face.Score)
        for _, face := range TrackPond[cameraId].Faces {
            logger.Info("缓存中存储的face数据:", face.Id, face.Score)
        }
        faceParam := protomsg.ParamFacePos{}
        err := proto.Unmarshal(sdkinfor.Sdkdata, &faceParam)
@@ -142,12 +143,12 @@
            logger.Info("解析face sdk数据时出现错误", err)
        }
        logger.Info("================追踪之前人脸的个数:", len(faceParam.Faces))
        for _,face := range faceParam.Faces  {
            logger.Info("新来的的face数据:",face.Pos.FaceID,face.Pos.FAngle.Confidence)
        for _, face := range faceParam.Faces {
            logger.Info("新来的的face数据:", face.Pos.FaceID, face.Pos.FAngle.Confidence)
        }
        var facesTemp []protomsg.ResultFaceDetect
        for _,face := range faceParam.Faces {
            facesTemp = append(facesTemp,*face) // 先把数据转存一份,不然一会儿数据删减之后找不到原始数据,不能让缓存数据更新了
        for _, face := range faceParam.Faces {
            facesTemp = append(facesTemp, *face) // 先把数据转存一份,不然一会儿数据删减之后找不到原始数据,不能让缓存数据更新了
        }
        for i := 0; i < len(faceParam.Faces); {
@@ -156,7 +157,7 @@
                if faceParam.Faces[i].Pos.FaceID == val.Id && faceParam.Faces[i].Pos.FAngle.Confidence <= val.Score { // 在池子里并且分值更低,是要抛弃的数据
                    faceFlag = true
                    //return "true"
                    logger.Info("分值为:",faceParam.Faces[i].Pos.FAngle.Confidence,"--缓存的分值为:",val.Score,"此数据由于在池子中且分值更低,是要被抛弃的数据")
                    logger.Info("分值为:", faceParam.Faces[i].Pos.FAngle.Confidence, "--缓存的分值为:", val.Score, "此数据由于在池子中且分值更低,是要被抛弃的数据")
                    faceParam.Faces = append(faceParam.Faces[:i], faceParam.Faces[i+1:]...)
                    break
                }
@@ -174,10 +175,11 @@
                i++
            }
        }
        logger.Info("反序列化重新装配之前人脸的个数:",len(faceParam.Faces))
        logger.Info("反序列化重新装配之前人脸的个数:", len(faceParam.Faces))
        logger.Info("临时存储的新来数据:")
        for _, temp := range facesTemp {
            logger.Info("临时存储的新来的的face数据:",temp.Pos.FaceID,temp.Pos.FAngle.Confidence)
            logger.Info("临时存储的新来的的face数据:", temp.Pos.FaceID, temp.Pos.FAngle.Confidence)
        }
        sdkinfor.Sdkdata, err = proto.Marshal(&faceParam)
        if err != nil {
@@ -203,7 +205,7 @@
        }
    } else {
        lock.Lock()
        TrackPond[cameraId] = &PersonTrack{Faces: nil}
        TrackPond[cameraId] = &PersonTrack{Faces: nil}
        lock.Unlock()
    }
}