From 6e8ebf781ac457b7ec77f7e4c9ade4c3d36002bc Mon Sep 17 00:00:00 2001 From: panlei <2799247126@qq.com> Date: 星期四, 07 十一月 2019 18:42:05 +0800 Subject: [PATCH] merge master --- algorithm/middleware/middleware.go | 20 +- algorithm/intrusion/intrusion.go | 78 +++++---- util/simpleCV.go | 21 ++ ruleserver/server.go | 4 ruleserver/ruleToformula.go | 83 ---------- algorithm/static/static.go | 2 ruleserver/personTrack.go | 4 ruleserver/readyDataForRule.go | 14 algorithm/personUnsual/personUnsual.go | 76 +++++---- structure/gragh.go | 3 labelFilter/req.go | 3 insertdata/EsClient.go | 3 insertdata/insertDataToEs.go | 5 algorithm/timeSlot/timeSlot.go | 2 cache/cache.go | 2 algorithm/face/face.go | 60 ++++--- main.go | 3 labelFilter/readyDataForLabel.go | 2 labelFilter/ruleForLabel.go | 8 - ruleserver/timeTicker.go | 2 ruleserver/geoPolygon.go | 36 +++- 21 files changed, 201 insertions(+), 230 deletions(-) diff --git a/algorithm/face/face.go b/algorithm/face/face.go index 1e4ba5f..d692b01 100644 --- a/algorithm/face/face.go +++ b/algorithm/face/face.go @@ -2,8 +2,8 @@ import ( "basic.com/pubsub/protomsg.git" + "basic.com/valib/logger.git" "github.com/knetic/govaluate" - "ruleprocess/logger" "ruleprocess/structure" "strconv" ) @@ -15,42 +15,48 @@ // 杩囨护瑙勫垯鍏堢瓫閫夊嚭绗﹀悎鏉′欢鐨勭洰鏍囨暟閲� func filterRule(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult { + if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a972" { // 澶勭悊鐨勬槸浜鸿劯绠楁硶 濡傛灉杩欐潯瑙勫垯閰嶇疆鐨勬槸浜鸿劯绠楁硶锛岃繃婊ゅ畬鏉′欢涔嬪悗鐩存帴寰楀嚭缁撴灉锛屽洜涓鸿偗瀹氭病鏈夋暟閲忔潯浠讹紝鑷繁鎷兼帴 //logger.Info("瑙勫垯鐨勭畻娉昳d鍜屽尯鍩熺殑绠楁硶id锛�", rule.SdkId, "===", am.sdkId) if rule.PolygonId == am.AreaId { // 绠楁硶鍜屽尯鍩熼兘寰楀鐨勪笂 - if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && rule.SdkArgAlias != "time_rule"{ // 浜鸿劯姣斿 - //logger.Debug("褰撳墠灏忚鍒欐槸锛�",rule) - flag := "false" - // 鎶婃病鏈夌浉浼艰�呯殑浜鸿劯浠巉ilterData涓垹闄� - for index := 0; index < len(am.FilterData); { - // 灏嗚揪涓嶅埌闃堝�肩殑鐩镐技鑰呬粠鐩镐技鑰呮暟缁勪腑鍒犻櫎 - logger.Info("鐪嬬湅鐩镐技鑰呬汉鏁帮細",len(am.FilterData[index].Liker)) - if len(am.FilterData[index].Liker) == 0 { - // Go 璇█涓垏鐗囧垹闄ゅ厓绱犵殑鏈川鏄細浠ヨ鍒犻櫎鍏冪礌涓哄垎鐣岀偣锛屽皢鍓嶅悗涓や釜閮ㄥ垎鐨勫唴瀛橀噸鏂拌繛鎺ヨ捣鏉ャ�備笉鐢ㄦ��鐤戯紝鏁扮粍鍒犻櫎鍏冪礌灏辫繖涔堝潙鐖� - am.FilterData = append(am.FilterData[:index], am.FilterData[index+1:]...) - } else { - index++ + if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && rule.SdkArgAlias != "time_rule" { + if rule.RuleWithPre == "||" { + return structure.LittleRuleResult{} + } else { + //logger.Debug("褰撳墠灏忚鍒欐槸锛�",rule) + flag := "false" + // 鎶婃病鏈夌浉浼艰�呯殑浜鸿劯浠巉ilterData涓垹闄� + for index := 0; index < len(am.FilterData); { + // 灏嗚揪涓嶅埌闃堝�肩殑鐩镐技鑰呬粠鐩镐技鑰呮暟缁勪腑鍒犻櫎 + logger.Info("鐪嬬湅鐩镐技鑰呬汉鏁帮細",len(am.FilterData[index].Liker)) + if len(am.FilterData[index].Liker) == 0 { + // Go 璇█涓垏鐗囧垹闄ゅ厓绱犵殑鏈川鏄細浠ヨ鍒犻櫎鍏冪礌涓哄垎鐣岀偣锛屽皢鍓嶅悗涓や釜閮ㄥ垎鐨勫唴瀛橀噸鏂拌繛鎺ヨ捣鏉ャ�備笉鐢ㄦ��鐤戯紝鏁扮粍鍒犻櫎鍏冪礌灏辫繖涔堝潙鐖� + am.FilterData = append(am.FilterData[:index], am.FilterData[index+1:]...) + } else { + index++ + } } + if len(am.FilterData) > 0 { + flag = "true" + } + logger.Info("---------浜鸿劯姣斿绗﹀悎鏉′欢鐨勬暟閲忎负锛�",len(am.FilterData)) + return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + flag, rule.Sort} } - if len(am.FilterData) > 0 { - flag = "true" - } - logger.Info("---------浜鸿劯姣斿绗﹀悎鏉′欢鐨勬暟閲忎负锛�",len(am.FilterData)) - return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + flag, rule.Sort} } if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" { // 浜鸿劯妫�娴� //logger.Debug("褰撳墠灏忚鍒欐槸锛�",rule) if rule.Operator == "==" || rule.Operator == ">=" || rule.Operator == "<=" || rule.Operator == "<" || rule.Operator == ">" || rule.Operator == "!=" { // 濡傛灉鏄笉瑙勭煩鐨勮繛鎺ョ缁熺粺杩斿洖false 瑙勫垯涔熷彧鑳藉垽鏂汉鑴哥殑鐩镐技搴︼紝鎵�浠ヤ笉瀛樺湪鍒殑杩炴帴绗� if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔� - logger.Info("-----------------------杩囪鍒欎箣鍓嶅尯鍩熷唴鐨勪汉鑴告暟閲忎负锛�",am.TargetNum,"--鍖哄煙--",am.AreaJson) + logger.Info("-----------------------杩囪鍒欎箣鍓嶅尯鍩熷唴鐨勪汉鑴告暟閲忎负锛�",am.TargetNum) var args []*structure.Arg if rule.RuleWithPre == "&&" { args = am.FilterData //logger.Info("杩囨护鍚庣殑args鐨勯暱搴︿负锛�",len(args)) } else { args = am.Args + //涓嶆竻绌轰箣鍓嶇殑杩囨护鏁版嵁锛岀户缁 //logger.Info("娌¤繃婊ょ殑args鐨勯暱搴︿负锛�",len(args)) } // 鍏堟竻绌鸿繃婊ゅ悗鐨勬暟鎹紝鍐嶅線閲屽鏈杩囨护鍚庣殑鏁版嵁 @@ -82,16 +88,16 @@ } else { return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} } - } else { - return structure.LittleRuleResult{} } - } else { - return structure.LittleRuleResult{} + } else if rule.SdkArgAlias == "" { // 浠�涔堝弬鏁伴兘涓嶉厤鐨勬儏鍐� + if am.TargetNum > 0 { + return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} + } else { + return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} + } } - } else { - return structure.LittleRuleResult{} } - } else { - return structure.LittleRuleResult{} } + } + return structure.LittleRuleResult{} } \ No newline at end of file diff --git a/algorithm/intrusion/intrusion.go b/algorithm/intrusion/intrusion.go index df003f4..714e899 100644 --- a/algorithm/intrusion/intrusion.go +++ b/algorithm/intrusion/intrusion.go @@ -2,8 +2,8 @@ import ( "basic.com/pubsub/protomsg.git" + "basic.com/valib/logger.git" "github.com/knetic/govaluate" - "ruleprocess/logger" "ruleprocess/structure" "strconv" ) @@ -11,12 +11,7 @@ //鍏ヤ镜绠楁硶 func Entrance(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult { if rule.PolygonId == am.AreaId { // 棣栧厛杩欐潯瑙勫垯寰楁槸杩欎釜绠楁硶鐨勮鍒欙紝鍏舵瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓� - if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔� - logger.Debug("---------璧颁簡鍏ヤ镜绠楁硶",rule.Id,rule.SdkArgAlias,rule.Operator,rule.SdkArgValue,am.AreaId) - return filterRule(rule, am) - } else { - return structure.LittleRuleResult{} - } + return filterRule(rule, am) } else { return structure.LittleRuleResult{} } @@ -25,37 +20,48 @@ // 杩囨护瑙勫垯鍏堢瓫閫夊嚭绗﹀悎鏉′欢鐨勭洰鏍囨暟閲� func filterRule(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult { // 澶勭悊鐨勯兘鏄痽olo鏁版嵁 - var args []*structure.Arg - if rule.RuleWithPre == "&&" { - args = am.FilterData - } else { - args = am.Args - } - // 鍏堟竻绌鸿繃婊ゅ悗鐨勬暟鎹紝鍐嶅線閲屽鏈杩囨护鍚庣殑鏁版嵁 - am.FilterData = am.FilterData[0:0] - //logger.Debug("鐪嬬湅args锛氾細锛氾細锛�", args) - for _, arg := range args { - var formula string - if rule.SdkArgAlias == "score" { - formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� - logger.Info("褰撳墠鐩镐技搴﹀皬鍏紡锛�", formula) - } else if rule.SdkArgAlias == "proportion" { - formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� - logger.Info("褰撳墠鍗犳瘮灏忓叕寮忥細", formula) + if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔� + logger.Debug("---------璧颁簡鍏ヤ镜绠楁硶",rule.Id,rule.SdkArgAlias,rule.Operator,rule.SdkArgValue,am.AreaId) + var args []*structure.Arg + if rule.RuleWithPre == "&&" { + args = am.FilterData } else { - formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� - logger.Info("褰撳墠灏哄灏忓叕寮忥細", formula) + args = am.Args } - expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡 - result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� - if result.(bool) { - am.FilterData = append(am.FilterData, arg) // 寰楀埌绗﹀悎鏉′欢鐨勮繃婊ゆ暟鎹� + // 鍏堟竻绌鸿繃婊ゅ悗鐨勬暟鎹紝鍐嶅線閲屽鏈杩囨护鍚庣殑鏁版嵁 + am.FilterData = am.FilterData[0:0] + //logger.Debug("鐪嬬湅args锛氾細锛氾細锛�", args) + for _, arg := range args { + var formula string + if rule.SdkArgAlias == "score" { + formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� + logger.Info("褰撳墠鐩镐技搴﹀皬鍏紡锛�", formula) + } else if rule.SdkArgAlias == "proportion" { + formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� + logger.Info("褰撳墠鍗犳瘮灏忓叕寮忥細", formula) + } else { + formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� + logger.Info("褰撳墠灏哄灏忓叕寮忥細", formula) + } + expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡 + result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� + if result.(bool) { + am.FilterData = append(am.FilterData, arg) // 寰楀埌绗﹀悎鏉′欢鐨勮繃婊ゆ暟鎹� + } + } + am.TargetNum = len(am.FilterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁 + if am.TargetNum > 0 { + return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} + } else { + return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} + } + + } else if rule.SdkArgAlias == "" { + if am.TargetNum > 0 { + return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} + } else { + return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} } } - am.TargetNum = len(am.FilterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁 - if am.TargetNum > 0 { - return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} - } else { - return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} - } + return structure.LittleRuleResult{} } diff --git a/algorithm/middleware/middleware.go b/algorithm/middleware/middleware.go index 30e951f..928d6e8 100644 --- a/algorithm/middleware/middleware.go +++ b/algorithm/middleware/middleware.go @@ -2,11 +2,11 @@ import ( "basic.com/pubsub/protomsg.git" + "basic.com/valib/logger.git" "encoding/json" "github.com/knetic/govaluate" "plugin" "ruleprocess/cache" - "ruleprocess/logger" "ruleprocess/structure" "strings" "time" @@ -40,11 +40,10 @@ } // 濡傛灉姝ょ粨鏋滀负鐪熶笖褰撳墠杩囩殑鏄痽olo绠楁硶锛屽簲璁颁笅姝よ鍒欐墍瀵瑰簲鐨剆dkName,鍙﹀锛岃繕瑕佸幓閲� (鍚庡姞锛氭妸姝ゆ潯瑙︾鐨勫尯鍩焛d涔熻褰曚笅鏉�) if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) { - sdkNames = sdkName + "," - polygonId = groupRule.Rules[j].PolygonId + "," + 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 + "," + polygonId = groupRule.Rules[j].PolygonId + " " } resultSplice = append(resultSplice, &ruleResult) } @@ -76,11 +75,10 @@ } // 濡傛灉姝ょ粨鏋滀负鐪熶笖褰撳墠杩囩殑鏄痽olo绠楁硶锛屽簲璁颁笅姝よ鍒欐墍瀵瑰簲鐨剆dkName,鍙﹀锛岃繕瑕佸幓閲� (鍚庡姞锛氭妸姝ゆ潯瑙︾鐨勫尯鍩焛d涔熻褰曚笅鏉�) if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) { - sdkNames = sdkName + "," - polygonId = groupRule.Rules[j].PolygonId + "," + 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 + "," + polygonId = groupRule.Rules[j].PolygonId + " " } resultSplice = append(resultSplice, &ruleResult) } @@ -109,10 +107,10 @@ } logger.Info("鏁伴噺瑙勫垯缁撴灉锛�", ruleResult.Result) if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) { - 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 + "," + polygonId = groupRule.Rules[j].PolygonId + " " } resultSplice = append(resultSplice, &ruleResult) } @@ -139,10 +137,10 @@ } logger.Info("鏃堕棿瑙勫垯缁撴灉锛�", ruleResult.Result) if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) { - 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 + "," + polygonId = groupRule.Rules[j].PolygonId + " " } resultSplice = append(resultSplice, &ruleResult) } diff --git a/algorithm/personUnsual/personUnsual.go b/algorithm/personUnsual/personUnsual.go index f8eb0d2..d110d6f 100644 --- a/algorithm/personUnsual/personUnsual.go +++ b/algorithm/personUnsual/personUnsual.go @@ -2,8 +2,8 @@ import ( "basic.com/pubsub/protomsg.git" + "basic.com/valib/logger.git" "github.com/knetic/govaluate" - "ruleprocess/logger" "ruleprocess/structure" "strconv" ) @@ -27,39 +27,51 @@ // 杩囨护瑙勫垯鍏堢瓫閫夊嚭绗﹀悎鏉′欢鐨勭洰鏍囨暟閲� func filterRule(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult { // 澶勭悊鐨勯兘鏄痽olo鏁版嵁 - var args []*structure.Arg - if rule.RuleWithPre == "&&" { - args = am.FilterData - } else { - args = am.Args - } - // 鍏堟竻绌鸿繃婊ゅ悗鐨勬暟鎹紝鍐嶅線閲屽鏈杩囨护鍚庣殑鏁版嵁 - am.FilterData = am.FilterData[0:0] - //logger.Debug("鐪嬬湅args锛氾細锛氾細锛�", args) - for _, arg := range args { - var formula string - if rule.SdkArgAlias == "score" { - formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� - logger.Info("褰撳墠鐩镐技搴﹀皬鍏紡锛�", formula) - } else if rule.SdkArgAlias == "proportion" { - formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� - logger.Info("褰撳墠鍗犳瘮灏忓叕寮忥細", formula) - } else { - formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� - logger.Info("褰撳墠灏哄灏忓叕寮忥細", formula) - } - expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡 - result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� - if result.(bool) { - am.FilterData = append(am.FilterData, arg) // 寰楀埌绗﹀悎鏉′欢鐨勮繃婊ゆ暟鎹� + if rule.PolygonId == am.AreaId { // 棣栧厛杩欐潯瑙勫垯寰楁槸杩欎釜绠楁硶鐨勮鍒欙紝鍏舵瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓� + if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔� + var args []*structure.Arg + if rule.RuleWithPre == "&&" { + args = am.FilterData + } else { + args = am.Args + } + // 鍏堟竻绌鸿繃婊ゅ悗鐨勬暟鎹紝鍐嶅線閲屽鏈杩囨护鍚庣殑鏁版嵁 + am.FilterData = am.FilterData[0:0] + //logger.Debug("鐪嬬湅args锛氾細锛氾細锛�", args) + for _, arg := range args { + var formula string + if rule.SdkArgAlias == "score" { + formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� + logger.Info("褰撳墠鐩镐技搴﹀皬鍏紡锛�", formula) + } else if rule.SdkArgAlias == "proportion" { + formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� + logger.Info("褰撳墠鍗犳瘮灏忓叕寮忥細", formula) + } else { + formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� + logger.Info("褰撳墠灏哄灏忓叕寮忥細", formula) + } + expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡 + result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� + if result.(bool) { + am.FilterData = append(am.FilterData, arg) // 寰楀埌绗﹀悎鏉′欢鐨勮繃婊ゆ暟鎹� + } + } + am.TargetNum = len(am.FilterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁 + if am.TargetNum > 0 { + return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} + } else { + return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} + } + + } else if rule.SdkArgAlias == "" { + if am.TargetNum > 0 { + return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} + } else { + return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} + } } } - am.TargetNum = len(am.FilterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁 - if am.TargetNum > 0 { - return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort} - } else { - return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} - } + return structure.LittleRuleResult{} } // 缁欐暟鎹簱鐨勮鍒欒〃杈惧紡浠e弬 args: 涓�鏉″瓙瑙勫垯锛屽尯鍩熸暟鎹� diff --git a/algorithm/static/static.go b/algorithm/static/static.go index 774d97a..88b4e33 100644 --- a/algorithm/static/static.go +++ b/algorithm/static/static.go @@ -2,8 +2,8 @@ import ( "basic.com/pubsub/protomsg.git" + "basic.com/valib/logger.git" "github.com/knetic/govaluate" - "ruleprocess/logger" "ruleprocess/ruleserver" "ruleprocess/structure" "strconv" diff --git a/algorithm/timeSlot/timeSlot.go b/algorithm/timeSlot/timeSlot.go index 4c3150d..11673f4 100644 --- a/algorithm/timeSlot/timeSlot.go +++ b/algorithm/timeSlot/timeSlot.go @@ -2,10 +2,10 @@ import ( "basic.com/pubsub/protomsg.git" + "basic.com/valib/logger.git" "encoding/json" "github.com/knetic/govaluate" "ruleprocess/cache" - "ruleprocess/logger" "ruleprocess/structure" "time" ) diff --git a/cache/cache.go b/cache/cache.go index aeceb67..ffb0912 100644 --- a/cache/cache.go +++ b/cache/cache.go @@ -5,11 +5,11 @@ "basic.com/pubsub/cache.git/shardmap" "basic.com/pubsub/protomsg.git" "basic.com/valib/gopherdiscovery.git" + "basic.com/valib/logger.git" "errors" "fmt" "github.com/gogo/protobuf/proto" "github.com/satori/go.uuid" - "ruleprocess/logger" "strconv" ) const ( diff --git a/insertdata/EsClient.go b/insertdata/EsClient.go index c83eb87..d7b7eed 100644 --- a/insertdata/EsClient.go +++ b/insertdata/EsClient.go @@ -1,17 +1,16 @@ package insertdata import ( + "bytes" "encoding/json" "errors" "fmt" "io" "io/ioutil" "net/http" - "ruleprocess/logger" "strconv" "strings" "time" - "bytes" ) type Reps struct { diff --git a/insertdata/insertDataToEs.go b/insertdata/insertDataToEs.go index a38b48d..fc97d18 100644 --- a/insertdata/insertDataToEs.go +++ b/insertdata/insertDataToEs.go @@ -1,6 +1,7 @@ package insertdata import ( + "basic.com/valib/logger.git" "encoding/base64" "encoding/json" "errors" @@ -15,7 +16,6 @@ "github.com/satori/go.uuid" "ruleprocess/ruleserver" "ruleprocess/util" - "ruleprocess/structure" ) var weedfsUrl, videoPersonUrl, personAction string @@ -162,7 +162,6 @@ panic("瑙e帇缂╁浘鐗囨椂鍑虹幇閿欒") } alarmRules := []AlarmRule{} - //logger.Warn("浜鸿劯id涓猴細", face.Id, "浜鸿劯鐨勮鍒欓暱搴︿负锛�", len(face.rules)) //os.Exit(1) for _, faceResult := range face.rules { alarm := ChangeToString(faceResult.DefenceState, faceResult.AlarmLevel) @@ -204,6 +203,7 @@ target.TargetScore = face.Score target.TargetLocation = Points{TopLeft:Point{face.Location.X,face.Location.Y},BottomRight:Point{face.Location.X+face.Location.Width,face.Location.Y+face.Location.Height}} //logger.Info("浜鸿劯鐨刬d:",strconv.FormatUint(face.Id, 10)) + pervideo := PerVideoPicture{ msg.Push.PushId, msg.Cid, @@ -357,7 +357,6 @@ // 瑁呴厤鐩爣淇℃伅鏁版嵁 for _,target := range yoloResult.Location { // 鍘婚噸娣诲姞 - //logger.Info("瑁呴厤鍓嶇殑鍘熷鏁版嵁鏄細",target) var flag = true for _,selectTarget := range targetInfos { if strconv.FormatUint(target.TargetId, 10) == selectTarget.TargetId { diff --git a/labelFilter/readyDataForLabel.go b/labelFilter/readyDataForLabel.go index 28b5233..5c792e1 100644 --- a/labelFilter/readyDataForLabel.go +++ b/labelFilter/readyDataForLabel.go @@ -1,7 +1,7 @@ package labelFilter import ( - "ruleprocess/logger" + "basic.com/valib/logger.git" "ruleprocess/cache" "ruleprocess/structure" "time" diff --git a/labelFilter/req.go b/labelFilter/req.go index 2c08412..b04a123 100644 --- a/labelFilter/req.go +++ b/labelFilter/req.go @@ -4,11 +4,13 @@ "basic.com/dbapi.git" "basic.com/valib/logger.git" "fmt" + "github.com/golang/protobuf/proto" "nanomsg.org/go-mangos" "nanomsg.org/go-mangos/protocol/rep" "nanomsg.org/go-mangos/protocol/req" "nanomsg.org/go-mangos/transport/ipc" "nanomsg.org/go-mangos/transport/tcp" + "ruleprocess/structure" "time" ) @@ -81,6 +83,7 @@ } func GoPush(url string) { + var err error var msg []byte var sock mangos.Socket diff --git a/labelFilter/ruleForLabel.go b/labelFilter/ruleForLabel.go index 74a3f98..bb4f9a5 100644 --- a/labelFilter/ruleForLabel.go +++ b/labelFilter/ruleForLabel.go @@ -6,18 +6,11 @@ "basic.com/valib/logger.git" "github.com/golang/protobuf/proto" "github.com/knetic/govaluate" -<<<<<<< HEAD - "ruleprocess/logger" -======= ->>>>>>> master "ruleprocess/structure" "strconv" "time" ) -<<<<<<< HEAD -func Judge(msg structure.ResultMsg) { -======= func PushSomthing(msg structure.ResultMsg) { defer func() { if err := recover(); err != nil { @@ -25,7 +18,6 @@ } }() start := time.Now() ->>>>>>> master // 瑁呴厤鎴愯嚜宸卞彲浠ヨ瘑鍒殑鏁版嵁 label := new(Label) label.DataFormatToLabel(msg) diff --git a/main.go b/main.go index 32fa0e0..e70f7b2 100644 --- a/main.go +++ b/main.go @@ -17,9 +17,12 @@ "fmt" "github.com/golang/protobuf/proto" "github.com/spf13/viper" + "basic.com/valib/logger.git" + "ruleprocess/cache" "ruleprocess/ruleserver" "sync" + "github.com/spf13/viper" ) var dbIp = flag.String("dbIp", "127.0.0.1", "dbserver ip") diff --git a/ruleserver/geoPolygon.go b/ruleserver/geoPolygon.go index ae81c44..6f64108 100644 --- a/ruleserver/geoPolygon.go +++ b/ruleserver/geoPolygon.go @@ -20,10 +20,30 @@ return num1 } +//Point 鍧愭爣鐐� +type Point struct { + X float64 `json:"x"` + Y float64 `json:"y"` +} + +//Rect 妫�娴嬬洰鏍� +type Rect struct { + X float64 + Y float64 + Width float64 + Height float64 +} + +//Pointfloat 鍧愭爣鐐� +type Pointfloat struct { + X float64 `json:"x"` + Y float64 `json:"y"` +} + //PintIsInPolygon 鍒ゆ柇鐐规槸鍚﹀湪澶氳竟褰㈠唴閮� //point涓鸿鍒ゆ柇鐨勫潗鏍囩偣 //polygon鏄杈瑰舰鍚勭偣鏁扮粍 -func pintIsInPolygon(point structure.Pointfloat, polygon []structure.Point, widthScale float64, heightScale float64) bool { +func pintIsInPolygon(point Pointfloat, polygon []Point, widthScale float64, heightScale float64) bool { var nCross int = 0 for i := 0; i < len(polygon); i++ { @@ -53,21 +73,17 @@ } //GetLocation 灏嗕竴涓粰瀹氳捣濮嬪潗鏍囷紝瀹藉害闀垮害鐨勭煩褰㈠尯鍩熷潎鍒嗕负n鏂逛唤骞惰繑鍥炰腑蹇冨潗鏍囷紙n涓哄崟杈瑰钩鍒嗘暟鍊硷級鍜岄潰绉� -<<<<<<< HEAD func getLocation(rect structure.Rect, n int) ([]structure.Pointfloat, float64) { -======= -func getLocation(rect structure.Rect, n int) ([]Pointfloat, float64) { ->>>>>>> master xArr := make([]float64, n) // 鐢ㄥ垏鐗囦笉鐢ㄦ暟缁勶紝鏁扮粍涓嶈兘鐢ㄥ彉閲忓畾涔夐暱搴� yArr := make([]float64, n) - pointArr := make([]structure.Pointfloat, 0, n*n) + pointArr := make([]Pointfloat, 0, n*n) for i := 0; i < n; i++ { xArr[i] = rect.X + (rect.Width/float64(2*n))*float64(2*i+1) yArr[i] = rect.Y + (rect.Height/float64(2*n))*float64(2*i+1) } for i := 0; i < n; i++ { for j := 0; j < n; j++ { - point := structure.Pointfloat{X: xArr[i], Y: yArr[j]} + point := Pointfloat{X: xArr[i], Y: yArr[j]} pointArr = append(pointArr, point) } } @@ -76,7 +92,7 @@ } //ComputePolygonArea 璁$畻浠绘剰澶氳竟褰㈤潰绉� -func computePolygonArea(polygon []structure.Point) float64 { +func computePolygonArea(polygon []Point) float64 { pointNum := len(polygon) var s float64 = 0 if pointNum < 3 { @@ -90,11 +106,7 @@ } //PgsInterPercent calculate percent of two polygon intersection 璁$畻涓や釜澶氳竟褰㈢殑閲嶅彔鍗犳瘮 -<<<<<<< HEAD -func PgsInterPercent(pgpts []structure.Point, box structure.Rect, widthScale float64, heightScale float64) (percent float64) { -======= func PgsInterPercent(pgpts []Point, box structure.Rect, widthScale float64, heightScale float64) (percent float64) { ->>>>>>> master areapts, areaBox := getLocation(box, 10) var count = 0 diff --git a/ruleserver/personTrack.go b/ruleserver/personTrack.go index a86faaf..7ddfee7 100644 --- a/ruleserver/personTrack.go +++ b/ruleserver/personTrack.go @@ -2,8 +2,8 @@ import ( "basic.com/pubsub/protomsg.git" - "ruleprocess/logger" "github.com/golang/protobuf/proto" + "basic.com/valib/logger.git" "ruleprocess/structure" "sync" ) @@ -97,7 +97,6 @@ logger.Info("鏂板缓褰撳墠鎽勫儚鏈虹紦瀛樻睜涓殑yolo涓暟锛�", yoloNum) TrackPond[msg.Cid] = &PersonTrack{Yolo: yoloNum} } - logger.Debug("---------------------------------浜轰綋杩借釜缁撴潫--------------------------------------") return false } } else { @@ -171,7 +170,6 @@ } } logger.Info("鍙嶅簭鍒楀寲閲嶆柊瑁呴厤涔嬪墠浜鸿劯鐨勪釜鏁帮細", len(faceParam.Faces)) - logger.Info("涓存椂瀛樺偍鐨勬柊鏉ユ暟鎹細") for _, temp := range facesTemp { logger.Info("涓存椂瀛樺偍鐨勬柊鏉ョ殑鐨刦ace鏁版嵁锛�", temp.Pos.FaceID, temp.Pos.FAngle.Confidence) diff --git a/ruleserver/readyDataForRule.go b/ruleserver/readyDataForRule.go index 8dab014..7aa9db4 100644 --- a/ruleserver/readyDataForRule.go +++ b/ruleserver/readyDataForRule.go @@ -3,6 +3,7 @@ import ( "basic.com/dbapi.git" "basic.com/pubsub/protomsg.git" + "basic.com/valib/logger.git" "encoding/json" "errors" "fmt" @@ -13,7 +14,6 @@ "nanomsg.org/go-mangos/transport/tcp" "net" "ruleprocess/cache" - "ruleprocess/logger" "ruleprocess/structure" "strconv" "time" @@ -123,14 +123,14 @@ // 灏嗗瓧绗︿覆鏍煎紡鐨勫潗鏍囧簭鍒楀寲涓篜oint鏍煎紡 -func Json2points(areaPoints string) []structure.Point { - var pts []structure.Point +func Json2points(areaPoints string) []Point { + var pts []Point if areaPoints == "[]" || areaPoints == "" { logger.Error("=====================姝ゅ尯鍩熶负鍏ㄩ儴鍖哄煙") - pts = append(pts, structure.Point{0, 0}) - pts = append(pts, structure.Point{0, 540}) - pts = append(pts, structure.Point{960, 540}) - pts = append(pts, structure.Point{960, 0}) + pts = append(pts, Point{0, 0}) + pts = append(pts, Point{0, 540}) + pts = append(pts, Point{960, 540}) + pts = append(pts, Point{960, 0}) } else { err := json.Unmarshal([]byte(areaPoints), &pts) if err != nil { diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go index 33e057d..c9407ed 100644 --- a/ruleserver/ruleToformula.go +++ b/ruleserver/ruleToformula.go @@ -1,6 +1,9 @@ package ruleserver import ( + "basic.com/pubsub/protomsg.git" + "basic.com/valib/logger.git" + "github.com/knetic/govaluate" "plugin" "ruleprocess/cache" "ruleprocess/structure" @@ -78,30 +81,6 @@ } } } -} - -func CallSo(sdkId string,rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult{ - // 鏍规嵁sdkId鏌ュ嚭鍏跺搴旂殑sdk鐨剆oName锛岃皟鐢ㄧ浉搴攕o鐨凟ntrance鏂规硶 - var soName = "" - if sdkId == "812b674b-2375-4589-919a-5c1c3278a97e" { - soName = "face.so" - } else if sdkId == "812b674b-2375-4589-919a-5c1c3278a975"{ - soName = "intrusion.so" - } else if sdkId == "812b674b-2375-4589-919a-5c1c3278a976" { - soName = "personUnsual.so" - } else if sdkId == "812b674b-2375-4589-919a-5c1c3278a972" { - soName = "faceCompare.so" - } - p,err := plugin.Open("./algorithm/"+soName) - if err != nil { - panic(err) - } - f,err1 := p.Lookup("Entrance") - if err1 != nil { - panic("娌℃湁鎵惧埌鍏ュ彛鍑芥暟") - } - ruleResult := f.(func(rule *protomsg.Rule, am *structure.AreaMap)structure.LittleRuleResult)(rule,am) - return ruleResult } func CallMiddleware(args *structure.SdkDatas,rule protomsg.GroupRule) ([]*structure.LittleRuleResult, string, string){ @@ -484,59 +463,3 @@ return cacheId } -func timeRuleResult(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult { - if rule.PolygonId == am.AreaId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓� - if rule.SdkArgAlias == "time_rule" { // 鍒ゆ柇鏄惁绗﹀悎鏃堕棿瑙� - //logger.Info("----------褰撳墠鏃堕棿瑙勫垯锛�---------", rule) - // 鏍规嵁鏀惧�煎瓧娈甸噷瀛樼殑鏃堕棿瑙勫垯鐨刬d鍘诲彟涓�涓〃閲屾煡闇�瑕佹瘮瀵圭殑鏃堕棿娈碉紙姣斿褰撳墠鏃堕棿鏄懆涓夛紝搴旀牴鎹尯鍩焛d鏌ュ嚭鍏跺懆涓夌殑鍑犱釜甯冮槻鏃堕棿娈碉紝鏁扮粍锛� - //logger.Info("鏃堕棿瑙勫垯鐨勬祴璇�") - now := time.Now() - index := getIndexOfWeek(now.Weekday().String()) - timeList := GetTimeById(rule.SdkArgValue, index) - //logger.Info("褰撳ぉ鐨勬椂闂存闆嗗悎锛�----------", timeList) - //logger.Info("浠庢暟鎹簱涓煡鍑虹殑鏃堕棿瑙勫垯锛�", timeList) - // 鍒ゆ柇鍥剧墖鏁版嵁鐨勬椂闂存槸鍚︾鍚堝綋鍓嶈鍒� 鍦ㄤ竴涓嵆涓簍rue锛屽叏涓嶅湪涓篺alse - - if rule.Operator == "satisfy" || rule.Operator == "==" { // 婊¤冻鎵�閫夌殑鏃堕棿瑙勫垯 - flag := "false" - for _, timeSlot := range timeList { - formula := "'" + timeSlot.Start + "'" + "<" + "'" + am.Time + "'" - expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡 - result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� - - formula1 := "'" + timeSlot.End + "'" + ">" + "'" + am.Time + "'" - expression1, _ := govaluate.NewEvaluableExpression(formula1) // 寰楀埌鏁板鍏紡 - result1, _ := expression1.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� - //logger.Info("鐪嬬湅杩欎袱灏婂ぇ绁�", result, result1) - if result.(bool) && result1.(bool) { - flag = "true" - break - } - } - return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + flag, rule.Sort} - } - - if rule.Operator == "unsatisfy" || rule.Operator == "!=" { // 涓嶆弧瓒虫墍閫夌殑鏃堕棿瑙勫垯 - flag := "true" - for _, timeSlot := range timeList { - formula := "'" + timeSlot.Start + "'" + " < " + "'" + am.Time + "'" - //logger.Info("-----------------鏃堕棿瑙勫垯涓嶆弧瓒崇殑鍏紡start锛�", formula) - expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡 - result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� - - formula1 := "'" + timeSlot.End + "'" + " > " + "'" + am.Time + "'" - //logger.Info("-----------------鏃堕棿瑙勫垯涓嶆弧瓒崇殑鍏紡end锛�", formula1) - expression1, _ := govaluate.NewEvaluableExpression(formula1) // 寰楀埌鏁板鍏紡 - result1, _ := expression1.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� - if result.(bool) && result1.(bool) { - flag = "false" - break - } - } - return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + flag, rule.Sort} - } - - } - } - return structure.LittleRuleResult{} -} diff --git a/ruleserver/server.go b/ruleserver/server.go index b3ac5dc..37bd0ac 100644 --- a/ruleserver/server.go +++ b/ruleserver/server.go @@ -4,7 +4,7 @@ "basic.com/pubsub/protomsg.git" "basic.com/valib/gopherdiscovery.git" "github.com/gogo/protobuf/proto" - "ruleprocess/logger" + "basic.com/valib/logger.git" "time" ) @@ -14,7 +14,7 @@ const ( Discovery_Server = "tcp://0.0.0.0:40009" - Discovery_UrlPubSub = "tcp://0.0.0.0:50009" + Discovery_UrlPubSub = "tcp://0.0.0.0:50009" ) //鍚姩discovery鐨剆erver diff --git a/ruleserver/timeTicker.go b/ruleserver/timeTicker.go index f42f3a2..a572879 100644 --- a/ruleserver/timeTicker.go +++ b/ruleserver/timeTicker.go @@ -2,7 +2,7 @@ import ( "fmt" - "ruleprocess/logger" + "basic.com/valib/logger.git" "ruleprocess/structure" "strings" "time" diff --git a/structure/gragh.go b/structure/gragh.go index 6aae41f..f8bfd92 100644 --- a/structure/gragh.go +++ b/structure/gragh.go @@ -18,5 +18,4 @@ type Pointfloat struct { X float64 `json:"x"` Y float64 `json:"y"` -} - +} \ No newline at end of file diff --git a/util/simpleCV.go b/util/simpleCV.go index 27e8196..d32691f 100644 --- a/util/simpleCV.go +++ b/util/simpleCV.go @@ -156,7 +156,10 @@ } } +<<<<<<< HEAD +======= +>>>>>>> a87978244bbb81f2fa7610560ed190acbaa422f8 func DrawPolygonOnImageForYolo(cameraId string, img protomsg.Image, results []structure.Result,url string) (maps map[string]interface{}, err0 error) { rook, _ := gocv.NewMatFromBytes(int(img.Height), int(img.Width), gocv.MatTypeCV8UC3, img.Data) @@ -173,7 +176,12 @@ for i := 0; i < len(polygonIds); i++ { polygon := getPolygonById(polygonIds[i],cameraId) if polygon.Polygon != "[]" && polygon.Polygon != ""{ +<<<<<<< HEAD DrawAPolygon(&rook,polygon.Polygon,yellow,scale) +======= + logger.Debug("鎵�鐢诲尯鍩燂細",polygon.Polygon) + DrawAPolygon(&rook,polygon.Polygon,yellow) +>>>>>>> a87978244bbb81f2fa7610560ed190acbaa422f8 } } } @@ -195,6 +203,7 @@ defer rook.Close() yellow := color.RGBA{255, 255, 0, 0} +<<<<<<< HEAD scale := float64(img.Width) / 960 // 鐢诲浘姣斾緥 // 鍒嗗壊鍖哄煙id闆嗗悎骞舵牴鎹甶d鏌ヨ鍖哄煙鐒跺悗鐢绘 for _,result := range results { @@ -203,6 +212,18 @@ polygon := getPolygonById(polygonIds[i],cameraId) if polygon.Polygon != "[]" && polygon.Polygon != ""{ DrawAPolygon(&rook,polygon.Polygon,yellow,scale) +======= + + // 鍒嗗壊鍖哄煙id闆嗗悎骞舵牴鎹甶d鏌ヨ鍖哄煙鐒跺悗鐢绘 + for _,result := range results { + polygonIds := strings.Split(result.AlarmPolygon,",") + logger.Info("-----------------------鐪嬬湅鎶ヨ鍖哄煙id锛�",polygonIds) + for i := 0; i < len(polygonIds)-1; i++ { + polygon := getPolygonById(polygonIds[i],cameraId) + if polygon.Polygon != "[]" && polygon.Polygon != ""{ + logger.Debug("鎵�鐢诲尯鍩燂細",polygon.Polygon) + DrawAPolygon(&rook,polygon.Polygon,yellow) +>>>>>>> a87978244bbb81f2fa7610560ed190acbaa422f8 } } } -- Gitblit v1.8.0