panlei
2019-11-14 29db47f39c7bc0940592c96b587f51e4f0c659c1
看看缓存数据
2个文件已修改
41 ■■■■ 已修改文件
algorithm/static/static.go 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruleserver/ruleToformula.go 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
algorithm/static/static.go
@@ -116,7 +116,7 @@
        logger.Info("之前无缓存")
        objs := []*structure.Obj{}
        for _, tar := range am.FilterData {
            obj := &structure.Obj{Id: tar.Id, Location: tar.Location, N: initN,InitN:initN}
            obj := &structure.Obj{Id: tar.Id, Location: tar.Location, N: initN,InitN:initN,CacheSdkData:structure.ResultMsg{message, nil}}
            objs = append(objs, obj)
        }
        structure.StaticMap[am.AreaId] = &structure.CameraArea{objs}
@@ -190,20 +190,20 @@
        }
    }
    if flag { // 当前检测对象保持静止(id相等并且重合度高于阈值)
        flagTime := TimerAlarm(lable,person,flag,am.AreaId)
        flagTime := TimerAlarm(o,person,flag,am.AreaId)
        if flagTime == "10" || flagTime == "11" {
            return flag,o
        } else {
            return false,o
        }
    } else {
        TimerAlarm(lable,person,flag,am.AreaId)
        TimerAlarm(o,person,flag,am.AreaId)
        return flag,o
    }
}
var rw sync.RWMutex
// 判断是否符合定时器条件
func TimerAlarm(oth *structure.Others,person *structure.Obj, result bool,areaId string) (string) {
func TimerAlarm(o *structure.Arg,person *structure.Obj, result bool,areaId string) (string) {
    var flagTime string //
    logger.Info("目标的定时器:")
    rw.Lock()
@@ -214,15 +214,12 @@
                    if tar.N == 0 && tar.AlarmFlag {
                        logger.Debug("-------------------------符合持续时间规则但并不是首次,不报警")
                        flagTime = "11"
                        oth.TimeLabel = flagTime
                    }
                    if tar.N == 0 && !tar.AlarmFlag { // 这组规则的定时器要全部等于0   暂且认为一组规则只有一个定时器
                        logger.Debug("———————————-------------首次符合持续时间规则并报警")
                        flagTime = "10"
                        tar.AlarmFlag = true
                        oth.CacheData = []structure.ResultMsg{}
                        oth.CacheData = append(oth.CacheData,tar.CacheSdkData)
                        oth.TimeLabel = flagTime
                        o.CacheData = tar.CacheSdkData
                    }
                    if tar.N != 0 {
                        flagTime = "00"
@@ -239,7 +236,6 @@
                        if tar.BufferFlag == 0 {
                            logger.Debug("------------------------------杀死计数器,报警此帧状态改变的数据,此时的计数器的值为", tar.N)
                            flagTime = "12"
                            oth.TimeLabel = flagTime
                            structure.StaticMap[areaId].Targets = append(structure.StaticMap[areaId].Targets[:index],structure.StaticMap[areaId].Targets[index+1:]...)
                        } else {
                            if tar.BufferFlag > 0 {
ruleserver/ruleToformula.go
@@ -109,7 +109,7 @@
        for _, areaMap := range sdkData.AreaMapList {
            targets = append(targets,areaMap.AlarmObj...)
            for _,obj := range areaMap.AlarmObj {
                logger.Info("个体静止的目标",obj.Id,obj.Location)
                logger.Info("个体静止的目标",obj.Id,obj.Location,obj.CacheData)
            }
        }
    }
@@ -174,6 +174,17 @@
                }
            }
            logger.Debug("------locations的内容:", yolos)
            // 处理目标定时数据
            //targets := []*structure.Arg{}
            //for _, sdkData := range args.Sdkdata {
            //    if sdkData.IpcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && sdkNames != "" { // 把yolo数据的各个目标的坐标输出方便后面画框
            //        for _, areaMap := range sdkData.AreaMapList {
            //            if areaMap.IsEffective {
            //                yolos = append(yolos, putTargetsToResult(areaMap)...)
            //            }
            //        }
            //    }
            //}
            var islink bool
            if groupRule.SetType == "linkTask" {
                islink = true
@@ -191,6 +202,11 @@
                //logger.Info("-------------------face结果标签", len(args.RuleResult["face"].([]FaceResult)))
                labelTypes = append(labelTypes,1)
            }
            //if len(targets) > 0 {
            //    args.RuleResult["target"] = append(args.RuleResult["target"].([]structure.Result), structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, targets, polygonId, islink,label})
            //    //logger.Info("-------------------目标持续结果标签", len(args.RuleResult["face"].([]FaceResult)))
            //    //labelTypes = append(labelTypes,2)
            //}
            // 给持续时间的第一张赋予缓存数据(遍历复制)
            if cacheId != "" { // 有这帧数据的缓存
                tempMap := make(map[string]interface{})
@@ -253,7 +269,14 @@
    //logger.Println("-----------------------------------------------听说你是空的?",faces)
    return locations
}
func putTargetsToResult(am *structure.AreaMap) []*structure.Arg {
    locations := []*structure.Arg{}
    if len(am.AlarmObj) > 0 {
        locations = am.AlarmObj
    }
    //logger.Println("-----------------------------------------------听说你是空的?",faces)
    return locations
}
// 联动任务的处理
func LinkTask(args *structure.SdkDatas, groupRule *protomsg.GroupRule, taskId string, message *protomsg.SdkMessage, label structure.Others) {
    // new一个定时器,如果以此groupId为标志的定时器不存在的话