| | |
| | | "encoding/json" |
| | | "fmt" |
| | | "log" |
| | | "os" |
| | | "ruleprocess/cache" |
| | | "sort" |
| | | "strconv" |
| | |
| | | } |
| | | // 跑本摄像机的所有规则组 一组一组跑 |
| | | taskRuleList := GetRuleGroup(args.CameraId) // 本摄像机下所有任务组 |
| | | log.Println("------------------------------查看下全部规则:",taskRuleList) |
| | | //log.Println("看下摄像机下的任务组:",taskRuleList) |
| | | // 得到属于该摄像机的若干组任务的完整规则(跟每一条完整规则比较之后得出本张图像对于某个规则是否报警的结果。放进map,比如本帧图像的id,所碰撞成功的规则id) |
| | | args.RuleResult = make(map[string]interface{}) |
| | |
| | | expression, _ := govaluate.NewEvaluableExpression(completeFormula) |
| | | result, _ := expression.Evaluate(nil) // 得到数学公式的结果 |
| | | if result.(bool) { |
| | | log.Println("___________________________________________________________________联动任务报警") |
| | | sdkName := "" |
| | | for j := 0; j < len(groupRule.Rules); j++ { |
| | | for _, sdkData := range args.Sdkdata { |
| | | if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo { // 只记录yolo符合规则的sdk |
| | | sdkName = sdkName + "," + sdkData.SdkName |
| | | if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo && !strings.Contains(sdkName,sdkData.SdkName) { // 只记录yolo符合规则的sdk 同时要避免重复拼接 |
| | | sdkName = sdkData.SdkName + " " |
| | | } |
| | | } |
| | | } |
| | | // 过完规则后打个标签,告诉调用者本帧数据针对哪个任务哪组规则报警了 |
| | | args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText}) |
| | | if sdkName != "" { |
| | | args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText}) |
| | | log.Println("-------------------yolo结果标签",args.RuleResult["yolo"].([]Result)) |
| | | } |
| | | if args.RuleResult["face"] != nil { |
| | | log.Println("-------------------face结果标签",args.RuleResult["face"].([]Arg)) |
| | | } |
| | | os.Exit(0) |
| | | } |
| | | } |
| | | } else { |