panlei
2019-07-11 95652c49ee7c0a4a9b167c6bcbe585ebd58ab2e5
把areamap arg等数组换成指针形式
1个文件已修改
33 ■■■■ 已修改文件
ruleserver/ruleToformula.go 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruleserver/ruleToformula.go
@@ -89,8 +89,8 @@
    triggerLine   string
    directionLine string
    targetNum     int    // 区域内目标数量
    args          []Arg  // 区域内目标集合
    filterData    []Arg  // 过滤后区域内目标集合
    args          []*Arg  // 区域内目标集合
    filterData    []*Arg  // 过滤后区域内目标集合
    time          string // 当前时间(用以匹配时间规则)
    keepRight     bool   // 是否靠右行
    isStatic      bool   // 是否静止
@@ -115,7 +115,7 @@
    IsStatic    bool       // 是否静止
    ImageWidth  int        // 摄像机拍摄的图像宽 像素
    ImageHeight int        // 摄像机拍摄的图像高 像素
    AreaMapList []AreaMap  // 本sdk提取的数据按照区域划分后的数据集合
    AreaMapList []*AreaMap  // 本sdk提取的数据按照区域划分后的数据集合
}
// 从算法模块儿拿来的对一帧图像各个算法提取的数据集合
@@ -180,7 +180,7 @@
        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)
    }
}
@@ -295,7 +295,8 @@
                                }
                                logger.Info("-------------------成功给liker赋值,长度为:", len(arg.Liker))
                            }
                            //logger.Info("=======第一次看args:",areaMap.args)
                            areaMap.filterData = areaMap.args
                            logger.Info("=======第一次看args:",areaMap.filterData)
                        }
                    }
                }
@@ -327,7 +328,7 @@
            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,另外,还要去重
@@ -353,7 +354,7 @@
            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) {
@@ -376,7 +377,7 @@
            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) {
@@ -399,7 +400,7 @@
            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)
                }
            }
        }
@@ -466,7 +467,7 @@
                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)...)
                        }
                    }
                }
@@ -479,7 +480,7 @@
                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)...)
                        }
                    }
                }
@@ -521,7 +522,7 @@
    faces := []Arg{}
    if len(am.filterData) > 0 {
        for _, data := range am.filterData {
            faces = append(faces, data)
            faces = append(faces, *data)
        }
    }
@@ -558,8 +559,8 @@
            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]
@@ -727,7 +728,7 @@
                    // 如果是不规矩的连接符统统返回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 {
@@ -776,7 +777,7 @@
        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 {