From 940117bea5848f7a09fe937eb2f0a7e2701ea55e Mon Sep 17 00:00:00 2001 From: panlei <2799247126@qq.com> Date: 星期三, 03 七月 2019 18:10:09 +0800 Subject: [PATCH] --- --- ruleserver/ruleToformula.go | 79 +++++++++++++++++++++++++++------------ 1 files changed, 54 insertions(+), 25 deletions(-) diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go index 5190828..b7e82a5 100644 --- a/ruleserver/ruleToformula.go +++ b/ruleserver/ruleToformula.go @@ -4,6 +4,7 @@ "encoding/json" "fmt" "log" + "os" "ruleprocess/cache" "sort" "strconv" @@ -139,7 +140,7 @@ RuleText string // 鏂囧瓧鐗堣鍒欑粍 } type LittleRuleResult struct { - SdkName string //璁板綍涓嬫缁撴灉鏄摢涓猻dk鐨勭粨鏋� + SdkName string // 璁板綍涓嬫缁撴灉鏄摢涓猻dk鐨勭粨鏋� Result string // 宸插寘鍚簡鍓嶇疆杩炴帴绗� Sort int32 } @@ -181,7 +182,7 @@ // 鎶妔dk浠庢暟鎹抚涓婃彁鍙栫殑鎸夌収鍖哄煙鍒嗙被褰掔疆 func SdkDataFormat(cameraId string, arg *SdkData, cameraPolygons []protomsg.CameraPolygon) { for _, polygon := range cameraPolygons { - //log.Println("++++++鍦ㄨ繖鍎跨湅涓�涓嬪尯鍩熷晩", polygon) + //log.Println("++++++鍦ㄨ繖鍎跨湅涓�涓嬪尯鍩熷晩:", polygon.Polygon) areaMap := AreaMap{cameraId: cameraId, areaId: polygon.Id, areaJson: polygon.Polygon, triggerLine: polygon.TriggerLine, directionLine: polygon.DirectionLine} // 涓烘瘡涓憚鍍忔満鍖哄煙濉厖鏁版嵁 areaMap.CountAreaObjs(arg) @@ -207,15 +208,16 @@ args.RuleResult["face"] = []Arg{} if len(taskRuleList) > 0 { for _, taskRule := range taskRuleList { + //log.Println("------------------------------浠诲姟瑙勫垯锛�",taskRule) ruleList := taskRule.GroupRules // 鑾峰彇鐨勬槸task涓嬮潰鐨勪换鍔$粍 taskId := taskRule.TaskId - log.Println("------------鏈粍浠诲姟涓嬬殑瑙勫垯缁勭殑鏁伴噺锛�",len(ruleList)) + //log.Println("------------鏈粍浠诲姟涓嬬殑瑙勫垯缁勭殑鏁伴噺锛�",len(ruleList)) for i := 0; i < len(ruleList); i++ { temp := ruleList[i].Rules // temp涓轰竴缁勫畬鏁磋鍒� 鍦ㄦ闇�瑕佸垽鏂鍒欐槸鍚︽槸鑱斿姩瑙勫垯 if len(temp) > 0 { if ruleList[i].SetType == "linkTask" { // groupId涓惈鏈塴ink鍒欎负鑱斿姩浠诲姟 - linkTask(args, ruleList[i], taskId) + LinkTask(args, ruleList[i], taskId) } else { // 鐙珛浠诲姟鐨勫鐞� RunRule(args, ruleList[i], taskId) @@ -231,9 +233,8 @@ if err := recover(); err != nil { fmt.Println("姣斿瑙勫垯鏈夎", err.(string)) } - }() - log.Println("+++++++++++瑙勫垯寮�濮嬭繍琛�+++++++++++++++++褰撳墠瑙勫垯--锛�",*groupRule) + log.Println("+++++++++++瑙勫垯寮�濮嬭繍琛�+++++++++++++++++褰撳墠瑙勫垯--锛�",(*groupRule).GroupText) resultSplice := []*LittleRuleResult{} // 鍏堣繃瀹屾潯浠惰鍒� for j := 0; j < len(groupRule.Rules); j++ { @@ -252,11 +253,20 @@ for _, sdkData := range args.Sdkdata { for _, areaMap := range sdkData.AreaMapList { for j := 0; j < len(groupRule.Rules); j++ { - putFaceToResult(groupRule.Rules[j], &areaMap, faces) + faces = append(faces,putFaceToResult(groupRule.Rules[j], &areaMap)...) } } } - args.RuleResult["face"] = faces + // 閰嶄簡浜鸿劯鐨勭畻娉曟墠鎶婁汉鑴哥殑鏁版嵁鐢╁嚭鏉ユ墦鏍囩 + flag := false + for j := 0; j < len(groupRule.Rules); j++ { + if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a971" { + flag = true + } + } + if flag { + args.RuleResult["face"] = faces + } // 鍐嶈繃鍏朵粬鏁版嵁 杩欐鐩存帴寰楀埌缁撴灉锛堢湡鎴栧亣锛� 杩囩洰鏍囨暟閲� for j := 0; j < len(groupRule.Rules); j++ { for _, sdkData := range args.Sdkdata { @@ -324,19 +334,23 @@ } } if flag { - fmt.Println("----------------------------缁堜簬璧板畬涓囬噷闀垮緛") + fmt.Println("___________________________________________________________________________缁堜簬璧板畬涓囬噷闀垮緛") // 濡傛灉鎴愬姛浜嗘垜搴旇鎵惧埌瑙勫垯涓秹鍙婂埌鐨剆dk锛岃褰曚笅浠栦滑鐨剆dkname sdkName := "" for j := 0; j < len(groupRule.Rules); j++ { for _, sdkData := range args.Sdkdata { - if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo { // 鍙褰晊olo绗﹀悎瑙勫垯鐨剆dk - sdkName = sdkName + "," + sdkData.SdkName + if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo && !strings.Contains(sdkName,sdkData.SdkName) { // 鍙褰晊olo绗﹀悎瑙勫垯鐨剆dk 鍚屾椂瑕侀伩鍏嶉噸澶嶆嫾鎺� + sdkName = sdkData.SdkName + " " } } } - // 杩囧畬瑙勫垯鍚庢墦涓爣绛撅紝鍛婅瘔璋冪敤鑰呮湰甯ф暟鎹拡瀵瑰摢涓换鍔″摢缁勮鍒欐姤璀︿簡 鍚庡姞锛氬彲鑳借繕涓嶅锛岃繕闇�瑕佸尯鍒嗚Е鍙戞姤璀︾殑瀵硅薄锛屽悗闈㈠線es鏁版嵁搴撴彃鏁版嵁鏃惰鐢� - args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText}) - log.Println("-------------------缁撴灉鏍囩",args.RuleResult["yolo"].([]Result)) + if sdkName != "" { + args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText}) + log.Println("-------------------yolo缁撴灉鏍囩",args.RuleResult["yolo"].([]Result)) + } + if args.RuleResult["face"] != nil { + log.Println("-------------------face缁撴灉鏍囩",args.RuleResult["face"].([]Arg)) + } return true } else { return false @@ -347,14 +361,17 @@ } } -func putFaceToResult(rule *protomsg.Rule, am *AreaMap, faces []Arg) { - if rule.SdkId == am.sdkId { +func putFaceToResult(rule *protomsg.Rule, am *AreaMap) []Arg { + faces := []Arg{} + if rule.SdkId == am.sdkId && rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a971"{ if len(am.filterData) > 0 { for _, data := range am.filterData { faces = append(faces, data) } } } + //log.Println("-----------------------------------------------鍚浣犳槸绌虹殑锛�",faces) + return faces } // 璁$畻鍖哄煙鍐呯殑鐩爣鏁伴噺浠ュ強灏嗙浉浼煎害銆佸崰姣斻�佸昂瀵哥瓑鎵撳寘 @@ -390,6 +407,7 @@ a.time = time.Unix(time.Now().Unix(), 0).String()[11:16] a.keepRight = arg.KeepRight a.isStatic = arg.IsStatic + //log.Println("--------------------鐪嬬湅鍖哄煙鏁版嵁锛�",*a) } // 灏嗗瓧绗︿覆鏍煎紡鐨勫潗鏍囧簭鍒楀寲涓篜oint鏍煎紡 @@ -428,8 +446,9 @@ } // 鑱斿姩浠诲姟鐨勫鐞� -func linkTask(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string) { +func LinkTask(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string) { // new涓�涓畾鏃跺櫒锛屽鏋滀互姝roupId涓烘爣蹇楃殑瀹氭椂鍣ㄤ笉瀛樺湪鐨勮瘽 + log.Println("------------------------------------------褰撳墠鏄仈鍔ㄤ换鍔★紝瑙勫垯鏄細",groupRule.GroupText) var flag bool = true var timeEle = TimeElement{N: 3, InitN: 3, GroupId: groupRule.GroupId} for k, timeEle1 := range TimeEleList { @@ -442,7 +461,7 @@ timeEle := TimeElement{N: 3, InitN: 3, GroupId: groupRule.GroupId} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌 //TimeEleList = make(map[string]timeElement) TimeEleList[groupRule.GroupId] = &timeEle // 瀹氭椂鍣ㄥ厓绱犱互瑙勫垯缁刬d涓洪敭 - fmt.Println("鍒涘缓浜嗚鏁板櫒骞朵笖璁℃暟鍣ㄩ泦鍚堜负锛�", TimeEleList) + fmt.Println("---------------------------------------------鑱斿姩浠诲姟鍒涘缓浜嗚鏁板櫒骞朵笖璁℃暟鍣ㄩ泦鍚堜负锛�", TimeEleList) // 寰楀嚭杩欑粍瀹屾暣瑙勫垯閲屾秹鍙婂埌鍑犱釜鎽勫儚鏈猴紝鍐冲畾鐫�鏁扮粍閲屾湁鍑犱釜缁撴瀯浣�,鍘婚噸娣诲姞鏂瑰紡 for j := 0; j < len(groupRule.Rules); j++ { var flag1 bool = true @@ -486,16 +505,23 @@ expression, _ := govaluate.NewEvaluableExpression(completeFormula) result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� if result.(bool) { + log.Println("___________________________________________________________________鑱斿姩浠诲姟鎶ヨ") sdkName := "" for j := 0; j < len(groupRule.Rules); j++ { for _, sdkData := range args.Sdkdata { - if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo { // 鍙褰晊olo绗﹀悎瑙勫垯鐨剆dk - sdkName = sdkName + "," + sdkData.SdkName + if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo && !strings.Contains(sdkName,sdkData.SdkName) { // 鍙褰晊olo绗﹀悎瑙勫垯鐨剆dk 鍚屾椂瑕侀伩鍏嶉噸澶嶆嫾鎺� + sdkName = sdkData.SdkName + " " } } } - // 杩囧畬瑙勫垯鍚庢墦涓爣绛撅紝鍛婅瘔璋冪敤鑰呮湰甯ф暟鎹拡瀵瑰摢涓换鍔″摢缁勮鍒欐姤璀︿簡 - args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText}) + if sdkName != "" { + args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText}) + log.Println("-------------------yolo缁撴灉鏍囩",args.RuleResult["yolo"].([]Result)) + } + if args.RuleResult["face"] != nil { + log.Println("-------------------face缁撴灉鏍囩",args.RuleResult["face"].([]Arg)) + } + os.Exit(0) } } } else { @@ -515,11 +541,12 @@ // 杩囨护瑙勫垯鍏堢瓫閫夊嚭绗﹀悎鏉′欢鐨勭洰鏍囨暟閲� func filterRule(rule *protomsg.Rule, am *AreaMap) LittleRuleResult { - if rule.SdkId == "FaceDetect" || rule.SdkId == "FaceCompare" { + if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a971" { // 澶勭悊鐨勬槸浜鸿劯绠楁硶 濡傛灉杩欐潯瑙勫垯閰嶇疆鐨勬槸浜鸿劯绠楁硶锛岃繃婊ゅ畬鏉′欢涔嬪悗鐩存帴寰楀嚭缁撴灉锛屽洜涓鸿偗瀹氭病鏈夋暟閲忔潯浠讹紝鑷繁鎷兼帴 + if rule.SdkId == am.sdkId && rule.PolygonId == am.areaId { // 绠楁硶鍜屽尯鍩熼兘寰楀鐨勪笂 - if rule.SdkId == "FaceCompare" { + if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a971" { // 鍙渶瑕佽繃婊ら槇鍊硷紝杩囨护瀹屽悗鏁扮粍闀垮害澶т簬0鍗充负鎶ヨ锛屼絾瑕佽�冭檻濡備綍瀵规瘡涓�寮犻兘鎶ヨ鍛� argValue, err := strconv.ParseFloat(rule.SdkArgValue, 64) if err != nil { @@ -553,7 +580,8 @@ } return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + flag, rule.Sort} } - if rule.SdkId == "FaceDetect" { // 浜鸿劯妫�娴� + if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" { // 浜鸿劯妫�娴� + log.Println("------------------------------------------------------------------------------------------------------------------------------------缁堜簬绛夊埌浣�") if rule.Operator == "==" || rule.Operator == ">=" || rule.Operator == "<=" || rule.Operator == "<" || rule.Operator == ">" || rule.Operator == "!=" { // 濡傛灉鏄笉瑙勭煩鐨勮繛鎺ョ缁熺粺杩斿洖false 瑙勫垯涔熷彧鑳藉垽鏂汉鑴哥殑鐩镐技搴︼紝鎵�浠ヤ笉瀛樺湪鍒殑杩炴帴绗� if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔� @@ -583,6 +611,7 @@ am.targetNum = len(am.filterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁 } if am.targetNum > 0 { + log.Println("锛侊紒锛侊紒锛侊紒锛侊紒锛佷汉鑴告娴嬫垚鍔�") return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "true", rule.Sort} } else { return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "false", rule.Sort} -- Gitblit v1.8.0