panlei
2019-12-13 5457fe77b87d5d1b191958aafa4974affb93a7ec
前者包含后者
1个文件已添加
8个文件已修改
137 ■■■■ 已修改文件
algorithm/face/face.go 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
algorithm/middleware/middleware.go 103 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
algorithm/middleware/readyData.go 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
algorithm/personTrack/personTrack.go 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cache/cache.go 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cache/cache_test.go 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.mod 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.sum 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruleserver/ruleToformula.go 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
algorithm/face/face.go
@@ -81,7 +81,9 @@
                            }
                        }
                        am.TargetNum = len(am.FilterData) // 把符合条件的目标数量更新到targetNum字段
                        //logger.Info("过完条件后的目标数量为:",am.TargetNum)
                        if rule.RuleWithPre == "contain" {
                        }
                        if am.TargetNum > 0 {
                            //logger.Info("!!!!!!!!!人脸检测成功")
                            return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
@@ -100,4 +102,5 @@
        }
    }
    return structure.LittleRuleResult{}
}
}
algorithm/middleware/middleware.go
@@ -18,6 +18,7 @@
    resultSplice := []*structure.LittleRuleResult{}
    sdkNames := ""
    polygonId := ""
    // 这步过的是时间段规则(时间段等)
    for j := 0; j < len(groupRule.Rules); j++ {
        for _, sdkData := range args.Sdkdata {
@@ -32,7 +33,7 @@
                    ruleResult := timeRuleResult(groupRule.Rules[j], areaMap)
                    if ruleResult.Result != "" {
                        if strings.Contains(ruleResult.Result, "false") {
                            return false,"",""  // 不符合时间规则的话直接返回,不再浪费时间
                            return false,"",""  // 不符合时间规则的话直接返回,不再浪费程序执行
                        }
                        if strings.Contains(ruleResult.Result, "true") {
                            areaMap.IsEffective = true
@@ -72,6 +73,11 @@
                    //logger.Info("当前走的规则是--:", groupRule.Rules[j],sdkName,groupRule.Rules[j].SdkArgAlias, "---","")
                    for _, areaMap := range sdkData.AreaMapList {
                        ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap,lable,args,message)
                        if groupRule.Rules[j].RuleWithPre == "contain" {
                            assembleDta(args,groupRule.Rules[j-1],groupRule.Rules[j])
                            // 把当前小规则结果置空
                            ruleResult = structure.LittleRuleResult{}
                        }
                        if ruleResult.Result != "" {
                            //logger.Info("条件规则结果:", ruleResult.Result)
                            // 如果结果为真,把这条规则中的区域置为有效
@@ -202,7 +208,7 @@
    }
    // 跨摄像机跟踪
    for j := 0; j < len(groupRule.Rules); j++ {
        if groupRule.Rules[j].SdkId == "人体跟踪" && groupRule.Rules[j].SdkArgAlias != "灵魂参数"{
        if groupRule.Rules[j].SdkId == "520af340-f257-4fe2-ac3c-695c390e53dc" && groupRule.Rules[j].SdkArgAlias == "cmpThreshold"{
            for _, sdkData := range args.Sdkdata {
                // 根据规则的sdkId查出其对应的ipcId,用ipcId去找该比对的数据
                sdk, err := cache.GetSdkById(groupRule.Rules[j].SdkId)
@@ -210,8 +216,6 @@
                    logger.Error("没查到sdk的信息---", err)
                }
                ipcId := sdk.IpcId
                sdkName := sdk.SdkName
                //logger.Info("规则的ipcId与sdkData的IpcId:", ipcId, "===", sdkData.IpcId)
                if ipcId == sdkData.IpcId {
                    //logger.Info("当前走的规则是--:", groupRule.Rules[j],sdkName,groupRule.Rules[j].SdkArgAlias, "---","")
                    for _, areaMap := range sdkData.AreaMapList {
@@ -222,13 +226,7 @@
                            if strings.Contains(ruleResult.Result, "true") {
                                areaMap.IsEffective = true
                            }
                            // 如果此结果为真且当前过的是yolo算法,应记下此规则所对应的sdkName,另外,还要去重 (后加:把此条触碰的区域id也记录下来)
                            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)
                        }
                    }
@@ -425,4 +423,85 @@
        }
    }
    return 0
}
}
//// 时间段调度
//func timeDispatch(args *structure.SdkDatas,groupRule protomsg.GroupRule,resultSplice []*structure.LittleRuleResult,sdkNames,polygonId string) (bool,string,string){
//    // 这步过的是时间段规则(时间段等)
//    for j := 0; j < len(groupRule.Rules); j++ {
//        for _, sdkData := range args.Sdkdata {
//            sdk, err := cache.GetSdkById(groupRule.Rules[j].SdkId)
//            if err != nil {
//                logger.Error("没查到sdk的信息---", err)
//            }
//            ipcId := sdk.IpcId
//            sdkName := sdk.SdkName
//            if ipcId == sdkData.IpcId {
//                for _, areaMap := range sdkData.AreaMapList {
//                    ruleResult := timeRuleResult(groupRule.Rules[j], areaMap)
//                    if ruleResult.Result != "" {
//                        if strings.Contains(ruleResult.Result, "false") {
//                            return false,"",""  // 不符合时间规则的话直接返回,不再浪费程序执行
//                        }
//                        if strings.Contains(ruleResult.Result, "true") {
//                            areaMap.IsEffective = true
//                        }
//                        //logger.Info("时间规则结果:", ruleResult.Result)
//                        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)
//                    }
//                }
//            }
//        }
//    }
//}
func assembleData(args *structure.SdkDatas,resultSplice []*structure.LittleRuleResult,groupRule protomsg.GroupRule) {
    for index,result := range resultSplice {
        if strings.Contains(result.Result,"contain") {
            assembleDta(args,groupRule.Rules[index-1],groupRule.Rules[index])
            // 删除带有contain的规则结果
            resultSplice = append(resultSplice[:index],resultSplice[index+1:]...)
        }
    }
}
// 如果规则组中有包含符号,把规则组之后的规则对应的算法和区域提取的数据装配到前面去
func assembleDta(args *structure.SdkDatas,rule1,rule2 *protomsg.Rule) {
        // 拿到后面的那个区域的数据
        area := structure.AreaMap{}
        for _, sdkData := range args.Sdkdata {
            for _, areaMap := range sdkData.AreaMapList {
                if areaMap.SdkId == rule2.SdkId && areaMap.AreaId == rule2.PolygonId {
                    area = *areaMap
                    goto second
                }
            }
        }
second:    for _, sdkData := range args.Sdkdata {
            for _, areaMap := range sdkData.AreaMapList {
                if areaMap.SdkId == rule1.SdkId && areaMap.AreaId == rule1.PolygonId {
                    // 拿到包含符之前的数据,遍历装配
                    for _,arg := range areaMap.FilterData {
                        mergeArg(arg,area)
                    }
                    // 清空人脸,人脸不再单独插入了
                    len(area.FilterData) = 0
                    return // 装配一次就可以
                }
            }
        }
}
func mergeArg(arg *structure.Arg,areaMap structure.AreaMap) {
    for _,arg1 := range areaMap.FilterData {
        precent := ruleserver.PgsInterPercent(Rect2Point(arg.Location),arg1.Location,1,1)
        if precent > 99 {
            arg.AttachArg = arg1.SourceArg
        }
    }
}
algorithm/middleware/readyData.go
@@ -80,7 +80,6 @@
        if err := recover(); err != nil {
            logger.Info("解包过程的异常捕获", err.(string))
        }
    }()
    // 反序列化数据得到sdk入参
    m := protomsg.SdkMessage{}
@@ -222,8 +221,6 @@
        for _, info := range Track.Result {
            logger.Info("接收跟踪数据:",info.Id,info.Confidence)
            photoMap := structure.PhotoMap{structure.SourcePhoto{Id: strconv.Itoa(int(info.Id)),Score: float64(info.Confidence)*100,Rects: rectFormat(info.RcHuman), Type: "track"},structure.SourcePhoto{}}
            //FacePush2Body(&photoMap,m.Tasklab.Sdkinfos)
            logger.Info("组装后的跟踪数据:",photoMap)
            arg.Photo = append(arg.Photo, photoMap)
        }
        args.Sdkdata = append(args.Sdkdata, &arg)
algorithm/personTrack/personTrack.go
@@ -35,7 +35,7 @@
        //logger.Debug("---------走了人员异常算法", rule.Id, rule.SdkArgAlias, rule.Operator, rule.SdkArgValue, am.AreaId)
        if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" || rule.SdkArgAlias == "" { // 判断的是相似值,占比,尺寸等过滤条件,如果再有,还可以再加
            return filterRule(rule, am)
        } else if rule.SdkArgAlias == "threshold"{
        } else if rule.SdkArgAlias == "cmpThreshold"{
            return track(rule,am)
        }
        return structure.LittleRuleResult{}
