From 27a60df1d67dd76eee1f0a47d28b28ee2d24f145 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期二, 02 七月 2019 18:41:14 +0800
Subject: [PATCH] face相关
---
ruleserver/ruleToformula.go | 120 +++++++++++++++++++++++++++++++++++-------------------------
1 files changed, 70 insertions(+), 50 deletions(-)
diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index 98fae4d..ed3e512 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"
)
@@ -139,7 +140,7 @@
RuleText string // 鏂囧瓧鐗堣鍒欑粍
}
type LittleRuleResult struct {
- SdkName string //璁板綍涓嬫缁撴灉鏄摢涓猻dk鐨勭粨鏋�
+ SdkName string // 璁板綍涓嬫缁撴灉鏄摢涓猻dk鐨勭粨鏋�
Result string // 宸插寘鍚簡鍓嶇疆杩炴帴绗�
Sort int32
}
@@ -159,19 +160,21 @@
// 鏍规嵁鎽勫儚鏈篿d鎷垮埌鎽勫儚鏈烘墍鏈夊尯鍩�
func GetPolygons(cameraId string) []protomsg.CameraPolygon {
- var api dbapi.CameraApi
- data := api.FindAllPolygons()
- //fmt.Println("鏌ュ埌鐨勬墍鏈夊尯鍩燂細", data)
- // 鏍规嵁id浠巑ap涓嬁鍒板尯鍩�
+ //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)
- }
- }
+ //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
}
@@ -179,7 +182,7 @@
// 鎶妔dk浠庢暟鎹抚涓婃彁鍙栫殑鎸夌収鍖哄煙鍒嗙被褰掔疆
func SdkDataFormat(cameraId string, arg *SdkData, cameraPolygons []protomsg.CameraPolygon) {
for _, polygon := range cameraPolygons {
- //log.Println("++++++鍦ㄨ繖鍎跨湅涓�涓嬪尯鍩熷晩", polygon)
+ //log.Println("++++++鍦ㄨ繖鍎跨湅涓�涓嬪尯鍩熷晩:", polygon.Polygon)
areaMap := AreaMap{cameraId: cameraId, areaId: polygon.Id, areaJson: polygon.Polygon, triggerLine: polygon.TriggerLine, directionLine: polygon.DirectionLine}
// 涓烘瘡涓憚鍍忔満鍖哄煙濉厖鏁版嵁
areaMap.CountAreaObjs(arg)
@@ -207,6 +210,7 @@
for _, taskRule := range taskRuleList {
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 {
@@ -230,6 +234,7 @@
}
}()
+ log.Println("+++++++++++瑙勫垯寮�濮嬭繍琛�+++++++++++++++++褰撳墠瑙勫垯--锛�",*groupRule)
resultSplice := []*LittleRuleResult{}
// 鍏堣繃瀹屾潯浠惰鍒�
for j := 0; j < len(groupRule.Rules); j++ {
@@ -244,15 +249,14 @@
}
}
// 杩囧畬鏉′欢鏁版嵁鍚庢妸绗﹀悎鏉′欢鐨勪汉鑴告暟鎹杩涚粨鏋滄爣绛鹃噷
- 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"] = putFaceToResult(groupRule.Rules[j], &areaMap)
}
}
}
- args.RuleResult["face"] = faces
// 鍐嶈繃鍏朵粬鏁版嵁 杩欐鐩存帴寰楀埌缁撴灉锛堢湡鎴栧亣锛� 杩囩洰鏍囨暟閲�
for j := 0; j < len(groupRule.Rules); j++ {
for _, sdkData := range args.Sdkdata {
@@ -314,6 +318,7 @@
for k, timeEle := range TimeEleList {
if strings.Contains(k, taskId) {
if timeEle.N != 0 { // 璺熻繖涓换鍔℃湁鍏崇殑瀹氭椂鍣ㄨ鍏ㄩ儴绛変簬0
+ log.Println("鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺��-------------涓嶅啢锛屼綘鏄瀹氭椂鍣ㄦ墦璐ョ殑锛�")
flag = false
}
}
@@ -324,14 +329,19 @@
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})
- log.Println("-------------------缁撴灉鏍囩",args.RuleResult["yolo"].([]Result))
+ 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(1)
+ }
return true
} else {
return false
@@ -342,14 +352,17 @@
}
}
-func putFaceToResult(rule *protomsg.Rule, am *AreaMap, faces []Arg) {
+func putFaceToResult(rule *protomsg.Rule, am *AreaMap) []Arg {
+ faces := []Arg{}
if rule.SdkId == am.sdkId {
if len(am.filterData) > 0 {
for _, data := range am.filterData {
+ log.Println("---------------------------------------------------------------------鏈夎繖涓猟ata",data)
faces = append(faces, data)
}
}
}
+ return faces
}
// 璁$畻鍖哄煙鍐呯殑鐩爣鏁伴噺浠ュ強灏嗙浉浼煎害銆佸崰姣斻�佸昂瀵哥瓑鎵撳寘
@@ -370,7 +383,7 @@
// }
for _, obj := range arg.Photo {
- log.Println("------------------鐪嬬湅sdkData鐨凱hoto鏁版嵁----------------", obj, "----椤轰究鐪嬬湅鍗犳瘮-----锛�", PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale))
+ 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++
@@ -385,6 +398,7 @@
a.time = time.Unix(time.Now().Unix(), 0).String()[11:16]
a.keepRight = arg.KeepRight
a.isStatic = arg.IsStatic
+ //log.Println("--------------------鐪嬬湅鍖哄煙鏁版嵁锛�",*a)
}
// 灏嗗瓧绗︿覆鏍煎紡鐨勫潗鏍囧簭鍒楀寲涓篜oint鏍煎紡
@@ -409,16 +423,17 @@
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
}
// 鑱斿姩浠诲姟鐨勫鐞�
@@ -509,12 +524,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" {
// 澶勭悊鐨勬槸浜鸿劯绠楁硶 濡傛灉杩欐潯瑙勫垯閰嶇疆鐨勬槸浜鸿劯绠楁硶锛岃繃婊ゅ畬鏉′欢涔嬪悗鐩存帴寰楀嚭缁撴灉锛屽洜涓鸿偗瀹氭病鏈夋暟閲忔潯浠讹紝鑷繁鎷兼帴
- log.Println("------------------------------------------杩樿兘杩涜繖鍎夸簡涓嶆垚锛燂紵锛�")
+
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 {
@@ -548,7 +563,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" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔�
@@ -578,6 +594,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}
@@ -608,10 +625,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) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
@@ -712,7 +732,7 @@
return LittleRuleResult{}
}
func timeRuleResult(rule *protomsg.Rule, am *AreaMap) LittleRuleResult {
- if rule.PolygonId == am.areaId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
+ if rule.PolygonId == am.areaId && rule.SdkId == am.sdkId{ // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
if rule.SdkArgAlias == "time_rule" { // 鍒ゆ柇鏄惁绗﹀悎鏃堕棿瑙勫垯
log.Println("----------褰撳墠鏃堕棿瑙勫垯锛�---------",rule)
// 鏍规嵁鏀惧�煎瓧娈甸噷瀛樼殑鏃堕棿瑙勫垯鐨刬d鍘诲彟涓�涓〃閲屾煡闇�瑕佹瘮瀵圭殑鏃堕棿娈碉紙姣斿褰撳墠鏃堕棿鏄懆涓夛紝搴旀牴鎹尯鍩焛d鏌ュ嚭鍏跺懆涓夌殑鍑犱釜甯冮槻鏃堕棿娈碉紝鏁扮粍锛�
@@ -720,7 +740,7 @@
now := time.Now()
index := getIndexOfWeek(now.Weekday().String())
timeList := GetTimeById(rule.SdkArgValue, index)
- log.Println("褰撳ぉ鐨勬椂闂磋鍒欙細----------",timeList)
+ log.Println("褰撳ぉ鐨勬椂闂存闆嗗悎锛�----------",timeList)
//fmt.Println("浠庢暟鎹簱涓煡鍑虹殑鏃堕棿瑙勫垯锛�", timeList)
// 鍒ゆ柇鍥剧墖鏁版嵁鐨勬椂闂存槸鍚︾鍚堝綋鍓嶈鍒� 鍦ㄤ竴涓嵆涓簍rue锛屽叏涓嶅湪涓篺alse
flag := "false"
@@ -781,15 +801,15 @@
// 鍙栧嚭鏌愪釜鏃堕棿瑙勫垯鐨勭鍑犲ぉ鐨勮鍒欐闆嗗悎
func GetTimeById(id string, index int) []TimeRange {
- var cameraTimeRule protomsg.CameraTimerule
- var api dbapi.CameraApi
- _, rules := api.FindAllTimeRules()
- log.Println("鏃堕棿闆嗗悎锛�----------------",rules)
- 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