From 0e28dd6942c8a7207146f6a6b542bc45f75462b0 Mon Sep 17 00:00:00 2001 From: panlei <2799247126@qq.com> Date: 星期一, 16 十二月 2019 13:35:26 +0800 Subject: [PATCH] --- --- algorithm/middleware/middleware.go | 277 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 226 insertions(+), 51 deletions(-) diff --git a/algorithm/middleware/middleware.go b/algorithm/middleware/middleware.go index 7eb9b21..507f864 100644 --- a/algorithm/middleware/middleware.go +++ b/algorithm/middleware/middleware.go @@ -14,13 +14,52 @@ "time" ) -func Entrance (args *structure.SdkDatas,groupRule protomsg.GroupRule) (bool,string,string){ +func Entrance (args *structure.SdkDatas,groupRule protomsg.GroupRule,lable *structure.Others,message *protomsg.SdkMessage) (bool,string,string){ resultSplice := []*structure.LittleRuleResult{} sdkNames := "" polygonId := "" + + // 杩欐杩囩殑鏄椂闂存瑙勫垯锛堟椂闂存绛夛級 + 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("娌℃煡鍒皊dk鐨勪俊鎭�---", 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) + } + } + } + } + } // 鍏堣繃瀹屾潯浠惰鍒� for j := 0; j < len(groupRule.Rules); j++ { - if groupRule.Rules[j].SdkArgAlias == "score" || groupRule.Rules[j].SdkArgAlias == "proportion" || groupRule.Rules[j].SdkArgAlias == "size" || (groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && groupRule.Rules[j].SdkArgAlias != "time_rule"){ + + carFlag := groupRule.Rules[j].SdkArgAlias == "license" || groupRule.Rules[j].SdkArgAlias == "nConfidence" || groupRule.Rules[j].SdkArgAlias == "fConfidence" || + groupRule.Rules[j].SdkArgAlias == "nType" || groupRule.Rules[j].SdkArgAlias == "nVehicleColor1" || groupRule.Rules[j].SdkArgAlias == "nVehicleBright" || groupRule.Rules[j].SdkArgAlias == "nCarColor" || + groupRule.Rules[j].SdkArgAlias == "fVDConf" || groupRule.Rules[j].SdkArgAlias == "nVehicleColor2" || groupRule.Rules[j].SdkArgAlias == "nColor" || groupRule.Rules[j].SdkArgAlias == "nPlateFlag" + + if groupRule.Rules[j].SdkArgAlias == "score" || groupRule.Rules[j].SdkArgAlias == "proportion" || groupRule.Rules[j].SdkArgAlias == "size" || + (groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && groupRule.Rules[j].SdkArgAlias != "time_rule") || carFlag{ for _, sdkData := range args.Sdkdata { // 鏍规嵁瑙勫垯鐨剆dkId鏌ュ嚭鍏跺搴旂殑ipcId锛岀敤ipcId鍘绘壘璇ユ瘮瀵圭殑鏁版嵁 sdk, err := cache.GetSdkById(groupRule.Rules[j].SdkId) @@ -31,11 +70,17 @@ sdkName := sdk.SdkName //logger.Info("瑙勫垯鐨刬pcId涓巗dkData鐨処pcId:", ipcId, "===", sdkData.IpcId) if ipcId == sdkData.IpcId { - //logger.Info("褰撳墠璧扮殑瑙勫垯鏄�--锛�", sdkName, "---","") + //logger.Info("褰撳墠璧扮殑瑙勫垯鏄�--锛�", groupRule.Rules[j],sdkName,groupRule.Rules[j].SdkArgAlias, "---","") for _, areaMap := range sdkData.AreaMapList { - ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap) + ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap,lable,args,message) + logger.Info("鍓嶇疆杩炴帴绗︼細",groupRule.Rules[j]) + if groupRule.Rules[j].RuleWithPre == "鈯�" { + assembleDta(args,groupRule.Rules[j-1],groupRule.Rules[j]) + // 鎶婂綋鍓嶅皬瑙勫垯缁撴灉缃┖ + ruleResult = structure.LittleRuleResult{} + } if ruleResult.Result != "" { - logger.Info("鏉′欢瑙勫垯缁撴灉锛�", ruleResult.Result) + //logger.Info("鏉′欢瑙勫垯缁撴灉锛�", ruleResult.Result) // 濡傛灉缁撴灉涓虹湡锛屾妸杩欐潯瑙勫垯涓殑鍖哄煙缃负鏈夋晥 if strings.Contains(ruleResult.Result, "true") { areaMap.IsEffective = true @@ -69,9 +114,9 @@ if ipcId == sdkData.IpcId { //logger.Info("褰撳墠璧扮殑瑙勫垯鏄�--锛�", sdkName, "---","") for _, areaMap := range sdkData.AreaMapList { - ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap) + ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap,lable,args,message) if ruleResult.Result != "" { - logger.Info("浜鸿劯姣斿瑙勫垯缁撴灉锛�", ruleResult.Result) + //logger.Info("浜鸿劯姣斿瑙勫垯缁撴灉锛�", ruleResult.Result) // 濡傛灉缁撴灉涓虹湡锛屾妸杩欐潯瑙勫垯涓殑鍖哄煙缃负鏈夋晥 if strings.Contains(ruleResult.Result, "true") { areaMap.IsEffective = true @@ -92,7 +137,7 @@ } // 涓綋闈欐 for j := 0; j < len(groupRule.Rules); j++ { - if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && groupRule.Rules[j].SdkArgAlias != "time_rule"{ + if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a977" && groupRule.Rules[j].SdkArgAlias == "duration"{ for _, sdkData := range args.Sdkdata { // 鏍规嵁瑙勫垯鐨剆dkId鏌ュ嚭鍏跺搴旂殑ipcId锛岀敤ipcId鍘绘壘璇ユ瘮瀵圭殑鏁版嵁 sdk, err := cache.GetSdkById(groupRule.Rules[j].SdkId) @@ -103,11 +148,11 @@ sdkName := sdk.SdkName //logger.Info("瑙勫垯鐨刬pcId涓巗dkData鐨処pcId:", ipcId, "===", sdkData.IpcId) if ipcId == sdkData.IpcId { - //logger.Info("褰撳墠璧扮殑瑙勫垯鏄�--锛�", sdkName, "---","") + //logger.Info("褰撳墠璧扮殑瑙勫垯鏄�--锛�", groupRule.Rules[j],sdkName,groupRule.Rules[j].SdkArgAlias, "---","") for _, areaMap := range sdkData.AreaMapList { - ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap) + ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap,lable,args,message) if ruleResult.Result != "" { - logger.Info("浜鸿劯姣斿瑙勫垯缁撴灉锛�", ruleResult.Result) + //logger.Info("涓綋闈欐缁撴灉锛�", ruleResult.Result) // 濡傛灉缁撴灉涓虹湡锛屾妸杩欐潯瑙勫垯涓殑鍖哄煙缃负鏈夋晥 if strings.Contains(ruleResult.Result, "true") { areaMap.IsEffective = true @@ -119,6 +164,70 @@ 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) + } + } + } + } + } + } + // 杞﹁締 + for j := 0; j < len(groupRule.Rules); j++ { + if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a978" && (groupRule.Rules[j].SdkArgAlias == "nCarCount" || groupRule.Rules[j].SdkArgAlias == "nCarLogoCount"){ + for _, sdkData := range args.Sdkdata { + // 鏍规嵁瑙勫垯鐨剆dkId鏌ュ嚭鍏跺搴旂殑ipcId锛岀敤ipcId鍘绘壘璇ユ瘮瀵圭殑鏁版嵁 + sdk, err := cache.GetSdkById(groupRule.Rules[j].SdkId) + if err != nil { + logger.Error("娌℃煡鍒皊dk鐨勪俊鎭�---", err) + } + ipcId := sdk.IpcId + sdkName := sdk.SdkName + //logger.Info("瑙勫垯鐨刬pcId涓巗dkData鐨処pcId:", ipcId, "===", sdkData.IpcId) + if ipcId == sdkData.IpcId { + //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 ruleResult.Result != "" { + //logger.Info("杞︾墝缁撴灉锛�", ruleResult.Result) + // 濡傛灉缁撴灉涓虹湡锛屾妸杩欐潯瑙勫垯涓殑鍖哄煙缃负鏈夋晥 + if strings.Contains(ruleResult.Result, "true") { + areaMap.IsEffective = true + } + // 濡傛灉姝ょ粨鏋滀负鐪熶笖褰撳墠杩囩殑鏄痽olo绠楁硶锛屽簲璁颁笅姝よ鍒欐墍瀵瑰簲鐨剆dkName,鍙﹀锛岃繕瑕佸幓閲� (鍚庡姞锛氭妸姝ゆ潯瑙︾鐨勫尯鍩焛d涔熻褰曚笅鏉�) + 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) + } + } + } + } + } + } + // 璺ㄦ憚鍍忔満璺熻釜 + for j := 0; j < len(groupRule.Rules); j++ { + if groupRule.Rules[j].SdkId == "520af340-f257-4fe2-ac3c-695c390e53dc" && groupRule.Rules[j].SdkArgAlias == "cmpThreshold"{ + for _, sdkData := range args.Sdkdata { + // 鏍规嵁瑙勫垯鐨剆dkId鏌ュ嚭鍏跺搴旂殑ipcId锛岀敤ipcId鍘绘壘璇ユ瘮瀵圭殑鏁版嵁 + sdk, err := cache.GetSdkById(groupRule.Rules[j].SdkId) + if err != nil { + logger.Error("娌℃煡鍒皊dk鐨勪俊鎭�---", err) + } + ipcId := sdk.IpcId + if ipcId == sdkData.IpcId { + //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 ruleResult.Result != "" { + //logger.Info("杞︾墝缁撴灉锛�", ruleResult.Result) + // 濡傛灉缁撴灉涓虹湡锛屾妸杩欐潯瑙勫垯涓殑鍖哄煙缃负鏈夋晥 + if strings.Contains(ruleResult.Result, "true") { + areaMap.IsEffective = true + } + resultSplice = append(resultSplice, &ruleResult) } } @@ -139,12 +248,12 @@ sdkName := sdk.SdkName if ipcId == sdkData.IpcId { for _, areaMap := range sdkData.AreaMapList { - ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap) + ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap,lable,args,message) if ruleResult.Result != "" { if strings.Contains(ruleResult.Result, "true") { areaMap.IsEffective = true } - logger.Info("鏁伴噺瑙勫垯缁撴灉锛�", ruleResult.Result) + //logger.Info("鏁伴噺瑙勫垯缁撴灉锛�", ruleResult.Result) if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) { sdkNames = sdkName + " " } @@ -158,35 +267,7 @@ } } } - // 杩欐杩囩殑鏄椂闂存瑙勫垯锛堟椂闂存绛夛級 - 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("娌℃煡鍒皊dk鐨勪俊鎭�---", 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, "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) - } - } - } - } - } + // 灏嗘暟缁勬寜sort鎺掑簭 sort.Sort(ruleserver.ResultList(resultSplice)) // 鎺掑簭鍚庡彇鍚勮嚜鐨勭粨鏋滃拰杩炴帴绗︽嫾鍑鸿鍒欒〃杈惧紡寰楀嚭缁撴灉 @@ -277,20 +358,30 @@ return structure.LittleRuleResult{} } -func CallSo(sdkId string,rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult{ +func CallSo(sdkId string,rule *protomsg.Rule, am *structure.AreaMap,lable *structure.Others,args *structure.SdkDatas,message *protomsg.SdkMessage) structure.LittleRuleResult{ // 鏍规嵁sdkId鏌ュ嚭鍏跺搴旂殑sdk鐨剆oName锛岃皟鐢ㄧ浉搴攕o鐨凟ntrance鏂规硶 var soName = "" - if sdkId == "812b674b-2375-4589-919a-5c1c3278a97e" { + + switch sdkId { + case "812b674b-2375-4589-919a-5c1c3278a97e": soName = "face.so" - } else if sdkId == "812b674b-2375-4589-919a-5c1c3278a975"{ + case "812b674b-2375-4589-919a-5c1c3278a975": soName = "intrusion.so" - } else if sdkId == "812b674b-2375-4589-919a-5c1c3278a976" || sdkId == "812b674b-2375-4589-919a-5c1c3278a973" { + case "812b674b-2375-4589-919a-5c1c3278a976": soName = "personUnsual.so" - } else if sdkId == "812b674b-2375-4589-919a-5c1c3278a972" { + case "812b674b-2375-4589-919a-5c1c3278a973": + soName = "personUnsual.so" + case "812b674b-2375-4589-919a-5c1c3278a972": soName = "faceCompare.so" + case "812b674b-2375-4589-919a-5c1c3278a977": + soName = "static.so" + case "812b674b-2375-4589-919a-5c1c3278a978": + soName = "plate.so" + case "520af340-f257-4fe2-ac3c-695c390e53dc": + soName = "personTrack.so" } - //soInfo,errr := cache.GetSoInfoById(sdkId) - //if errr != nil { + //soInfo,err := cache.GetSoInfoById(sdkId) + //if err != nil { // panic("娌¤鍒版敞鍐岃〃") //} //soName := soInfo.SoName @@ -302,7 +393,8 @@ if err1 != nil { panic("娌℃湁鎵惧埌鍏ュ彛鍑芥暟") } - ruleResult := f.(func(rule *protomsg.Rule, am *structure.AreaMap)structure.LittleRuleResult)(rule,am) + //logger.Info("鍙戠粰so鐨勬暟鎹細",sdkId,rule.SdkArgValue,rule.Operator,rule.SdkArgAlias) + ruleResult := f.(func(rule *protomsg.Rule, am *structure.AreaMap,lable *structure.Others, args *structure.SdkDatas,message *protomsg.SdkMessage)structure.LittleRuleResult)(rule,am,lable,args,message) return ruleResult } @@ -332,4 +424,87 @@ } } return 0 -} \ No newline at end of file +} + +//// 鏃堕棿娈佃皟搴� +//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("娌℃煡鍒皊dk鐨勪俊鎭�---", 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) { + // 鎷垮埌鍚庨潰鐨勯偅涓尯鍩熺殑鏁版嵁 + logger.Info("瑙﹀彂浜嗗寘鍚簨浠讹紝鎶婂悗鑰呯殑鏁版嵁缁欏埌鍓嶈��",*rule1,*rule2) + 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) + logger.Info("鍚堝苟鍚庣殑arg鏄細",*arg) + } + // 娓呯┖浜鸿劯锛屼汉鑴镐笉鍐嶅崟鐙彃鍏ヤ簡 + area.FilterData = nil + 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 + } + } +} -- Gitblit v1.8.0