| | |
| | | triggerLine string |
| | | directionLine string |
| | | targetNum int // 区域内目标数量 |
| | | args []*Arg // 区域内目标集合 |
| | | filterData []*Arg // 过滤后区域内目标集合 |
| | | args []*Arg // 区域内目标集合 |
| | | filterData []*Arg // 过滤后区域内目标集合 |
| | | time string // 当前时间(用以匹配时间规则) |
| | | keepRight bool // 是否靠右行 |
| | | isStatic bool // 是否静止 |
| | |
| | | IsStatic bool // 是否静止 |
| | | ImageWidth int // 摄像机拍摄的图像宽 像素 |
| | | ImageHeight int // 摄像机拍摄的图像高 像素 |
| | | AreaMapList []*AreaMap // 本sdk提取的数据按照区域划分后的数据集合 |
| | | AreaMapList []*AreaMap // 本sdk提取的数据按照区域划分后的数据集合 |
| | | } |
| | | |
| | | // 从算法模块儿拿来的对一帧图像各个算法提取的数据集合 |
| | |
| | | |
| | | // 过规则库打上的标签 |
| | | type Result struct { |
| | | TaskId string // 任务id |
| | | SdkName string |
| | | RuleGroupId string // 规则组id |
| | | AlarmLevel int32 // 报警等级 |
| | | RuleText string // 文字版规则组 |
| | | Location []Rect |
| | | TaskId string // 任务id |
| | | SdkName string |
| | | RuleGroupId string // 规则组id |
| | | AlarmLevel int32 // 报警等级 |
| | | RuleText string // 文字版规则组 |
| | | Location []Rect // 目标的坐标 |
| | | AlarmPolygon string // 触发的报警框 |
| | | } |
| | | type LittleRuleResult struct { |
| | | SdkName string // 记录下此结果是哪个sdk的结果 |
| | |
| | | } |
| | | } |
| | | } |
| | | func (arg *Arg) fillLiker(){ |
| | | |
| | | // 给目标填充liker |
| | | func (arg *Arg) fillLiker() { |
| | | bytes := bigCache.Getdbpersonmsg("", arg.Feature, true) |
| | | var m map[string]float32 |
| | | err1 := json.Unmarshal(bytes, &m) |
| | |
| | | if compareFlag == 2 { |
| | | array := strings.Split(tableIds, ",") |
| | | for i := 0; i < len(array)-1; i++ { |
| | | bytes := bigCache.Getdbpersonmsg(array[i], arg.Feature, true) |
| | | var m map[string]float32 |
| | | err1 := json.Unmarshal(bytes, &m) |
| | | if err1 != nil { |
| | | logger.Error("getBaseInfo解压错误", err1) |
| | | } |
| | | for key, val := range m { |
| | | baseinfo, err1 := esutil.Dbpersoninfosbyid(key) |
| | | if err1 != nil { |
| | | logger.Error("查询底库人员信息出错", err1) |
| | | } |
| | | baseinfo.CompareScore = val |
| | | arg.Liker = append(arg.Liker, &baseinfo) |
| | | } |
| | | arg.fillLiker() |
| | | } |
| | | } |
| | | logger.Info("-------------------成功给liker赋值,长度为:", len(arg.Liker)) |
| | | } |
| | | areaMap.filterData = areaMap.args |
| | | logger.Info("=======第一次看args:",areaMap.filterData) |
| | | //logger.Info("=======第一次看args:",(areaMap.filterData)) |
| | | } |
| | | } |
| | | } |
| | |
| | | Compare(args, groupRule) |
| | | resultSplice := []*LittleRuleResult{} |
| | | sdkNames := "" |
| | | polygonId := "" |
| | | // 先过完条件规则 |
| | | for j := 0; j < len(groupRule.Rules); j++ { |
| | | for _, sdkData := range args.Sdkdata { |
| | |
| | | } |
| | | ipcId := sdk.IpcId |
| | | sdkName := sdk.SdkName |
| | | logger.Info("规则的ipcId与sdkData的IpcId:",ipcId,"===",sdkData.IpcId) |
| | | logger.Info("规则的ipcId与sdkData的IpcId:", ipcId, "===", sdkData.IpcId) |
| | | if ipcId == sdkData.IpcId { |
| | | logger.Info("当前走的规则的算法是--:", sdkName, "---") |
| | | for _, areaMap := range sdkData.AreaMapList { |
| | | ruleResult := filterRule(groupRule.Rules[j], areaMap) |
| | | if ruleResult.Result != "" { |
| | | logger.Info("条件规则结果:", ruleResult.Result) |
| | | // 如果此结果为真且当前过的是yolo算法,应记下此规则所对应的sdkName,另外,还要去重 |
| | | if ruleResult.Result == "true" && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) { |
| | | // 如果此结果为真且当前过的是yolo算法,应记下此规则所对应的sdkName,另外,还要去重 (后加:把此条触碰的区域id也记录下来) |
| | | if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) { |
| | | sdkNames = sdkName + "," |
| | | polygonId = groupRule.Rules[j].PolygonId + "," |
| | | } |
| | | if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(polygonId, groupRule.Rules[j].PolygonId) { |
| | | polygonId = groupRule.Rules[j].PolygonId + "," |
| | | } |
| | | resultSplice = append(resultSplice, &ruleResult) |
| | | } |
| | |
| | | ruleResult := transferParameters(groupRule.Rules[j], areaMap) |
| | | if ruleResult.Result != "" { |
| | | logger.Info("数量规则结果:", ruleResult.Result) |
| | | if ruleResult.Result == "true" && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) { |
| | | if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(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 + "," |
| | | } |
| | | resultSplice = append(resultSplice, &ruleResult) |
| | | } |
| | |
| | | ruleResult := timeRuleResult(groupRule.Rules[j], areaMap) |
| | | if ruleResult.Result != "" { |
| | | logger.Info("时间规则结果:", ruleResult.Result) |
| | | if ruleResult.Result == "true" && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) { |
| | | if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(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 + "," |
| | | } |
| | | resultSplice = append(resultSplice, &ruleResult) |
| | | } |
| | |
| | | } |
| | | } |
| | | if sdkNames != "" { |
| | | args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkNames, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, locations}) |
| | | args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkNames, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, locations,polygonId}) |
| | | logger.Info("-------------------yolo结果标签", args.RuleResult["yolo"].([]Result)) |
| | | } |
| | | if args.RuleResult["face"] != nil { |
| | |
| | | return false |
| | | } |
| | | } |
| | | func TimerAlarm(groupId string) (int){ |
| | | func TimerAlarm(groupId string) (int) { |
| | | var flagTime int = 0 |
| | | for k, timeEle := range TimeEleList { |
| | | if strings.Contains(k, groupId) { |
| | |
| | | result, _ := expression.Evaluate(nil) // 得到数学公式的结果 |
| | | if result.(bool) { |
| | | logger.Info("___________________________________________________________________联动任务报警") |
| | | args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, "", groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, []Rect{}}) |
| | | args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, "", groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, []Rect{},""}) |
| | | logger.Info("-------------------yolo结果标签有几个", len(args.RuleResult["yolo"].([]Result))) |
| | | if args.RuleResult["face"] != nil { |
| | | logger.Info("-------------------face结果标签有几个", len(args.RuleResult["face"].([]Arg))) |