| | |
| | | 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提取的数据按照区域划分后的数据集合 |
| | | } |
| | | |
| | | // 从算法模块儿拿来的对一帧图像各个算法提取的数据集合 |
| | |
| | | areaMap := AreaMap{cameraId: cameraId, areaId: polygon.Id, areaJson: polygon.Polygon, triggerLine: polygon.TriggerLine, directionLine: polygon.DirectionLine} |
| | | // 为每个摄像机区域填充数据 |
| | | areaMap.CountAreaObjs(arg) |
| | | arg.AreaMapList = append(arg.AreaMapList, areaMap) |
| | | arg.AreaMapList = append(arg.AreaMapList, &areaMap) |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | logger.Info("-------------------成功给liker赋值,长度为:", len(arg.Liker)) |
| | | } |
| | | //logger.Info("=======第一次看args:",areaMap.args) |
| | | areaMap.filterData = areaMap.args |
| | | logger.Info("=======第一次看args:",areaMap.filterData) |
| | | } |
| | | } |
| | | } |
| | |
| | | if ipcId == sdkData.IpcId { |
| | | logger.Info("当前走的规则的算法是--:", sdkName, "---") |
| | | for _, areaMap := range sdkData.AreaMapList { |
| | | ruleResult := filterRule(groupRule.Rules[j], &areaMap) |
| | | ruleResult := filterRule(groupRule.Rules[j], areaMap) |
| | | if ruleResult.Result != "" { |
| | | logger.Info("条件规则结果:", ruleResult.Result) |
| | | // 如果此结果为真且当前过的是yolo算法,应记下此规则所对应的sdkName,另外,还要去重 |
| | |
| | | sdkName := sdk.SdkName |
| | | if ipcId == sdkData.IpcId { |
| | | for _, areaMap := range sdkData.AreaMapList { |
| | | ruleResult := transferParameters(groupRule.Rules[j], &areaMap) |
| | | 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) { |
| | |
| | | sdkName := sdk.SdkName |
| | | if ipcId == sdkData.IpcId { |
| | | for _, areaMap := range sdkData.AreaMapList { |
| | | ruleResult := timeRuleResult(groupRule.Rules[j], &areaMap) |
| | | 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 ipcId == sdkData.IpcId { |
| | | for _, areaMap := range sdkData.AreaMapList { |
| | | // 去开启一个定时器 |
| | | duration(groupRule.Rules[j], groupRule.GroupId, &areaMap, args) |
| | | duration(groupRule.Rules[j], groupRule.GroupId, areaMap, args) |
| | | } |
| | | } |
| | | } |
| | |
| | | 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)...) |
| | | faces = append(faces, putFaceToResult(areaMap)...) |
| | | } |
| | | } |
| | | } |
| | |
| | | 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)...) |
| | | locations = append(locations, putYolosToResult(areaMap)...) |
| | | } |
| | | } |
| | | } |
| | |
| | | faces := []Arg{} |
| | | if len(am.filterData) > 0 { |
| | | for _, data := range am.filterData { |
| | | faces = append(faces, data) |
| | | faces = append(faces, *data) |
| | | } |
| | | } |
| | | |
| | |
| | | a.targetNum++ |
| | | arg1 := Arg{obj.Score, PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), obj.IsYolo, obj.Rects, obj.Feature, obj.ThftRes, []*protomsg.Baseinfo{}} |
| | | //logger.Println("放进去的arg:-------", arg1) |
| | | a.args = append(a.args, arg1) |
| | | a.filterData = append(a.filterData, arg1) |
| | | a.args = append(a.args, &arg1) |
| | | a.filterData = append(a.filterData, &arg1) |
| | | } |
| | | } |
| | | a.time = time.Unix(time.Now().Unix(), 0).String()[11:16] |
| | |
| | | // 如果是不规矩的连接符统统返回false 规则也只能判断人脸的相似度,所以不存在别的连接符 |
| | | if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 判断的是相似值,占比,尺寸等过滤条件,如果再有,还可以再加 |
| | | logger.Info("--------------------终于等到你的下文") |
| | | var args []Arg |
| | | var args []*Arg |
| | | if rule.RuleWithPre == "&&" { |
| | | args = am.filterData |
| | | } else { |
| | |
| | | if rule.PolygonId == am.areaId { // 首先这条规则得是这个算法的规则,其次规则所对应的区域id要跟区域数据的id对的上 |
| | | if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 判断的是相似值,占比,尺寸等过滤条件,如果再有,还可以再加 |
| | | logger.Info("----------当前条件规则:---------", rule) |
| | | var args []Arg |
| | | var args []*Arg |
| | | if rule.RuleWithPre == "&&" { |
| | | args = am.filterData |
| | | } else { |