| | |
| | | } |
| | | } |
| | | } |
| | | // 作弊,直接让其比对全部底库 |
| | | // 为了测试作下弊,直接让其比对全部底库 |
| | | compareFlag = 1 |
| | | if compareFlag == 0 { |
| | | logger.Info("没有配置对比底库参数") |
| | |
| | | logger.Error("没查到sdk的信息---", err) |
| | | } |
| | | ipcId := sdk.IpcId |
| | | sdkName := sdk.SdkName |
| | | if ipcId == sdkData.IpcId { |
| | | for _, areaMap := range sdkData.AreaMapList { |
| | | ruleResult := duration(groupRule.Rules[j], &areaMap, args) |
| | | if ruleResult.Result != "" { |
| | | logger.Info("时间规则结果:", ruleResult.Result) |
| | | if ruleResult.Result == "true" && !strings.Contains(sdkNames, sdkName) { |
| | | sdkNames = sdkName + "," |
| | | } |
| | | resultSplice = append(resultSplice, &ruleResult) |
| | | } |
| | | duration(groupRule.Rules[j], &areaMap, args) |
| | | } |
| | | } |
| | | } |
| | |
| | | timeEle.N = timeEle.InitN // 重置定时器 |
| | | } |
| | | } |
| | | logger.Info("-------------------重置可能存在的定时器并返回false---------------") |
| | | logger.Info("-------------------重置相关的定时器并返回false---------------") |
| | | return false |
| | | } else { |
| | | // 判断持续时间条件,去看池子里是否有与本帧数据有关的定时器,如果有,看此时是否走到0,没有此定时器或有定时器走到0的话返回成功报警 |
| | | var flag bool = true |
| | | for k, timeEle := range TimeEleList { |
| | | if strings.Contains(k, taskId) { |
| | | if timeEle.N != 0 { // 跟这个任务有关的定时器要全部等于0 |
| | | logger.Info("———————————-------------不冤,你是被定时器打败的:") |
| | | flag = false |
| | | } |
| | | } |
| | | } |
| | | if flag { |
| | | // 最后成功报警才把符合条件的人脸数据塞进结果标签里 |
| | | // 配了人脸的算法才把人脸的数据甩出来打标签 |
| | | faces := []Arg{} |
| | | faceFlag := false |
| | | for j := 0; j < len(groupRule.Rules); j++ { |
| | |
| | | } |
| | | } |
| | | } |
| | | // 配了人脸的算法才把人脸的数据甩出来打标签 |
| | | if faceFlag { |
| | | args.RuleResult["face"] = faces |
| | | } |
| | | // 去看池子里是否有与本帧数据有关的定时器,如果有,看此时是否走到0,没有此定时器或有定时器走到0的话返回成功报警 |
| | | var flag bool = true |
| | | for k, timeEle := range TimeEleList { |
| | | if strings.Contains(k, taskId) { |
| | | if timeEle.N != 0 { // 跟这个任务有关的定时器要全部等于0 |
| | | logger.Info("———————————-------------不冤,你是被定时器打败的:") |
| | | flag = false |
| | | } |
| | | } |
| | | } |
| | | if flag { |
| | | logger.Warn("___________________________________________________________________________终于走完万里长征") |
| | | // 把他们的位置数据也传下去 |
| | | locations := []Rect{} |
| | |
| | | } |
| | | } |
| | | |
| | | // 都过滤完条件之后看看是否要创建一个定时器元素 创建定时器的条件:是否有靠右行,个体静止等自带定时器含义的算法以及是否有持续时间 |
| | | // 都过滤完条件之后看看是否满足持续时间条件 |
| | | func duration(rule *protomsg.Rule, am *AreaMap, args *SdkDatas) LittleRuleResult{ |
| | | if rule.PolygonId == am.areaId { // 首先规则所对应的区域id要跟区域数据的id对的上 配置的算法要对的上 |
| | | if rule.SdkArgAlias == "duration" { // |
| | |
| | | flag = false // 有就置为false |
| | | logger.Info("有这个定时器,不再创建了:") |
| | | // 看看定时器中的值是否为0 如果为0应该报警,如果不为0返回false,未达到持续时间的要求 |
| | | if value.N == 0 { |
| | | 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("------------------------------持续时间条件不满足") |