| | |
| | | } |
| | | } |
| | | } |
| | | // 作弊,直接让其比对全部底库 |
| | | // 为了测试作下弊,直接让其比对全部底库 |
| | | compareFlag = 1 |
| | | if compareFlag == 0 { |
| | | logger.Info("没有配置对比底库参数") |
| | |
| | | timeEle.N = timeEle.InitN // 重置定时器 |
| | | } |
| | | } |
| | | logger.Info("-------------------重置可能存在的定时器并返回false---------------") |
| | | logger.Info("-------------------重置相关的定时器并返回false---------------") |
| | | return false |
| | | } else { |
| | | // 最后成功报警才把符合条件的人脸数据塞进结果标签里 |
| | | faces := []Arg{} |
| | | faceFlag := false |
| | | for j := 0; j < len(groupRule.Rules); j++ { |
| | | if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" { |
| | | faceFlag = true |
| | | } |
| | | } |
| | | for _, sdkData := range args.Sdkdata { |
| | | if sdkData.IpcId == "A8B73405-373D-4F23-CED2-A617EBD7EC55" && faceFlag { // sdkData里有人脸数据且配置了算法才把符合条件的数据塞进标签里去 |
| | | for _, areaMap := range sdkData.AreaMapList { |
| | | faces = append(faces, putFaceToResult(&areaMap)...) |
| | | } |
| | | } |
| | | } |
| | | // 配了人脸的算法才把人脸的数据甩出来打标签 |
| | | if faceFlag { |
| | | args.RuleResult["face"] = faces |
| | | } |
| | | // 去看池子里是否有与本帧数据有关的定时器,如果有,看此时是否走到0,没有此定时器或有定时器走到0的话返回成功报警 |
| | | // 判断持续时间条件,去看池子里是否有与本帧数据有关的定时器,如果有,看此时是否走到0,没有此定时器或有定时器走到0的话返回成功报警 |
| | | var flag bool = true |
| | | for k, timeEle := range TimeEleList { |
| | | if strings.Contains(k, taskId) { |
| | |
| | | } |
| | | } |
| | | if flag { |
| | | // 最后成功报警才把符合条件的人脸数据塞进结果标签里 |
| | | // 配了人脸的算法才把人脸的数据甩出来打标签 |
| | | faces := []Arg{} |
| | | faceFlag := false |
| | | for j := 0; j < len(groupRule.Rules); j++ { |
| | | if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" { |
| | | faceFlag = true |
| | | } |
| | | } |
| | | for _, sdkData := range args.Sdkdata { |
| | | if sdkData.IpcId == "A8B73405-373D-4F23-CED2-A617EBD7EC55" && faceFlag { // sdkData里有人脸数据且配置了算法才把符合条件的数据塞进标签里去 |
| | | for _, areaMap := range sdkData.AreaMapList { |
| | | faces = append(faces, putFaceToResult(&areaMap)...) |
| | | } |
| | | } |
| | | } |
| | | if faceFlag { |
| | | args.RuleResult["face"] = faces |
| | | } |
| | | logger.Warn("___________________________________________________________________________终于走完万里长征") |
| | | // 把他们的位置数据也传下去 |
| | | locations := []Rect{} |
| | |
| | | } |
| | | } |
| | | |
| | | // 都过滤完条件之后看看是否要创建一个定时器元素 创建定时器的条件:是否有靠右行,个体静止等自带定时器含义的算法以及是否有持续时间 |
| | | func duration(rule *protomsg.Rule, am *AreaMap, args *SdkDatas) { |
| | | // 都过滤完条件之后看看是否满足持续时间条件 |
| | | func duration(rule *protomsg.Rule, am *AreaMap, args *SdkDatas) LittleRuleResult{ |
| | | if rule.PolygonId == am.areaId { // 首先规则所对应的区域id要跟区域数据的id对的上 配置的算法要对的上 |
| | | if rule.SdkArgAlias == "duration" { // |
| | | // 先看看定时器元素队列中是否有这个摄像机这个区域的定时器,如果有就不能再次创建了 |
| | | var flag bool = true |
| | | for k, _ := range TimeEleList { |
| | | for k,value := range TimeEleList { |
| | | if k == am.taskId+" "+am.sdkId+" "+am.areaId { |
| | | flag = false // 有就置为false |
| | | logger.Info("有这个定时器,不再创建了:") |
| | | // 看看定时器中的值是否为0 如果为0应该报警,如果不为0返回false,未达到持续时间的要求 |
| | | if value.N == 0 && !value.AlarmFlag{ |
| | | // 报警之后改为置为true 后面的报警图片就不报了,顺便把缓存的那张图片也给结果标签 |
| | | value.AlarmFlag = true |
| | | args.RuleResult["cacheData"] = value.CacheSdkData |
| | | return LittleRuleResult{am.sdkName, "true" + "" + rule.RuleWithPre, rule.Sort} |
| | | }else { |
| | | logger.Info("------------------------------持续时间条件不满足") |
| | | return LittleRuleResult{am.sdkName, "false" + "" + rule.RuleWithPre, rule.Sort} |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | //TimeEleList = make(map[string]timeElement) |
| | | TimeEleList[am.taskId+" "+am.sdkId+" "+am.areaId] = &timeEle // 定时器元素以摄像机id拼接区域id为键 |
| | | logger.Info("创建了计数器并且计数器集合为:", TimeEleList) |
| | | return LittleRuleResult{am.sdkName, "false" + "" + rule.RuleWithPre, rule.Sort} |
| | | } |
| | | } |
| | | } |
| | | return LittleRuleResult{} |
| | | } |
| | | |
| | | // 给数据库的规则表达式代参 args: 一条子规则,区域数据 |