| | |
| | | } |
| | | } |
| | | } |
| | | // 人体追踪 |
| | | // 如果标签中含有持续时间首次报警的timeLabel的话则不需要过人体追踪,不然就没的插入了 |
| | | fk := TrackOrNot(args.RuleResult) |
| | | if !fk { |
| | | BodyIsSame(args,message) |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | // 如果此结果为真且当前过的是yolo算法,应记下此规则所对应的sdkName,另外,还要去重 (后加:把此条触碰的区域id也记录下来) |
| | | if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) { |
| | | sdkNames = sdkName + "," |
| | | sdkNames = sdkName + " " |
| | | } |
| | | if strings.Contains(ruleResult.Result, "true") && !strings.Contains(polygonId, groupRule.Rules[j].PolygonId) { |
| | | polygonId = groupRule.Rules[j].PolygonId + "," |
| | | polygonId = groupRule.Rules[j].PolygonId + " " |
| | | } |
| | | resultSplice = append(resultSplice, &ruleResult) |
| | | } |
| | |
| | | } |
| | | logger.Info("数量规则结果:", ruleResult.Result) |
| | | if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) { |
| | | sdkNames = sdkName + "," |
| | | sdkNames = sdkName + " " |
| | | } |
| | | if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(polygonId, groupRule.Rules[j].PolygonId) { |
| | | polygonId = groupRule.Rules[j].PolygonId + "," |
| | | polygonId = groupRule.Rules[j].PolygonId + " " |
| | | } |
| | | resultSplice = append(resultSplice, &ruleResult) |
| | | } |
| | |
| | | } |
| | | logger.Info("时间规则结果:", ruleResult.Result) |
| | | if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) { |
| | | sdkNames = sdkName + "," |
| | | sdkNames = sdkName + " " |
| | | } |
| | | if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(polygonId, groupRule.Rules[j].PolygonId) { |
| | | polygonId = groupRule.Rules[j].PolygonId + "," |
| | | polygonId = groupRule.Rules[j].PolygonId + " " |
| | | } |
| | | resultSplice = append(resultSplice, &ruleResult) |
| | | } |
| | |
| | | for _, sdkData := range args.Sdkdata { |
| | | if sdkData.IpcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && sdkNames != "" { // 把yolo数据的各个目标的坐标输出方便后面画框 |
| | | for _, areaMap := range sdkData.AreaMapList { |
| | | locations = append(locations, putYolosToResult(areaMap)...) |
| | | if areaMap.IsEffective { |
| | | locations = append(locations, putYolosToResult(areaMap)...) |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | rw.Unlock() |
| | | // 因为本帧数据不符合规则,所以也不用统计结果数组里的东西 |
| | | |
| | | } |
| | | } |
| | | |
| | |
| | | // 处理的都是yolo数据 |
| | | if rule.PolygonId == am.AreaId { // 首先这条规则得是这个算法的规则,其次规则所对应的区域id要跟区域数据的id对的上 |
| | | if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 判断的是相似值,占比,尺寸等过滤条件,如果再有,还可以再加 |
| | | logger.Info("区域数据:",am.AreaJson) |
| | | var args []*structure.Arg |
| | | if rule.RuleWithPre == "&&" { |
| | | args = am.FilterData |
| | |
| | | } |
| | | } |
| | | am.TargetNum = len(am.FilterData) // 把符合条件的目标数量更新到targetNum字段 |
| | | for _,tar := range am.FilterData { |
| | | logger.Info("具体目标的坐标为",tar.Id,tar.Location) |
| | | } |
| | | if am.TargetNum > 0 { |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} |
| | | } else { |