cache/cache.go
@@ -60,10 +60,11 @@
    initSdks() //初始化sdk列表信息
    initSoData()
    initSoData() // sopath
    initDictionary() // 初始化字典
    initTaskSdkArgs()
    initChan <- true
}
@@ -166,7 +167,11 @@
        }
    }
}
func initTaskSdkArgs() {
    var api dbapi.TaskApi
    all := api.FindAllTaskDefaultArgs("TASKRULE")
    fmt.Println(all)
}
func initCameraTaskRules() {
    var api dbapi.CameraTaskArgsApi
    all := api.FindAll()
cache/cache_test.go
New file
@@ -0,0 +1,7 @@
package cache
import "testing"
func TestInitTaskSdkArgs(t *testing.T){
    initTaskSdkArgs()
}
go.mod
@@ -3,7 +3,7 @@
go 1.12
require (
    basic.com/dbapi.git v0.0.0-20191025084729-a04db890e7b5
    basic.com/dbapi.git v0.0.0-20191212040113-a47ddaef3711
    basic.com/fileserver/WeedFSClient.git v0.0.0-20191105073656-98059e699477
    basic.com/pubsub/cache.git v0.0.0-20190718093725-6a413e1d7d48
    basic.com/pubsub/esutil.git v0.0.0-20191205065552-198b5ecaefce
go.sum
@@ -2,6 +2,8 @@
basic.com/dbapi.git v0.0.0-20190822081128-ce924b8a905f/go.mod h1:eDXPnxaz6jZPDvBSk7ya7oSASWPCuUEgRTJCjsfKt/Q=
basic.com/dbapi.git v0.0.0-20191025084729-a04db890e7b5 h1:OcZOgjBXfzhI1Ukxblacxu5xwKl448ADYyulJ02zdb8=
basic.com/dbapi.git v0.0.0-20191025084729-a04db890e7b5/go.mod h1:eDXPnxaz6jZPDvBSk7ya7oSASWPCuUEgRTJCjsfKt/Q=
basic.com/dbapi.git v0.0.0-20191212040113-a47ddaef3711 h1:sTBMIIQKudhzFQIOkDNciqC0DIENAnOKPyN2onJIxGI=
basic.com/dbapi.git v0.0.0-20191212040113-a47ddaef3711/go.mod h1:eDXPnxaz6jZPDvBSk7ya7oSASWPCuUEgRTJCjsfKt/Q=
basic.com/fileserver/WeedFSClient.git v0.0.0-20191105073656-98059e699477 h1:yr95Oko76zjDlPs60aHT2lAqApz8nzli9A6yJB/IrGA=
basic.com/fileserver/WeedFSClient.git v0.0.0-20191105073656-98059e699477/go.mod h1:oiXPn3wwwOi/Sbm6cDWpNWofoG5iV2Nb1V/DxLEAqYY=
basic.com/pubsub/cache.git v0.0.0-20190718093725-6a413e1d7d48 h1:BBA30Rgljn6MRieC4gUncETJDyna3ObyubTo9HEQ2M0=
ruleserver/ruleToformula.go
@@ -410,7 +410,7 @@
                    cars = append(cars, putFaceToResult(areaMap, cars)...)
                }
            }
        case "跟踪的ipcId":
        case "807bac1b-4501-4c52-b450-0aeb75a68ded":
            // 跟踪目标
            for _, areaMap := range sdkData.AreaMapList {
                if areaMap.IsEffective {