From 573a1e019fc00e171b7df7105fe69b414a490966 Mon Sep 17 00:00:00 2001 From: panlei <2799247126@qq.com> Date: 星期六, 09 十一月 2019 15:03:36 +0800 Subject: [PATCH] 把一部分判断放进中间件 --- algorithm/middleware/middleware.go | 73 ++++++++++ /dev/null | 0 ruleserver/ruleToformula.go | 226 ++++++++++++++------------------ algorithm/static/static.go | 41 +++++ ruleserver/readyDataForRule.go | 12 ruleserver/timeTicker.go | 8 ruleserver/geoPolygon.go | 20 +- 7 files changed, 224 insertions(+), 156 deletions(-) diff --git a/algorithm/middleware/middleware.go b/algorithm/middleware/middleware.go index a1e9bbc..7eb9b21 100644 --- a/algorithm/middleware/middleware.go +++ b/algorithm/middleware/middleware.go @@ -7,12 +7,14 @@ "github.com/knetic/govaluate" "plugin" "ruleprocess/cache" + "ruleprocess/ruleserver" "ruleprocess/structure" + "sort" "strings" "time" ) -func Entrance (args *structure.SdkDatas,groupRule protomsg.GroupRule) ([]*structure.LittleRuleResult,string,string){ +func Entrance (args *structure.SdkDatas,groupRule protomsg.GroupRule) (bool,string,string){ resultSplice := []*structure.LittleRuleResult{} sdkNames := "" polygonId := "" @@ -52,6 +54,43 @@ } } } + // 浜鸿劯 + for j := 0; j < len(groupRule.Rules); j++ { + if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && groupRule.Rules[j].SdkArgAlias != "time_rule"{ + 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("褰撳墠璧扮殑瑙勫垯鏄�--锛�", sdkName, "---","") + for _, areaMap := range sdkData.AreaMapList { + ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap) + 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 == "812b674b-2375-4589-919a-5c1c3278a972" && groupRule.Rules[j].SdkArgAlias != "time_rule"{ for _, sdkData := range args.Sdkdata { @@ -148,7 +187,37 @@ } } } - return resultSplice,sdkNames,polygonId + // 灏嗘暟缁勬寜sort鎺掑簭 + sort.Sort(ruleserver.ResultList(resultSplice)) + // 鎺掑簭鍚庡彇鍚勮嚜鐨勭粨鏋滃拰杩炴帴绗︽嫾鍑鸿鍒欒〃杈惧紡寰楀嚭缁撴灉 + completeFormula := "" + for _, va := range resultSplice { + completeFormula = completeFormula + va.Result + } + if strings.HasPrefix(completeFormula, "&&") || strings.HasPrefix(completeFormula, "||") || strings.HasPrefix(completeFormula, ">=") || strings.HasPrefix(completeFormula, "<=") || strings.HasPrefix(completeFormula, "==") || strings.HasPrefix(completeFormula, "!=") || strings.HasPrefix(completeFormula, ">") || strings.HasPrefix(completeFormula, "<") { + // 浠ヨ繖浜涘紑澶寸殑鍩烘湰鏄仈鍔ㄤ换鍔� + if strings.HasPrefix(completeFormula, "&&") || strings.HasPrefix(completeFormula, "||") || strings.HasPrefix(completeFormula, ">=") || strings.HasPrefix(completeFormula, "<=") || strings.HasPrefix(completeFormula, "==") || strings.HasPrefix(completeFormula, "!=") { + completeFormula = completeFormula[2:] + } + if strings.HasPrefix(completeFormula, ">") || strings.HasPrefix(completeFormula, "<") { + completeFormula = completeFormula[1:] + } + logger.Info("-------------------鐪嬬湅鎷旀瘺鍚庣殑琛ㄨ揪寮忥細", completeFormula) + //expression, _ := govaluate.NewEvaluableExpression(completeFormula) + //result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� + //return result.(bool) + } + if completeFormula != "" { + logger.Info("缁撴灉鍏紡-----------锛�", completeFormula) + expression, err2 := govaluate.NewEvaluableExpression(completeFormula) + if strings.HasPrefix(completeFormula, "&&") || strings.HasPrefix(completeFormula, "||") || err2 != nil { + panic("瑙勫垯鏈夎锛屽緱鍒扮殑鏁板鍏紡涓嶅彲瑙f瀽") + } + result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� + return result.(bool),sdkNames,polygonId + } else { + return false,sdkNames,polygonId + } } func timeRuleResult(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult { diff --git a/algorithm/static/static.go b/algorithm/static/static.go index 88b4e33..6caff13 100644 --- a/algorithm/static/static.go +++ b/algorithm/static/static.go @@ -8,9 +8,23 @@ "ruleprocess/structure" "strconv" ) + //涓綋闈欐绠楁硶 +var StaticMap = make(map[string]CameraArea) + +type CameraArea struct { + targets []Obj + duration int + cache structure.ResultMsg +} +type Obj struct { + id string + location []structure.Rect + staticStatus int +} + func Entrance(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult { - for _,obj := range am.FilterData { + for _, obj := range am.FilterData { var flag bool = true for k, _ := range ruleserver.TimeEleList { if k == rule.Id+""+strconv.Itoa(int(obj.Id)) { @@ -20,7 +34,7 @@ } if flag { timeEle := ruleserver.TimeElement{N: 10, InitN: 10, AlarmFlag: false, BufferFlag: 5} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌 - ruleserver.TimeEleList[rule.Id+""+strconv.Itoa(int(obj.Id))] = &timeEle // 瀹氭椂鍣ㄥ厓绱犱互灏忚鍒檌d鍜岀洰鏍噄d涓洪敭 + ruleserver.TimeEleList[rule.Id+""+strconv.Itoa(int(obj.Id))] = &timeEle // 瀹氭椂鍣ㄥ厓绱犱互灏忚鍒檌d鍜岀洰鏍噄d涓洪敭 } } return structure.LittleRuleResult{} @@ -62,4 +76,25 @@ } else { return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} } -} \ No newline at end of file +} + +// 鍒ゆ柇涓や釜鐭╁舰鐨勯噸鍚堝害锛屾妸闈㈢Н鏇村ぇ鐨勫仛鍒嗘瘝 +func PgsInterPercent(pgpts []structure.Point, box structure.Rect, widthScale float64, heightScale float64) (percent float64) { + + areapts, areaBox := ruleserver.GetLocation(box, 10) + var count = 0 + for _, pts := range areapts { + if ruleserver.PintIsInPolygon(pts, pgpts, widthScale, heightScale) { + count++ + } + } + perInterBox := float64(count) / float64(len(areapts)) // 閲嶅悎闈㈢Н鍗犵煩褰㈢殑姣斾緥 + areaInter := perInterBox * areaBox + areaPg := ruleserver.ComputePolygonArea(pgpts) + perInterPg := areaInter / areaPg // 閲嶅悎闈㈢Н鍗犲杈瑰舰鍖哄煙鐨勬瘮渚� + // 鍝釜鍗犵殑姣斾緥灏忔寜鍝釜璁$畻锛屾瘮濡備汉绔欒捣鏉ヤ簡锛屽ぇ妗嗗浣忎簡灏忔 + if perInterBox < perInterPg { + return (perInterBox * 100) + } + return (perInterPg * 100) +} diff --git a/ruleprocess b/ruleprocess deleted file mode 100755 index 066a30c..0000000 --- a/ruleprocess +++ /dev/null Binary files differ diff --git a/ruleserver/geoPolygon.go b/ruleserver/geoPolygon.go index ec304a4..bb74b6c 100644 --- a/ruleserver/geoPolygon.go +++ b/ruleserver/geoPolygon.go @@ -20,12 +20,6 @@ return num1 } -//Point 鍧愭爣鐐� -type Point struct { - X float64 `json:"x"` - Y float64 `json:"y"` -} - //Rect 妫�娴嬬洰鏍� type Rect struct { X float64 @@ -43,7 +37,7 @@ //PintIsInPolygon 鍒ゆ柇鐐规槸鍚﹀湪澶氳竟褰㈠唴閮� //point涓鸿鍒ゆ柇鐨勫潗鏍囩偣 //polygon鏄杈瑰舰鍚勭偣鏁扮粍 -func pintIsInPolygon(point structure.Pointfloat, polygon []Point, widthScale float64, heightScale float64) bool { +func PintIsInPolygon(point structure.Pointfloat, polygon []structure.Point, widthScale float64, heightScale float64) bool { var nCross int = 0 for i := 0; i < len(polygon); i++ { @@ -73,7 +67,7 @@ } //GetLocation 灏嗕竴涓粰瀹氳捣濮嬪潗鏍囷紝瀹藉害闀垮害鐨勭煩褰㈠尯鍩熷潎鍒嗕负n鏂逛唤骞惰繑鍥炰腑蹇冨潗鏍囷紙n涓哄崟杈瑰钩鍒嗘暟鍊硷級鍜岄潰绉� -func getLocation(rect structure.Rect, n int) ([]structure.Pointfloat, float64) { +func GetLocation(rect structure.Rect, n int) ([]structure.Pointfloat, float64) { xArr := make([]float64, n) // 鐢ㄥ垏鐗囦笉鐢ㄦ暟缁勶紝鏁扮粍涓嶈兘鐢ㄥ彉閲忓畾涔夐暱搴� yArr := make([]float64, n) pointArr := make([]structure.Pointfloat, 0, n*n) @@ -92,7 +86,7 @@ } //ComputePolygonArea 璁$畻浠绘剰澶氳竟褰㈤潰绉� -func computePolygonArea(polygon []Point) float64 { +func ComputePolygonArea(polygon []structure.Point) float64 { pointNum := len(polygon) var s float64 = 0 if pointNum < 3 { @@ -106,18 +100,18 @@ } //PgsInterPercent calculate percent of two polygon intersection 璁$畻涓や釜澶氳竟褰㈢殑閲嶅彔鍗犳瘮 -func PgsInterPercent(pgpts []Point, box structure.Rect, widthScale float64, heightScale float64) (percent float64) { +func PgsInterPercent(pgpts []structure.Point, box structure.Rect, widthScale float64, heightScale float64) (percent float64) { - areapts, areaBox := getLocation(box, 10) + areapts, areaBox := GetLocation(box, 10) var count = 0 for _, pts := range areapts { - if pintIsInPolygon(pts, pgpts, widthScale, heightScale) { + if PintIsInPolygon(pts, pgpts, widthScale, heightScale) { count++ } } perInterBox := float64(count) / float64(len(areapts)) // 閲嶅悎闈㈢Н鍗犵煩褰㈢殑姣斾緥 areaInter := perInterBox * areaBox - areaPg := computePolygonArea(pgpts) + areaPg := ComputePolygonArea(pgpts) perInterPg := areaInter / areaPg // 閲嶅悎闈㈢Н鍗犲杈瑰舰鍖哄煙鐨勬瘮渚� // 鍝釜鍗犵殑姣斾緥澶ф寜鍝釜璁$畻 if perInterBox > perInterPg { diff --git a/ruleserver/readyDataForRule.go b/ruleserver/readyDataForRule.go index 7aa9db4..91b36da 100644 --- a/ruleserver/readyDataForRule.go +++ b/ruleserver/readyDataForRule.go @@ -123,14 +123,14 @@ // 灏嗗瓧绗︿覆鏍煎紡鐨勫潗鏍囧簭鍒楀寲涓篜oint鏍煎紡 -func Json2points(areaPoints string) []Point { - var pts []Point +func Json2points(areaPoints string) []structure.Point { + var pts []structure.Point if areaPoints == "[]" || areaPoints == "" { logger.Error("=====================姝ゅ尯鍩熶负鍏ㄩ儴鍖哄煙") - pts = append(pts, Point{0, 0}) - pts = append(pts, Point{0, 540}) - pts = append(pts, Point{960, 540}) - pts = append(pts, Point{960, 0}) + 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}) } else { err := json.Unmarshal([]byte(areaPoints), &pts) if err != nil { diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go index bb78fda..d5433ae 100644 --- a/ruleserver/ruleToformula.go +++ b/ruleserver/ruleToformula.go @@ -9,7 +9,6 @@ "ruleprocess/structure" "sort" "strconv" - "strings" "sync" ) @@ -77,7 +76,7 @@ } } -func CallMiddleware(args *structure.SdkDatas,rule protomsg.GroupRule) ([]*structure.LittleRuleResult, string, string){ +func CallMiddleware(args *structure.SdkDatas,rule protomsg.GroupRule) (bool, string, string){ p,err := plugin.Open("./algorithm/middleware.so") if err != nil { panic(err) @@ -86,7 +85,7 @@ if err1 != nil { panic("娌℃湁鎵惧埌涓棿浠跺叆鍙e嚱鏁�") } - a,b,c := f.(func(args *structure.SdkDatas,rule protomsg.GroupRule)([]*structure.LittleRuleResult, string, string))(args,rule) + a,b,c := f.(func(args *structure.SdkDatas,rule protomsg.GroupRule)(bool, string, string))(args,rule) return a,b,c } @@ -99,149 +98,120 @@ logger.Info("+++++++++++瑙勫垯寮�濮嬭繍琛�+++++++++++++++++褰撳墠澶ц鍒�--锛�", (*groupRule).GroupText) //logger.Warn("浼犺繘鍘讳箣鍚庢槸浠�涔堝痉琛岋細",args.RuleResult["yolo"]) Compare(args, groupRule) - resultSplice := []*structure.LittleRuleResult{} + result := false sdkNames := "" polygonId := "" - resultSplice,sdkNames,polygonId = CallMiddleware(args,*groupRule) - // 灏嗘暟缁勬寜sort鎺掑簭 - sort.Sort(resultList(resultSplice)) - // 鎺掑簭鍚庡彇鍚勮嚜鐨勭粨鏋滃拰杩炴帴绗︽嫾鍑鸿鍒欒〃杈惧紡寰楀嚭缁撴灉 - completeFormula := "" - for _, va := range resultSplice { - completeFormula = completeFormula + va.Result - } - if strings.HasPrefix(completeFormula, "&&") || strings.HasPrefix(completeFormula, "||") || strings.HasPrefix(completeFormula, ">=") || strings.HasPrefix(completeFormula, "<=") || strings.HasPrefix(completeFormula, "==") || strings.HasPrefix(completeFormula, "!=") || strings.HasPrefix(completeFormula, ">") || strings.HasPrefix(completeFormula, "<") { - // 浠ヨ繖浜涘紑澶寸殑鍩烘湰鏄仈鍔ㄤ换鍔� - if strings.HasPrefix(completeFormula, "&&") || strings.HasPrefix(completeFormula, "||") || strings.HasPrefix(completeFormula, ">=") || strings.HasPrefix(completeFormula, "<=") || strings.HasPrefix(completeFormula, "==") || strings.HasPrefix(completeFormula, "!=") { - completeFormula = completeFormula[2:] - } - if strings.HasPrefix(completeFormula, ">") || strings.HasPrefix(completeFormula, "<") { - completeFormula = completeFormula[1:] - } - logger.Info("-------------------鐪嬬湅鎷旀瘺鍚庣殑琛ㄨ揪寮忥細", completeFormula) - //expression, _ := govaluate.NewEvaluableExpression(completeFormula) - //result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� - //return result.(bool) - } - if completeFormula != "" { - logger.Info("缁撴灉鍏紡-----------锛�", completeFormula) - expression, err2 := govaluate.NewEvaluableExpression(completeFormula) - if strings.HasPrefix(completeFormula, "&&") || strings.HasPrefix(completeFormula, "||") || err2 != nil { - panic("瑙勫垯鏈夎锛屽緱鍒扮殑鏁板鍏紡涓嶅彲瑙f瀽") - } - result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� + // 鎶婁竴甯ф暟鎹拰涓�缁勮鍒欏彂缁欑畻娉曢儴鍒嗭紝寰楀嚭鍒ゆ柇缁撴灉 + result,sdkNames,polygonId = CallMiddleware(args,*groupRule) - if result.(bool) { - // 鏈�鍚庤繃鎸佺画鏃堕棿绛夋椂闂寸淮搴︾殑鏉′欢 鎶婃椂闂磋鍒欎綅缃皟鏁村埌杩欎釜浣嶇疆鏄负浜嗙紦瀛樻暟鎹� - cacheId := "" + if result { + // 鏈�鍚庤繃鎸佺画鏃堕棿绛夋椂闂寸淮搴︾殑鏉′欢 鎶婃椂闂磋鍒欎綅缃皟鏁村埌杩欎釜浣嶇疆鏄负浜嗙紦瀛樻暟鎹� + cacheId := "" + 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 + if ipcId == sdkData.IpcId { + for _, areaMap := range sdkData.AreaMapList { + // 鍘诲紑鍚竴涓畾鏃跺櫒 + cacheid := duration(groupRule.Rules[j], groupRule.GroupId, areaMap, args, message) + if cacheid != "" { + cacheId = cacheid + } + } + } + } + } + // 杩涜瀹氭椂鍣ㄧ殑澶勭悊鍜屽垽鏂� + timeFlag := TimerAlarm(&label, groupRule.GroupId, result) + if timeFlag == "01" || timeFlag == "10" || timeFlag == "11" || cacheId != ""{ // 娌℃湁瀹氭椂鍣ㄦ垨鑰呮弧瓒冲畾鏃跺櫒鏉′欢 + // 鎵撲汉鑴告爣绛惧拰yolo鏍囩 + // 鏈�鍚庢垚鍔熸姤璀︽墠鎶婄鍚堟潯浠剁殑浜鸿劯鏁版嵁濉炶繘缁撴灉鏍囩閲� + // 閰嶄簡浜鸿劯鐨勭畻娉曟墠鎶婁汉鑴哥殑鏁版嵁鐢╁嚭鏉ユ墦鏍囩 + faces := []structure.Arg{} + faceFlag := false 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 - if ipcId == sdkData.IpcId { - for _, areaMap := range sdkData.AreaMapList { - // 鍘诲紑鍚竴涓畾鏃跺櫒 - cacheid := duration(groupRule.Rules[j], groupRule.GroupId, areaMap, args, message) - if cacheid != "" { - cacheId = cacheid - } + if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" { + faceFlag = true + } + } + for _, sdkData := range args.Sdkdata { + if sdkData.IpcId == "A8B73405-373D-4F23-CED2-A617EBD7EC55" && faceFlag { // sdkData閲屾湁浜鸿劯鏁版嵁涓旈厤缃簡绠楁硶鎵嶆妸绗﹀悎鏉′欢鐨勬暟鎹杩涙爣绛鹃噷鍘� + for _, areaMap := range sdkData.AreaMapList { + if areaMap.IsEffective { + faces = append(faces, putFaceToResult(areaMap, faces)...) } } } } - // 杩涜瀹氭椂鍣ㄧ殑澶勭悊鍜屽垽鏂� - timeFlag := TimerAlarm(&label, groupRule.GroupId, result.(bool)) - if timeFlag == "01" || timeFlag == "10" || timeFlag == "11" || cacheId != ""{ // 娌℃湁瀹氭椂鍣ㄦ垨鑰呮弧瓒冲畾鏃跺櫒鏉′欢 - // 鎵撲汉鑴告爣绛惧拰yolo鏍囩 - // 鏈�鍚庢垚鍔熸姤璀︽墠鎶婄鍚堟潯浠剁殑浜鸿劯鏁版嵁濉炶繘缁撴灉鏍囩閲� - // 閰嶄簡浜鸿劯鐨勭畻娉曟墠鎶婁汉鑴哥殑鏁版嵁鐢╁嚭鏉ユ墦鏍囩 - faces := []structure.Arg{} - faceFlag := 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-5c1c3278a972" { - faceFlag = true - } - } - for _, sdkData := range args.Sdkdata { - if sdkData.IpcId == "A8B73405-373D-4F23-CED2-A617EBD7EC55" && faceFlag { // sdkData閲屾湁浜鸿劯鏁版嵁涓旈厤缃簡绠楁硶鎵嶆妸绗﹀悎鏉′欢鐨勬暟鎹杩涙爣绛鹃噷鍘� - for _, areaMap := range sdkData.AreaMapList { - if areaMap.IsEffective { - faces = append(faces, putFaceToResult(areaMap, faces)...) - } + //logger.Info("face鏍囩鐨勯暱搴︼細",len(faces)) + //for _,face := range faces { + // //logger.Debug("鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�擾_______________鐪嬬湅浜鸿劯鐨勫潗鏍�:",face.Location) + //} + logger.Warn("___________________________________________________________________________缁堜簬璧板畬涓囬噷闀垮緛") + // 鎶婁粬浠殑浣嶇疆鏁版嵁涔熶紶涓嬪幓 + locations := []structure.TargetInfo{} + for _, sdkData := range args.Sdkdata { + if sdkData.IpcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && sdkNames != "" { // 鎶妝olo鏁版嵁鐨勫悇涓洰鏍囩殑鍧愭爣杈撳嚭鏂逛究鍚庨潰鐢绘 + for _, areaMap := range sdkData.AreaMapList { + if areaMap.IsEffective { + locations = append(locations, putYolosToResult(areaMap)...) } } } - //logger.Info("face鏍囩鐨勯暱搴︼細",len(faces)) - //for _,face := range faces { - // //logger.Debug("鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�擾_______________鐪嬬湅浜鸿劯鐨勫潗鏍�:",face.Location) - //} - logger.Warn("___________________________________________________________________________缁堜簬璧板畬涓囬噷闀垮緛") - // 鎶婁粬浠殑浣嶇疆鏁版嵁涔熶紶涓嬪幓 - locations := []structure.TargetInfo{} - for _, sdkData := range args.Sdkdata { - if sdkData.IpcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && sdkNames != "" { // 鎶妝olo鏁版嵁鐨勫悇涓洰鏍囩殑鍧愭爣杈撳嚭鏂逛究鍚庨潰鐢绘 - for _, areaMap := range sdkData.AreaMapList { - if areaMap.IsEffective { - locations = append(locations, putYolosToResult(areaMap)...) - } - } - } - } - logger.Debug("------locations鐨勫唴瀹癸細", locations) - var islink bool - if groupRule.SetType == "linkTask" { - islink = true - } else { - islink = false - } - var labelTypes []int // 0涓簓olo鏍囩锛�1涓篺ace鏍囩 2涓轰袱鑰呮爣绛� - if sdkNames != "" { - args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]structure.Result), structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, locations, polygonId, islink,label,}) - labelTypes = append(labelTypes,0) - //logger.Info("-------------------yolo缁撴灉鏍囩闀垮害", len(args.RuleResult["yolo"].([]Result))) - } - if faceFlag { - args.RuleResult["face"] = append(args.RuleResult["face"].([]structure.FaceResult), structure.FaceResult{structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, []structure.TargetInfo{}, polygonId, islink,label,}, faces}) - //logger.Info("-------------------face缁撴灉鏍囩", len(args.RuleResult["face"].([]FaceResult))) - labelTypes = append(labelTypes,1) - } - // 缁欐寔缁椂闂寸殑绗竴寮犺祴浜堢紦瀛樻暟鎹紙閬嶅巻澶嶅埗锛� - if cacheId != "" { // 鏈夎繖甯ф暟鎹殑缂撳瓨 - tempMap := make(map[string]interface{}) - for k, result := range args.RuleResult { - if k == "yolo" { - tempMap[k] = []structure.Result{} - for _, res := range result.([]structure.Result) { - tempMap[k] = append(tempMap[k].([]structure.Result), res) - } - } - if k == "face" { - tempMap[k] = []structure.FaceResult{} - for _, res := range result.([]structure.FaceResult) { - tempMap[k] = append(tempMap[k].([]structure.FaceResult), res) - } - } - } - rw.Lock() - TimeEleList[cacheId].CacheSdkData.RuleResult = tempMap - rw.Unlock() - } - - return true,labelTypes + } + logger.Debug("------locations鐨勫唴瀹癸細", locations) + var islink bool + if groupRule.SetType == "linkTask" { + islink = true } else { - return false,[]int{} + islink = false + } + var labelTypes []int // 0涓簓olo鏍囩锛�1涓篺ace鏍囩 2涓轰袱鑰呮爣绛� + if sdkNames != "" { + args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]structure.Result), structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, locations, polygonId, islink,label,}) + labelTypes = append(labelTypes,0) + //logger.Info("-------------------yolo缁撴灉鏍囩闀垮害", len(args.RuleResult["yolo"].([]Result))) + } + if faceFlag { + args.RuleResult["face"] = append(args.RuleResult["face"].([]structure.FaceResult), structure.FaceResult{structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, []structure.TargetInfo{}, polygonId, islink,label,}, faces}) + //logger.Info("-------------------face缁撴灉鏍囩", len(args.RuleResult["face"].([]FaceResult))) + labelTypes = append(labelTypes,1) + } + // 缁欐寔缁椂闂寸殑绗竴寮犺祴浜堢紦瀛樻暟鎹紙閬嶅巻澶嶅埗锛� + if cacheId != "" { // 鏈夎繖甯ф暟鎹殑缂撳瓨 + tempMap := make(map[string]interface{}) + for k, result := range args.RuleResult { + if k == "yolo" { + tempMap[k] = []structure.Result{} + for _, res := range result.([]structure.Result) { + tempMap[k] = append(tempMap[k].([]structure.Result), res) + } + } + if k == "face" { + tempMap[k] = []structure.FaceResult{} + for _, res := range result.([]structure.FaceResult) { + tempMap[k] = append(tempMap[k].([]structure.FaceResult), res) + } + } + } + rw.Lock() + TimeEleList[cacheId].CacheSdkData.RuleResult = tempMap + rw.Unlock() } + return true,labelTypes } else { - // 缁撴灉涓哄亣鏃朵篃瑕佽蛋锛屾湁鏉�姝诲畾鏃跺櫒鐨勬搷浣� - TimerAlarm(&label, groupRule.GroupId, result.(bool)) - //fmt.Println(timeFlag) return false,[]int{} } + } else { + // 缁撴灉涓哄亣鏃朵篃瑕佽蛋锛屾湁鏉�姝诲畾鏃跺櫒鐨勬搷浣� + TimerAlarm(&label, groupRule.GroupId, result) + //fmt.Println(timeFlag) return false,[]int{} } } diff --git a/ruleserver/timeTicker.go b/ruleserver/timeTicker.go index a572879..820ab18 100644 --- a/ruleserver/timeTicker.go +++ b/ruleserver/timeTicker.go @@ -148,8 +148,8 @@ func (p SubList) Less(i, j int) bool { return p[i].Sort < p[j].Sort } // 缁撴瀯浣撴牴鎹煇瀛楁鎺掑簭 -type resultList []*structure.LittleRuleResult +type ResultList []*structure.LittleRuleResult -func (p resultList) Swap(i, j int) { p[i], p[j] = p[j], p[i] } -func (p resultList) Len() int { return len(p) } -func (p resultList) Less(i, j int) bool { return p[i].Sort < p[j].Sort } +func (p ResultList) Swap(i, j int) { p[i], p[j] = p[j], p[i] } +func (p ResultList) Len() int { return len(p) } +func (p ResultList) Less(i, j int) bool { return p[i].Sort < p[j].Sort } -- Gitblit v1.8.0