From 7a06bb3e7e47e9b67adfd1fcbe025491819b2970 Mon Sep 17 00:00:00 2001 From: panlei <2799247126@qq.com> Date: 星期日, 29 九月 2019 14:34:02 +0800 Subject: [PATCH] 人脸也画规则框 --- ruleserver/ruleToformula.go | 68 ++++++++++++++++++--------------- 1 files changed, 37 insertions(+), 31 deletions(-) diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go index 19f1656..5160f2a 100644 --- a/ruleserver/ruleToformula.go +++ b/ruleserver/ruleToformula.go @@ -2,10 +2,11 @@ import ( "ruleprocess/cache" - "ruleprocess/logger" + "basic.com/valib/logger.git" "sort" "strconv" "strings" + "sync" "time" "basic.com/pubsub/protomsg.git" @@ -111,8 +112,15 @@ Sort int32 } +var rw sync.RWMutex // 璇诲啓閿� + // 瀵瑰崟甯у浘鍍忕殑鍒ゆ柇 thisSdkDatas 褰撳墠浼犲叆鐨勮繖甯ф暟鎹紝cacheSdkData 瀹氭椂鍣ㄩ噷缂撳瓨鐨勪竴甯ф暟鎹� 娌℃湁灏辫繑鍥瀗il (thisSdkDatas SdkDatas, cacheSdkDatas SdkDatas) func Judge(args *SdkDatas, message *protomsg.SdkMessage) { + defer func() { + if err := recover(); err != nil { + logger.Error("瑙勫垯妯″潡鍎跨殑寮傚父鎹曡幏锛�",err) + } + }() if len(args.Sdkdata) > 0 { // 鎷垮埌鏈憚鍍忔満鐨勫尯鍩� cameraPolygons := GetPolygons(args.CameraId) @@ -197,9 +205,8 @@ // 濡傛灉姝ょ粨鏋滀负鐪熶笖褰撳墠杩囩殑鏄痽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 + "," } - if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(polygonId, groupRule.Rules[j].PolygonId) { + if strings.Contains(ruleResult.Result, "true") && !strings.Contains(polygonId, groupRule.Rules[j].PolygonId) { polygonId = groupRule.Rules[j].PolygonId + "," } resultSplice = append(resultSplice, &ruleResult) @@ -420,11 +427,15 @@ logger.Info("------------------------------------------褰撳墠鏄仈鍔ㄤ换鍔★紝瑙勫垯鏄細", groupRule.GroupText) var flag bool = true var timeEle = TimeElement{N: 2, InitN: 2, GroupId: groupRule.GroupId} + rw.Lock() for k, timeEle1 := range TimeEleList { if k == groupRule.GroupId { flag = false // 宸茬粡鏈変簡杩欎釜瀹氭椂鍣ㄥ氨缃负false 涓嶅啀鏂板 timeEle = *timeEle1 } + } + for _,ruleRe := range timeEle.RuleResults { + logger.Info("鑱斿姩鏁扮粍閲岀殑鏁版嵁----",ruleRe.CameraId,ruleRe.Sort) } if flag { // 濡傛灉杩樻病鏈夎繖涓畾鏃跺櫒鍏冪礌灏辨柊澧炰竴涓� //timeEle := TimeElement{N: 2, InitN: 2, GroupId: groupRule.GroupId} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌 @@ -434,7 +445,9 @@ // 寰楀嚭杩欑粍瀹屾暣瑙勫垯閲屾秹鍙婂埌鍑犱釜鎽勫儚鏈猴紝鍐冲畾鐫�鏁扮粍閲屾湁鍑犱釜缁撴瀯浣�,鍘婚噸娣诲姞鏂瑰紡 for j := 0; j < len(groupRule.Rules); j++ { var flag1 bool = true + logger.Info("瑙勫垯缁勪俊鎭細",groupRule.Rules[j].CameraId) for _, ruleRes := range TimeEleList[groupRule.GroupId].RuleResults { + logger.Info("鑱斿姩鏁扮粍閲岀殑鏁版嵁锛�",ruleRes.CameraId,ruleRes.Sort) if groupRule.Rules[j].CameraId == ruleRes.CameraId { flag1 = false } @@ -444,6 +457,7 @@ } } } + rw.Unlock() // 寰�鏁扮粍閲岃祴鍊� isOk,labelTypes := RunRule(args, groupRule, taskId, message, label) if isOk { @@ -474,10 +488,8 @@ } // 鍒ゆ柇缁撴灉鏁扮粍鏄惁瀹屾弧(鍗宠璧嬪�煎畬姣�)鍙緱鍑烘姤璀︾粨鏋� var isPerfect = true - logger.Info("鑱斿姩浠诲姟鏁扮粍锛�") for _, va := range timeEle.RuleResults { //logger.Info("---------------------鐬呯瀰褰撳墠鏁扮粍________________锛�", *va) - logger.Info("鑱斿姩瀛愬厓绱狅細",va.Sort,va.RuleWithPre,va.Result,va.CameraId) if va.Result == "" && va.RuleWithPre != "||" { isPerfect = false } @@ -497,6 +509,7 @@ result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� if result.(bool) { logger.Info("___________________________________________________________________鑱斿姩浠诲姟鎶ヨ") + rw.RLock() if TimeEleList[groupRule.GroupId] != nil { // 鏋佸伓灏旀湁鎯呭喌浼氱瓑浜巒il锛屼笉鐭ラ亾涓哄暐锛屽仛涓垽鏂互闃插畷鏈� // 鎶婃暟缁勯噷缂撳瓨鐨勬暟鎹彇鍑烘潵涓�璧锋姤璀� label.LinkCache = []ResultMsg{} @@ -515,6 +528,7 @@ } } } + rw.RUnlock() } } } else { @@ -545,12 +559,14 @@ // va.Result = strconv.FormatBool(isOk) // } //} + rw.Lock() for k, _ := range TimeEleList { if k == groupRule.GroupId { delete(TimeEleList, k) logger.Debug("鍥犱负瀹氭椂鍣ㄧ殑涓�甯ф暟鎹粨鏋滀负false锛屽共鎺夊畾鏃跺櫒") } } + rw.Unlock() // 鍥犱负鏈抚鏁版嵁涓嶇鍚堣鍒欙紝鎵�浠ヤ篃涓嶇敤缁熻缁撴灉鏁扮粍閲岀殑涓滆タ } @@ -563,7 +579,7 @@ //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"{ + if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && rule.SdkArgAlias != "time_rule" { if rule.RuleWithPre == "||" { return LittleRuleResult{} } else { @@ -631,17 +647,15 @@ } else { return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "false", rule.Sort} } - } else { - return LittleRuleResult{} } - } else { - return LittleRuleResult{} + } else if rule.SdkArgAlias == "" { // 浠�涔堝弬鏁伴兘涓嶉厤鐨勬儏鍐� + if am.targetNum > 0 { + return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "true", rule.Sort} + } else { + return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "false", rule.Sort} + } } - } else { - return LittleRuleResult{} } - } else { - return LittleRuleResult{} } } else { // 澶勭悊鐨勯兘鏄痽olo鏁版嵁 @@ -681,14 +695,16 @@ return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "false", rule.Sort} } - } else { - return LittleRuleResult{} + } else if rule.SdkArgAlias == "" { + if am.targetNum > 0 { + return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "true", rule.Sort} + } else { + return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "false", rule.Sort} + } } - - } else { - return LittleRuleResult{} } } + return LittleRuleResult{} } // 濡傛灉鏈夋寔缁椂闂存潯浠剁淮鎶ゅ紑鍚竴涓畾鏃跺櫒 @@ -697,6 +713,7 @@ if rule.SdkArgAlias == "duration" { // logger.Info("褰撳墠灏忚鍒欐槸锛�---------", rule) // 鍏堢湅鐪嬪畾鏃跺櫒鍏冪礌闃熷垪涓槸鍚︽湁杩欐潯瑙勫垯鐨勫畾鏃跺櫒,濡傛灉鏈夊氨涓嶈兘鍐嶆鍒涘缓浜� + rw.Lock() var flag bool = true for k, _ := range TimeEleList { if k == groupId+"+"+rule.Id { @@ -712,6 +729,7 @@ TimeEleList[groupId+"+"+rule.Id] = &timeEle // 瀹氭椂鍣ㄥ厓绱犱互褰撳墠鎸佺画鏃堕棿灏忚鍒檌d涓洪敭 logger.Info("鍒涘缓浜嗚鏁板櫒") } + rw.Unlock() } } } @@ -737,18 +755,6 @@ result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� return LittleRuleResult{am.sdkName, rule.RuleWithPre + " " + strconv.FormatBool(result.(bool)), rule.Sort} // 鍔犱笂鍏充簬绠楁硶鐨勫垽鏂潯浠讹紝涓嶈兘鍙湁鍏充簬瑙勫垯鐨勶紝鏈夌殑绠楁硶鏈韩灏辨槸涓�涓鍒欙紝濡備釜浣撻潤姝紝闈犲彸琛�,鎵�浠ワ紝鎷垮埌褰撳墠瀛愯鍒欑殑sdkid鏉ュ垽鏂槸鍚︽槸閭d簺鐗规畩鐨勮鍒� - } else if rule.SdkId == "IsStatic" { // 闈欐绠楁硶 - if am.isStatic { - return LittleRuleResult{} - } else { - return LittleRuleResult{} - } - } else if rule.SdkId == "KeepRight" { // 闈犲彸琛岀畻娉� - if am.keepRight { - return LittleRuleResult{} - } else { - return LittleRuleResult{} - } } } return LittleRuleResult{} -- Gitblit v1.8.0