From 3e2c40a20764f62969f807688457d15a09a413e7 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期四, 04 七月 2019 19:39:37 +0800
Subject: [PATCH] 在人脸提取中解析底库数据信息

---
 ruleserver/ruleToformula.go |   58 ++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 52 insertions(+), 6 deletions(-)

diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index a287b00..02d1dd0 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -4,7 +4,6 @@
 	"encoding/json"
 	"fmt"
 	"log"
-	"os"
 	"ruleprocess/cache"
 	"sort"
 	"strconv"
@@ -138,6 +137,7 @@
 	RuleGroupId string // 瑙勫垯缁刬d
 	AlarmLevel  int32  // 鎶ヨ绛夌骇
 	RuleText    string // 鏂囧瓧鐗堣鍒欑粍
+	Location    []Rect
 }
 type LittleRuleResult struct {
 	SdkName string // 璁板綍涓嬫缁撴灉鏄摢涓猻dk鐨勭粨鏋�
@@ -288,6 +288,19 @@
 	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 :]
+		}
+		log.Println("-------------------鐪嬬湅鎷旀瘺鍚庣殑琛ㄨ揪寮忥細",completeFormula)
+		expression, _ := govaluate.NewEvaluableExpression(completeFormula)
+		result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
+		return result.(bool)
+	}
 	if completeFormula != "" {
 		log.Println("缁撴灉鍏紡-----------锛�", completeFormula)
 		expression, _ := govaluate.NewEvaluableExpression(completeFormula)
@@ -303,6 +316,7 @@
 					timeEle.N = timeEle.InitN // 閲嶇疆瀹氭椂鍣�
 				}
 			}
+			log.Println("--------------------璧拌繖閲屼簡鍚�---------------")
 			return false
 		} else {
 			// 鏈�鍚庢垚鍔熸姤璀︽墠鎶婄鍚堟潯浠剁殑浜鸿劯鏁版嵁濉炶繘缁撴灉鏍囩閲�
@@ -346,7 +360,26 @@
 					}
 				}
 				if sdkName != "" {
-					args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText})
+					// 鎶婁粬浠殑浣嶇疆鏁版嵁涔熶紶涓嬪幓
+					locations := []Rect{}
+					for _, sdkData := range args.Sdkdata {
+						for _, areaMap := range sdkData.AreaMapList {
+							for j := 0; j < len(groupRule.Rules); j++ {
+								locations = append(locations, putYolosToResult(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
+					//}
+					args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText,locations})
 					log.Println("-------------------yolo缁撴灉鏍囩", args.RuleResult["yolo"].([]Result))
 				}
 				if args.RuleResult["face"] != nil {
@@ -373,6 +406,19 @@
 	}
 	//log.Println("-----------------------------------------------鍚浣犳槸绌虹殑锛�",faces)
 	return faces
+}
+
+func putYolosToResult(rule *protomsg.Rule, am *AreaMap) []Rect {
+	locations := []Rect{}
+	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 {
+				locations = append(locations, data.Location)
+			}
+		}
+	}
+	//log.Println("-----------------------------------------------鍚浣犳槸绌虹殑锛�",faces)
+	return locations
 }
 
 // 璁$畻鍖哄煙鍐呯殑鐩爣鏁伴噺浠ュ強灏嗙浉浼煎害銆佸崰姣斻�佸昂瀵哥瓑鎵撳寘
@@ -485,13 +531,13 @@
 		for _, va := range timeEle.RuleResults {
 			if va.CameraId == args.CameraId {
 				va.Result = strconv.FormatBool(isOk)
-				log.Println("杩欎釜鎽勫儚鏈�--",args.CameraId,"--琚祴浜堜簡result",va.Result)
+				log.Println("杩欎釜鎽勫儚鏈�--", args.CameraId, "--琚祴浜堜簡result", va.Result)
 			}
 		}
 		// 鍒ゆ柇缁撴灉鏁扮粍鏄惁瀹屾弧(鍗宠璧嬪�煎畬姣�)鍙緱鍑烘姤璀︾粨鏋�
 		var isPerfect = true
 		for _, va := range timeEle.RuleResults {
-			log.Println("---------------------鐬呯瀰褰撳墠鏁扮粍________________锛�",*va)
+			log.Println("---------------------鐬呯瀰褰撳墠鏁扮粍________________锛�", *va)
 			if va.Result == "" && va.RuleWithPre != "||" {
 				isPerfect = false
 			}
@@ -519,13 +565,13 @@
 						}
 					}
 					if sdkName != "" {
-						args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText})
+						args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText,[]Rect{}})
 						log.Println("-------------------yolo缁撴灉鏍囩", args.RuleResult["yolo"].([]Result))
 					}
 					if args.RuleResult["face"] != nil {
 						log.Println("-------------------face缁撴灉鏍囩", args.RuleResult["face"].([]Arg))
 					}
-					os.Exit(0)
+					//os.Exit(0)
 				}
 			}
 		} else {

--
Gitblit v1.8.0