From b99585a66d71b9e4b24eac3d41933f9b4f340d46 Mon Sep 17 00:00:00 2001 From: panlei <2799247126@qq.com> Date: 星期四, 04 七月 2019 11:31:48 +0800 Subject: [PATCH] --- --- ruleserver/ruleToformula.go | 242 ++++++++++++++++++++++++++++++------------------ 1 files changed, 150 insertions(+), 92 deletions(-) diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go index 107cf6e..ef89737 100644 --- a/ruleserver/ruleToformula.go +++ b/ruleserver/ruleToformula.go @@ -4,12 +4,13 @@ "encoding/json" "fmt" "log" + "os" + "ruleprocess/cache" "sort" "strconv" "strings" "time" - "basic.com/dbapi.git" "basic.com/pubsub/protomsg.git" "github.com/knetic/govaluate" ) @@ -64,7 +65,7 @@ Location Rect // 璁颁笅姣忎釜鐩爣鐨勪綅缃弬鏁帮紝鏈�鍚庣粰缁撴灉瑁呴厤浜鸿劯鏁版嵁鐨勬椂鍊欑敤鐨勫埌 SdkName string ThftRes protomsg.ThftResult - Liker []LikePerson + Liker []*protomsg.Baseinfo } type LikePerson struct { @@ -98,20 +99,8 @@ IsYolo bool // 鏄惁鏄痽olo鏁版嵁 SdkName string ThftRes protomsg.ThftResult - Liker []LikePerson // 濡傛灉鏄汉鑴哥殑璇濆挨鍏舵槸姣斿锛屽簲瀛樹笅浠栬窡搴曞簱鐨勪汉鍛樼殑鐩镐技鎯呭喌 yolo鐨勮瘽缁檔il灏辫 + Liker []*protomsg.Baseinfo // 濡傛灉鏄汉鑴哥殑璇濆挨鍏舵槸姣斿锛屽簲瀛樹笅浠栬窡搴曞簱鐨勪汉鍛樼殑鐩镐技鎯呭喌 yolo鐨勮瘽缁檔il灏辫 } - -// 浠庨�氶亾涓幏鍙栫殑sdk杈撳嚭鐨勫浘鍍忔暟鎹�(鐩墠涓昏鏄痽olo绠楁硶鐨勬暟鎹�) -//type ArgsFromSdk struct { -// CameraId string -// TaskId string -// Photo []PhotoMap // yolo绠楁硶缁撴瀯锛屼篃鍙互瀛樹汉鑴哥殑鏁版嵁锛屾瘯绔熶汉鑴镐腑鑳界敤瑙勫垯鏉ユ祴鐨勮繕鏄偅浜涘弬鏁� -// KeepRight bool // 鏄惁闈犲彸琛� 绠楁硶鍒ゆ柇鐨勪笌涓婁竴甯у浘鍍忕殑姣旇緝缁撴灉 -// IsStatic bool // 鏄惁闈欐 -// ImageWidth int // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚瀹� 鍍忕礌 -// ImageHeight int // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚楂� 鍍忕礌 -// RuleResult []Result // 杩囧畬瑙勫垯鍚庢墦鐨勬爣绛� -//} // 姣忎釜绠楁硶瀵逛簬褰撳墠甯х敾闈㈣嚜宸辨彁鍙栫殑鏁版嵁 type SdkData struct { @@ -130,7 +119,7 @@ // 浠庣畻娉曟ā鍧楀効鎷挎潵鐨勫涓�甯у浘鍍忓悇涓畻娉曟彁鍙栫殑鏁版嵁闆嗗悎 type SdkDatas struct { CameraId string - Sdkdata []SdkData + Sdkdata []*SdkData RuleResult map[string]interface{} // 杩囧畬瑙勫垯鍚庢墦鐨勬爣绛� face: []Arg yolo: []Result } @@ -151,7 +140,7 @@ RuleText string // 鏂囧瓧鐗堣鍒欑粍 } type LittleRuleResult struct { - SdkName string //璁板綍涓嬫缁撴灉鏄摢涓猻dk鐨勭粨鏋� + SdkName string // 璁板綍涓嬫缁撴灉鏄摢涓猻dk鐨勭粨鏋� Result string // 宸插寘鍚簡鍓嶇疆杩炴帴绗� Sort int32 } @@ -170,28 +159,30 @@ } // 鏍规嵁鎽勫儚鏈篿d鎷垮埌鎽勫儚鏈烘墍鏈夊尯鍩� -func GetPolygons(cameraId string) []*protomsg.CameraPolygon { - var api dbapi.CameraApi - data := api.FindAllPolygons() - //fmt.Println("鏌ュ埌鐨勬墍鏈夊尯鍩燂細", data) - // 鏍规嵁id浠巑ap涓嬁鍒板尯鍩� - var cameraPolygons []*protomsg.CameraPolygon - for _, item := range data { - if item.CameraId == cameraId { - // 闇�瑕佹牴鎹瘮渚嬫妸鍓嶅彴鐢荤殑鍖哄煙鐨勫潗鏍囪浆鍖栦负鐩稿簲鎽勫儚鏈烘媿鎽勭殑鍥惧儚鐨勫ぇ灏� x鍧愭爣鍒嗗埆*image.width/椤甸潰鍖哄煙瀹� y鍧愭爣鍒嗗埆*image.height/椤甸潰鍖哄煙楂� - // 鍓嶅彴瀹介珮鍥哄畾 - cameraPolygons = append(cameraPolygons, &item) - } - } +func GetPolygons(cameraId string) []protomsg.CameraPolygon { + //var api dbapi.CameraApi + //data := api.FindAllPolygons() + ////fmt.Println("鏌ュ埌鐨勬墍鏈夊尯鍩燂細", data) + //// 鏍规嵁id浠巑ap涓嬁鍒板尯鍩� + var cameraPolygons []protomsg.CameraPolygon + //for _, item := range data { + // if item.CameraId == cameraId && item.Type != "line" { + // // 闇�瑕佹牴鎹瘮渚嬫妸鍓嶅彴鐢荤殑鍖哄煙鐨勫潗鏍囪浆鍖栦负鐩稿簲鎽勫儚鏈烘媿鎽勭殑鍥惧儚鐨勫ぇ灏� x鍧愭爣鍒嗗埆*image.width/椤甸潰鍖哄煙瀹� y鍧愭爣鍒嗗埆*image.height/椤甸潰鍖哄煙楂� + // // 鍓嶅彴瀹介珮鍥哄畾 + // //log.Println("------------绗﹀悎鏉′欢鐨勫尯鍩燂細",item) + // cameraPolygons = append(cameraPolygons, item) + // } + //} + cameraPolygons = cache.GetPolygonsByCameraId(cameraId) + //log.Println("鏍规嵁鎽勫儚鏈篿d鏌ュ埌鐨勫尯鍩�", cameraPolygons, "--鍖哄煙鏁伴噺涓猴細", len(cameraPolygons)) return cameraPolygons } // 鎶妔dk浠庢暟鎹抚涓婃彁鍙栫殑鎸夌収鍖哄煙鍒嗙被褰掔疆 -func SdkDataFormat(cameraId string, arg *SdkData, cameraPolygons []*protomsg.CameraPolygon) { - // cameraPolygons := GetPolygons(arg.CameraId) - // list := AreaMapList{} +func SdkDataFormat(cameraId string, arg *SdkData, cameraPolygons []protomsg.CameraPolygon) { for _, polygon := range cameraPolygons { + //log.Println("++++++鍦ㄨ繖鍎跨湅涓�涓嬪尯鍩熷晩:", polygon.Polygon) areaMap := AreaMap{cameraId: cameraId, areaId: polygon.Id, areaJson: polygon.Polygon, triggerLine: polygon.TriggerLine, directionLine: polygon.DirectionLine} // 涓烘瘡涓憚鍍忔満鍖哄煙濉厖鏁版嵁 areaMap.CountAreaObjs(arg) @@ -206,24 +197,27 @@ cameraPolygons := GetPolygons(args.CameraId) // 鎶婃墍鏈夌殑sdk鎻愬彇鐨勬暟鎹兘鎸夋墍灞炴憚鍍忔満鐨勫尯鍩熷綊缃� for _, arg := range args.Sdkdata { - SdkDataFormat(args.CameraId, &arg, cameraPolygons) + SdkDataFormat(args.CameraId, arg, cameraPolygons) } // 璺戞湰鎽勫儚鏈虹殑鎵�鏈夎鍒欑粍 涓�缁勪竴缁勮窇 taskRuleList := GetRuleGroup(args.CameraId) // 鏈憚鍍忔満涓嬫墍鏈変换鍔$粍 + //log.Println("鐪嬩笅鎽勫儚鏈轰笅鐨勪换鍔$粍锛�",taskRuleList) // 寰楀埌灞炰簬璇ユ憚鍍忔満鐨勮嫢骞茬粍浠诲姟鐨勫畬鏁磋鍒欙紙璺熸瘡涓�鏉″畬鏁磋鍒欐瘮杈冧箣鍚庡緱鍑烘湰寮犲浘鍍忓浜庢煇涓鍒欐槸鍚︽姤璀︾殑缁撴灉銆傛斁杩沵ap锛屾瘮濡傛湰甯у浘鍍忕殑id锛屾墍纰版挒鎴愬姛鐨勮鍒檌d锛� args.RuleResult = make(map[string]interface{}) args.RuleResult["yolo"] = []Result{} 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)) 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) @@ -235,6 +229,12 @@ } } func RunRule(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string) bool { + defer func() { + if err := recover(); err != nil { + fmt.Println("姣斿瑙勫垯鏈夎", err.(string)) + } + }() + log.Println("+++++++++++瑙勫垯寮�濮嬭繍琛�+++++++++++++++++褰撳墠瑙勫垯--锛�", (*groupRule).GroupText) resultSplice := []*LittleRuleResult{} // 鍏堣繃瀹屾潯浠惰鍒� for j := 0; j < len(groupRule.Rules); j++ { @@ -248,16 +248,7 @@ } } } - // 杩囧畬鏉′欢鏁版嵁鍚庢妸绗﹀悎鏉′欢鐨勪汉鑴告暟鎹杩涚粨鏋滄爣绛鹃噷 - faces := []Arg{} - for _, sdkData := range args.Sdkdata { - for _, areaMap := range sdkData.AreaMapList { - for j := 0; j < len(groupRule.Rules); j++ { - putFaceToResult(groupRule.Rules[j], &areaMap, faces) - } - } - } - args.RuleResult["face"] = faces + // 鍐嶈繃鍏朵粬鏁版嵁 杩欐鐩存帴寰楀埌缁撴灉锛堢湡鎴栧亣锛� 杩囩洰鏍囨暟閲� for j := 0; j < len(groupRule.Rules); j++ { for _, sdkData := range args.Sdkdata { @@ -298,9 +289,13 @@ completeFormula = completeFormula + va.Result } if completeFormula != "" { + log.Println("缁撴灉鍏紡-----------锛�", completeFormula) expression, _ := govaluate.NewEvaluableExpression(completeFormula) + if strings.HasPrefix(completeFormula, "&&") || strings.HasPrefix(completeFormula, "||") { + panic("瑙勫垯鏈夎锛屽緱鍒扮殑鏁板鍏紡涓嶅彲瑙f瀽") + } result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� - if result.(bool) { + if !result.(bool) { // 缁欒繖甯ф暟鎹墦涓婅鍒欑粍鏍囩 //args.RuleResult = append(args.RuleResult, Result{TaskId: taskId, RuleGroupId: groupRule.GroupId}) for k, timeEle := range TimeEleList { @@ -310,28 +305,53 @@ } return false } else { + // 鏈�鍚庢垚鍔熸姤璀︽墠鎶婄鍚堟潯浠剁殑浜鸿劯鏁版嵁濉炶繘缁撴灉鏍囩閲� + faces := []Arg{} + for _, sdkData := range args.Sdkdata { + for _, areaMap := range sdkData.AreaMapList { + for j := 0; j < len(groupRule.Rules); j++ { + faces = append(faces, putFaceToResult(groupRule.Rules[j], &areaMap)...) + } + } + } + // 閰嶄簡浜鸿劯鐨勭畻娉曟墠鎶婁汉鑴哥殑鏁版嵁鐢╁嚭鏉ユ墦鏍囩 + flag11 := 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" { + flag11 = true + } + } + if flag11 { + args.RuleResult["face"] = faces + } // 鍘荤湅姹犲瓙閲屾槸鍚︽湁涓庢湰甯ф暟鎹湁鍏崇殑瀹氭椂鍣紝濡傛灉鏈夛紝鐪嬫鏃舵槸鍚﹁蛋鍒�0锛屾病鏈夋瀹氭椂鍣ㄦ垨鏈夊畾鏃跺櫒璧板埌0鐨勮瘽杩斿洖鎴愬姛鎶ヨ var flag bool = true for k, timeEle := range TimeEleList { if strings.Contains(k, taskId) { if timeEle.N != 0 { // 璺熻繖涓换鍔℃湁鍏崇殑瀹氭椂鍣ㄨ鍏ㄩ儴绛変簬0 + log.Println("鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺��-------------涓嶅啢锛屼綘鏄瀹氭椂鍣ㄦ墦璐ョ殑锛�") flag = false } } } 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}) + 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 @@ -342,14 +362,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 } // 璁$畻鍖哄煙鍐呯殑鐩爣鏁伴噺浠ュ強灏嗙浉浼煎害銆佸崰姣斻�佸昂瀵哥瓑鎵撳寘 @@ -370,6 +393,7 @@ // } for _, obj := range arg.Photo { + log.Println("------------------鐪嬬湅sdkData:", arg.SdkName, "鐨凱hoto鏁版嵁----------------", obj, "----椤轰究鐪嬬湅鍗犳瘮-----锛�", PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale)) if threshold <= obj.Score && size <= float64(obj.Rects.Width*obj.Rects.Height) && intersectionper <= PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale) { // 杩欐瑕佸榻愯〃杈惧紡閲屾墍闇�瑕佺殑鎵�鏈夊弬鏁� a.targetNum++ @@ -384,6 +408,7 @@ a.time = time.Unix(time.Now().Unix(), 0).String()[11:16] a.keepRight = arg.KeepRight a.isStatic = arg.IsStatic + //log.Println("--------------------鐪嬬湅鍖哄煙鏁版嵁锛�",*a) } // 灏嗗瓧绗︿覆鏍煎紡鐨勫潗鏍囧簭鍒楀寲涓篜oint鏍煎紡 @@ -408,21 +433,23 @@ func GetRuleGroup(cameraId string) []*protomsg.TaskGroupArgs { // 鏌ヨ鏁版嵁搴� // 绗竴姝ユ煡鍑鸿窡杩欎釜鎽勫儚鏈虹浉鍏崇殑group_id(澶ц鍒�) - var api dbapi.CameraTaskArgsApi - all := api.FindAll() - //fmt.Println("鎵�鏈夎鍒�:", all) - var taskArgs []*protomsg.TaskGroupArgs - for _, camArg := range all { - if camArg.CameraId == cameraId { - taskArgs = camArg.TaskArgs - } - } - return taskArgs + //var api dbapi.CameraTaskArgsApi + // + ////fmt.Println("鎵�鏈夎鍒�:", all) + //var taskArgs []*protomsg.TaskGroupArgs + //for _, camArg := range all { + // if camArg.CameraId == cameraId { + // taskArgs = camArg.TaskArgs + // } + //} + all := cache.GetCameraTaskRulesByCameraId(cameraId) + return all } // 鑱斿姩浠诲姟鐨勫鐞� -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 { @@ -435,7 +462,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 @@ -458,11 +485,13 @@ for _, va := range timeEle.RuleResults { if va.CameraId == args.CameraId { va.Result = strconv.FormatBool(isOk) + log.Println("杩欎釜鎽勫儚鏈�--",args.CameraId,"--琚祴浜堜簡result",va.Result) } } // 鍒ゆ柇缁撴灉鏁扮粍鏄惁瀹屾弧(鍗宠璧嬪�煎畬姣�)鍙緱鍑烘姤璀︾粨鏋� var isPerfect = true for _, va := range timeEle.RuleResults { + log.Println("---------------------鐬呯瀰褰撳墠鏁扮粍________________锛�",*va) if va.Result == "" && va.RuleWithPre != "||" { isPerfect = false } @@ -475,20 +504,28 @@ for _, va := range timeEle.RuleResults { completeFormula = completeFormula + va.RuleWithPre + "" + va.Result } + log.Println("---------------------------鑱斿姩浠诲姟鐨勫叕寮�", completeFormula) if completeFormula != "" { 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 { @@ -508,11 +545,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 { @@ -523,7 +561,7 @@ for _, obj := range am.filterData { for index := 0; index < len(obj.Liker); { // 灏嗚揪涓嶅埌闃堝�肩殑鐩镐技鑰呬粠鐩镐技鑰呮暟缁勪腑鍒犻櫎 - if obj.Liker[index].Score < argValue { + if float64(obj.Liker[index].CompareScore) < argValue { // Go 璇█涓垏鐗囧垹闄ゅ厓绱犵殑鏈川鏄細浠ヨ鍒犻櫎鍏冪礌涓哄垎鐣岀偣锛屽皢鍓嶅悗涓や釜閮ㄥ垎鐨勫唴瀛橀噸鏂拌繛鎺ヨ捣鏉ャ�備笉鐢ㄦ��鐤戯紝鏁扮粍鍒犻櫎鍏冪礌灏辫繖涔堝潙鐖� obj.Liker = append(obj.Liker[:index], obj.Liker[index+1:]...) } else { @@ -546,7 +584,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" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔� @@ -562,10 +601,13 @@ var formula string if rule.SdkArgAlias == "score" { formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� + log.Println("褰撳墠鐩镐技搴﹀皬鍏紡锛�", formula) } else if rule.SdkArgAlias == "proportion" { formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� + log.Println("褰撳墠鍗犳瘮灏忓叕寮忥細", formula) } else { formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� + log.Println("褰撳墠灏哄灏忓叕寮忥細", formula) } expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡 result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� @@ -576,6 +618,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} @@ -591,9 +634,9 @@ } } else { // 澶勭悊鐨勯兘鏄痽olo鏁版嵁 - log.Println("瑙勫垯涓殑sdkId涓猴細",rule.SdkId,"--鍖哄煙鏁版嵁闆嗗悎涓殑sdkId涓猴細",am.sdkId,"--瑙勫垯涓殑鍖哄煙Id涓猴細",rule.PolygonId,"--鍖哄煙鏁版嵁闆嗗悎涓殑鍖哄煙Id涓猴細",am.areaId,) if rule.SdkId == am.sdkId && rule.PolygonId == am.areaId { // 棣栧厛杩欐潯瑙勫垯寰楁槸杩欎釜绠楁硶鐨勮鍒欙紝鍏舵瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓� if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔� + log.Println("----------褰撳墠鏉′欢瑙勫垯锛�---------", rule) var args []Arg if rule.RuleWithPre == "&&" { args = am.filterData @@ -606,10 +649,13 @@ var formula string if rule.SdkArgAlias == "score" { formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� + log.Println("褰撳墠鐩镐技搴﹀皬鍏紡锛�", formula) } else if rule.SdkArgAlias == "proportion" { formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� + log.Println("褰撳墠鍗犳瘮灏忓叕寮忥細", formula) } else { formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮� + log.Println("褰撳墠灏哄灏忓叕寮忥細", formula) } expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡 result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� @@ -710,18 +756,21 @@ return LittleRuleResult{} } func timeRuleResult(rule *protomsg.Rule, am *AreaMap) LittleRuleResult { - if rule.PolygonId == am.areaId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓� - if rule.SdkArgAlias == "time" { // 鍒ゆ柇鏄惁绗﹀悎鏃堕棿瑙勫垯 + if rule.PolygonId == am.areaId && rule.SdkId == am.sdkId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓� + if rule.SdkArgAlias == "time_rule" { // 鍒ゆ柇鏄惁绗﹀悎鏃堕棿瑙勫垯 + log.Println("----------褰撳墠鏃堕棿瑙勫垯锛�---------", rule) // 鏍规嵁鏀惧�煎瓧娈甸噷瀛樼殑鏃堕棿瑙勫垯鐨刬d鍘诲彟涓�涓〃閲屾煡闇�瑕佹瘮瀵圭殑鏃堕棿娈碉紙姣斿褰撳墠鏃堕棿鏄懆涓夛紝搴旀牴鎹尯鍩焛d鏌ュ嚭鍏跺懆涓夌殑鍑犱釜甯冮槻鏃堕棿娈碉紝鏁扮粍锛� //fmt.Println("鏃堕棿瑙勫垯鐨勬祴璇�") now := time.Now() index := getIndexOfWeek(now.Weekday().String()) timeList := GetTimeById(rule.SdkArgValue, index) + log.Println("褰撳ぉ鐨勬椂闂存闆嗗悎锛�----------", timeList) //fmt.Println("浠庢暟鎹簱涓煡鍑虹殑鏃堕棿瑙勫垯锛�", timeList) // 鍒ゆ柇鍥剧墖鏁版嵁鐨勬椂闂存槸鍚︾鍚堝綋鍓嶈鍒� 鍦ㄤ竴涓嵆涓簍rue锛屽叏涓嶅湪涓篺alse - flag := "false" - for _, timeSlot := range timeList { - if rule.Operator == "satisfy" { // 婊¤冻鎵�閫夌殑鏃堕棿瑙勫垯 + + 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) // 寰楀埌鏁板鍏紡鐨勭粨鏋� @@ -735,21 +784,29 @@ break } } - if rule.Operator == "unsatisfy" { // 涓嶆弧瓒虫墍閫夌殑鏃堕棿瑙勫垯 - formula := timeSlot.Start + "<" + am.time + return 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 + "'" + log.Println("-----------------鏃堕棿瑙勫垯涓嶆弧瓒崇殑鍏紡start锛�", formula) expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡 result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� - formula1 := timeSlot.End + ">" + am.time + formula1 := "'" + timeSlot.End + "'" + " > " + "'" + am.time + "'" + log.Println("-----------------鏃堕棿瑙勫垯涓嶆弧瓒崇殑鍏紡end锛�", formula1) expression1, _ := govaluate.NewEvaluableExpression(formula1) // 寰楀埌鏁板鍏紡 result1, _ := expression1.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋� if result.(bool) && result1.(bool) { - flag = "true" + flag = "false" break } } + return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + flag, rule.Sort} } - return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + flag, rule.Sort} + } } return LittleRuleResult{} @@ -777,14 +834,15 @@ // 鍙栧嚭鏌愪釜鏃堕棿瑙勫垯鐨勭鍑犲ぉ鐨勮鍒欐闆嗗悎 func GetTimeById(id string, index int) []TimeRange { - var cameraTimeRule protomsg.CameraTimerule - var api dbapi.CameraApi - _, rules := api.FindAllTimeRules() - for _, rule := range rules { - if rule.Id == id { - cameraTimeRule = rule - } - } + //var cameraTimeRule protomsg.CameraTimerule + //var api dbapi.CameraApi + //_, rules := api.FindAllTimeRules() + //for _, rule := range rules { + // if rule.Id == id { + // cameraTimeRule = rule + // } + //} + _, cameraTimeRule := cache.GetTimeRuleById(id) var timeRangeList []day json.Unmarshal([]byte(cameraTimeRule.TimeRule), &timeRangeList) for _, timerange := range timeRangeList { -- Gitblit v1.8.0