From 7cb7884e4bd7f27d811474d4e95f29eebac845cd Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期二, 12 十一月 2019 17:56:54 +0800
Subject: [PATCH] 保存一下个体静止算法
---
algorithm/middleware/middleware.go | 20 +-
algorithm/intrusion/intrusion.go | 2
util/simpleCV.go | 2
ruleserver/ruleToformula.go | 35 ++--
algorithm/static/static.go | 250 ++++++++++++++++++++++++-------
ruleserver/readyDataForRule.go | 10 -
algorithm/personUnsual/personUnsual.go | 78 ++++-----
algorithm/faceCompare/faceCompare.go | 2
algorithm/static/static_test.go | 13 +
insertdata/insertDataToEs.go | 10
algorithm/face/face.go | 2
structure/algorithm.go | 17 ++
labelFilter/readyDataForLabel.go | 12
structure/rule.go | 5
ruleserver/timeTicker.go | 11 +
15 files changed, 319 insertions(+), 150 deletions(-)
diff --git a/algorithm/face/face.go b/algorithm/face/face.go
index 33e0d4b..2a46afc 100644
--- a/algorithm/face/face.go
+++ b/algorithm/face/face.go
@@ -8,7 +8,7 @@
"strconv"
)
// 浜鸿劯绠楁硶
-func Entrance(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult {
+func Entrance(rule *protomsg.Rule, am *structure.AreaMap,lable *structure.Others,args *structure.SdkDatas,message *protomsg.SdkMessage) structure.LittleRuleResult {
logger.Debug("---------璧颁簡浜鸿劯妫�娴嬬畻娉�",rule.Id,rule.SdkArgAlias,rule.Operator,rule.SdkArgValue,am.AreaId)
return filterRule(rule,am)
}
diff --git a/algorithm/faceCompare/faceCompare.go b/algorithm/faceCompare/faceCompare.go
index a2f22f4..35f3596 100644
--- a/algorithm/faceCompare/faceCompare.go
+++ b/algorithm/faceCompare/faceCompare.go
@@ -8,7 +8,7 @@
"strconv"
)
// 浜鸿劯绠楁硶
-func Entrance(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult {
+func Entrance(rule *protomsg.Rule, am *structure.AreaMap,lable *structure.Others,args *structure.SdkDatas,message *protomsg.SdkMessage) structure.LittleRuleResult {
logger.Debug("---------璧颁簡浜鸿劯姣斿绠楁硶",rule.Id,rule.SdkArgAlias,rule.Operator,rule.SdkArgValue,am.AreaId)
return filterRule1(rule,am)
}
diff --git a/algorithm/intrusion/intrusion.go b/algorithm/intrusion/intrusion.go
index 714e899..9a50098 100644
--- a/algorithm/intrusion/intrusion.go
+++ b/algorithm/intrusion/intrusion.go
@@ -9,7 +9,7 @@
)
//鍏ヤ镜绠楁硶
-func Entrance(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult {
+func Entrance(rule *protomsg.Rule, am *structure.AreaMap,lable *structure.Others,args *structure.SdkDatas,message *protomsg.SdkMessage) structure.LittleRuleResult {
if rule.PolygonId == am.AreaId { // 棣栧厛杩欐潯瑙勫垯寰楁槸杩欎釜绠楁硶鐨勮鍒欙紝鍏舵瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
return filterRule(rule, am)
} else {
diff --git a/algorithm/middleware/middleware.go b/algorithm/middleware/middleware.go
index 7eb9b21..57b1c07 100644
--- a/algorithm/middleware/middleware.go
+++ b/algorithm/middleware/middleware.go
@@ -14,7 +14,7 @@
"time"
)
-func Entrance (args *structure.SdkDatas,groupRule protomsg.GroupRule) (bool,string,string){
+func Entrance (args *structure.SdkDatas,groupRule protomsg.GroupRule,lable *structure.Others,message *protomsg.SdkMessage) (bool,string,string){
resultSplice := []*structure.LittleRuleResult{}
sdkNames := ""
polygonId := ""
@@ -33,7 +33,7 @@
if ipcId == sdkData.IpcId {
//logger.Info("褰撳墠璧扮殑瑙勫垯鏄�--锛�", sdkName, "---","")
for _, areaMap := range sdkData.AreaMapList {
- ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap)
+ ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap,lable,args,message)
if ruleResult.Result != "" {
logger.Info("鏉′欢瑙勫垯缁撴灉锛�", ruleResult.Result)
// 濡傛灉缁撴灉涓虹湡锛屾妸杩欐潯瑙勫垯涓殑鍖哄煙缃负鏈夋晥
@@ -69,7 +69,7 @@
if ipcId == sdkData.IpcId {
//logger.Info("褰撳墠璧扮殑瑙勫垯鏄�--锛�", sdkName, "---","")
for _, areaMap := range sdkData.AreaMapList {
- ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap)
+ ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap,lable,args,message)
if ruleResult.Result != "" {
logger.Info("浜鸿劯姣斿瑙勫垯缁撴灉锛�", ruleResult.Result)
// 濡傛灉缁撴灉涓虹湡锛屾妸杩欐潯瑙勫垯涓殑鍖哄煙缃负鏈夋晥
@@ -92,7 +92,7 @@
}
// 涓綋闈欐
for j := 0; j < len(groupRule.Rules); j++ {
- if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && groupRule.Rules[j].SdkArgAlias != "time_rule"{
+ if groupRule.Rules[j].SdkId == "涓綋闈欐" && groupRule.Rules[j].SdkArgAlias != "time_rule"{
for _, sdkData := range args.Sdkdata {
// 鏍规嵁瑙勫垯鐨剆dkId鏌ュ嚭鍏跺搴旂殑ipcId锛岀敤ipcId鍘绘壘璇ユ瘮瀵圭殑鏁版嵁
sdk, err := cache.GetSdkById(groupRule.Rules[j].SdkId)
@@ -105,9 +105,9 @@
if ipcId == sdkData.IpcId {
//logger.Info("褰撳墠璧扮殑瑙勫垯鏄�--锛�", sdkName, "---","")
for _, areaMap := range sdkData.AreaMapList {
- ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap)
+ ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap,lable,args,message)
if ruleResult.Result != "" {
- logger.Info("浜鸿劯姣斿瑙勫垯缁撴灉锛�", ruleResult.Result)
+ logger.Info("涓綋闈欐缁撴灉锛�", ruleResult.Result)
// 濡傛灉缁撴灉涓虹湡锛屾妸杩欐潯瑙勫垯涓殑鍖哄煙缃负鏈夋晥
if strings.Contains(ruleResult.Result, "true") {
areaMap.IsEffective = true
@@ -139,7 +139,7 @@
sdkName := sdk.SdkName
if ipcId == sdkData.IpcId {
for _, areaMap := range sdkData.AreaMapList {
- ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap)
+ ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap,lable,args,message)
if ruleResult.Result != "" {
if strings.Contains(ruleResult.Result, "true") {
areaMap.IsEffective = true
@@ -277,7 +277,7 @@
return structure.LittleRuleResult{}
}
-func CallSo(sdkId string,rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult{
+func CallSo(sdkId string,rule *protomsg.Rule, am *structure.AreaMap,lable *structure.Others,args *structure.SdkDatas,message *protomsg.SdkMessage) structure.LittleRuleResult{
// 鏍规嵁sdkId鏌ュ嚭鍏跺搴旂殑sdk鐨剆oName锛岃皟鐢ㄧ浉搴攕o鐨凟ntrance鏂规硶
var soName = ""
if sdkId == "812b674b-2375-4589-919a-5c1c3278a97e" {
@@ -288,6 +288,8 @@
soName = "personUnsual.so"
} else if sdkId == "812b674b-2375-4589-919a-5c1c3278a972" {
soName = "faceCompare.so"
+ } else if sdkId == "涓綋闈欐" {
+ soName = "static.so"
}
//soInfo,errr := cache.GetSoInfoById(sdkId)
//if errr != nil {
@@ -302,7 +304,7 @@
if err1 != nil {
panic("娌℃湁鎵惧埌鍏ュ彛鍑芥暟")
}
- ruleResult := f.(func(rule *protomsg.Rule, am *structure.AreaMap)structure.LittleRuleResult)(rule,am)
+ ruleResult := f.(func(rule *protomsg.Rule, am *structure.AreaMap,lable *structure.Others, args *structure.SdkDatas,message *protomsg.SdkMessage)structure.LittleRuleResult)(rule,am,lable,args,message)
return ruleResult
}
diff --git a/algorithm/personUnsual/personUnsual.go b/algorithm/personUnsual/personUnsual.go
index d110d6f..dc2f0bc 100644
--- a/algorithm/personUnsual/personUnsual.go
+++ b/algorithm/personUnsual/personUnsual.go
@@ -9,10 +9,10 @@
)
// 浜哄憳寮傚父绠楁硶
-func Entrance(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult {
+func Entrance(rule *protomsg.Rule, am *structure.AreaMap,lable *structure.Others,args *structure.SdkDatas,message *protomsg.SdkMessage) structure.LittleRuleResult {
if rule.PolygonId == am.AreaId { // 棣栧厛杩欐潯瑙勫垯寰楁槸杩欎釜绠楁硶鐨勮鍒欙紝鍏舵瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
logger.Debug("---------璧颁簡浜哄憳寮傚父绠楁硶",rule.Id,rule.SdkArgAlias,rule.Operator,rule.SdkArgValue,am.AreaId)
- if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔�
+ if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" || rule.SdkArgAlias == "" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔�
return filterRule(rule, am)
} else if rule.SdkArgAlias == "objCount" {
return transferParameters(rule, am)
@@ -27,48 +27,46 @@
// 杩囨护瑙勫垯鍏堢瓫閫夊嚭绗﹀悎鏉′欢鐨勭洰鏍囨暟閲�
func filterRule(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult {
// 澶勭悊鐨勯兘鏄痽olo鏁版嵁
- if rule.PolygonId == am.AreaId { // 棣栧厛杩欐潯瑙勫垯寰楁槸杩欎釜绠楁硶鐨勮鍒欙紝鍏舵瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
- if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔�
- var args []*structure.Arg
- if rule.RuleWithPre == "&&" {
- args = am.FilterData
+ if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔�
+ var args []*structure.Arg
+ if rule.RuleWithPre == "&&" {
+ args = am.FilterData
+ } else {
+ args = am.Args
+ }
+ // 鍏堟竻绌鸿繃婊ゅ悗鐨勬暟鎹紝鍐嶅線閲屽鏈杩囨护鍚庣殑鏁版嵁
+ am.FilterData = am.FilterData[0:0]
+ //logger.Debug("鐪嬬湅args锛氾細锛氾細锛�", args)
+ for _, arg := range args {
+ var formula string
+ if rule.SdkArgAlias == "score" {
+ formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
+ logger.Info("褰撳墠鐩镐技搴﹀皬鍏紡锛�", formula)
+ } else if rule.SdkArgAlias == "proportion" {
+ formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
+ logger.Info("褰撳墠鍗犳瘮灏忓叕寮忥細", formula)
} else {
- args = am.Args
+ formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
+ logger.Info("褰撳墠灏哄灏忓叕寮忥細", formula)
}
- // 鍏堟竻绌鸿繃婊ゅ悗鐨勬暟鎹紝鍐嶅線閲屽鏈杩囨护鍚庣殑鏁版嵁
- am.FilterData = am.FilterData[0:0]
- //logger.Debug("鐪嬬湅args锛氾細锛氾細锛�", args)
- for _, arg := range args {
- var formula string
- if rule.SdkArgAlias == "score" {
- formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
- logger.Info("褰撳墠鐩镐技搴﹀皬鍏紡锛�", formula)
- } else if rule.SdkArgAlias == "proportion" {
- formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
- logger.Info("褰撳墠鍗犳瘮灏忓叕寮忥細", formula)
- } else {
- formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
- logger.Info("褰撳墠灏哄灏忓叕寮忥細", formula)
- }
- expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
- result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
- if result.(bool) {
- am.FilterData = append(am.FilterData, arg) // 寰楀埌绗﹀悎鏉′欢鐨勮繃婊ゆ暟鎹�
- }
+ expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
+ result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
+ if result.(bool) {
+ am.FilterData = append(am.FilterData, arg) // 寰楀埌绗﹀悎鏉′欢鐨勮繃婊ゆ暟鎹�
}
- am.TargetNum = len(am.FilterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁
- if am.TargetNum > 0 {
- return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
- } else {
- return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
- }
+ }
+ am.TargetNum = len(am.FilterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁
+ if am.TargetNum > 0 {
+ return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
+ } else {
+ return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
+ }
- } else if rule.SdkArgAlias == "" {
- if am.TargetNum > 0 {
- return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
- } else {
- return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
- }
+ } else if rule.SdkArgAlias == "" {
+ if am.TargetNum > 0 {
+ return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
+ } else {
+ return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
}
}
return structure.LittleRuleResult{}
diff --git a/algorithm/static/static.go b/algorithm/static/static.go
index 6caff13..b548cd9 100644
--- a/algorithm/static/static.go
+++ b/algorithm/static/static.go
@@ -7,78 +7,73 @@
"ruleprocess/ruleserver"
"ruleprocess/structure"
"strconv"
+ "sync"
)
-//涓綋闈欐绠楁硶
-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 {
- var flag bool = true
- for k, _ := range ruleserver.TimeEleList {
- if k == rule.Id+""+strconv.Itoa(int(obj.Id)) {
- flag = false // 鏈夊氨缃负false
- logger.Info("鏈夎繖涓畾鏃跺櫒锛屼笉鍐嶅垱寤轰簡锛�")
- }
+func Entrance(rule *protomsg.Rule, am *structure.AreaMap,lable *structure.Others,args *structure.SdkDatas,message *protomsg.SdkMessage) structure.LittleRuleResult {
+ if rule.PolygonId == am.AreaId { // 棣栧厛杩欐潯瑙勫垯寰楁槸杩欎釜绠楁硶鐨勮鍒欙紝鍏舵瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
+ logger.Debug("---------璧颁簡浜哄憳寮傚父绠楁硶", rule.Id, rule.SdkArgAlias, rule.Operator, rule.SdkArgValue, am.AreaId)
+ if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" || rule.SdkArgAlias == "" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔�
+ return filterRule(rule, am)
+ } else if rule.SdkArgAlias == "duration" {
+ return CompareAndSave(rule,am,lable,args,message)
+ } else {
+ return structure.LittleRuleResult{}
}
- 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涓洪敭
- }
+ } else {
+ return structure.LittleRuleResult{}
}
- return structure.LittleRuleResult{}
}
// 杩囨护瑙勫垯鍏堢瓫閫夊嚭绗﹀悎鏉′欢鐨勭洰鏍囨暟閲�
func filterRule(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult {
// 澶勭悊鐨勯兘鏄痽olo鏁版嵁
- var args []*structure.Arg
- if rule.RuleWithPre == "&&" {
- args = am.FilterData
- } else {
- args = am.Args
- }
- // 鍏堟竻绌鸿繃婊ゅ悗鐨勬暟鎹紝鍐嶅線閲屽鏈杩囨护鍚庣殑鏁版嵁
- am.FilterData = am.FilterData[0:0]
- //logger.Debug("鐪嬬湅args锛氾細锛氾細锛�", args)
- for _, arg := range args {
- var formula string
- if rule.SdkArgAlias == "score" {
- formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
- logger.Info("褰撳墠鐩镐技搴﹀皬鍏紡锛�", formula)
- } else if rule.SdkArgAlias == "proportion" {
- formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
- logger.Info("褰撳墠鍗犳瘮灏忓叕寮忥細", formula)
+ if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔�
+ var args []*structure.Arg
+ if rule.RuleWithPre == "&&" {
+ args = am.FilterData
} else {
- formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
- logger.Info("褰撳墠灏哄灏忓叕寮忥細", formula)
+ args = am.Args
}
- expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
- result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
- if result.(bool) {
- am.FilterData = append(am.FilterData, arg) // 寰楀埌绗﹀悎鏉′欢鐨勮繃婊ゆ暟鎹�
+ // 鍏堟竻绌鸿繃婊ゅ悗鐨勬暟鎹紝鍐嶅線閲屽鏈杩囨护鍚庣殑鏁版嵁
+ am.FilterData = am.FilterData[0:0]
+ //logger.Debug("鐪嬬湅args锛氾細锛氾細锛�", args)
+ for _, arg := range args {
+ var formula string
+ if rule.SdkArgAlias == "score" {
+ formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
+ logger.Info("褰撳墠鐩镐技搴﹀皬鍏紡锛�", formula)
+ } else if rule.SdkArgAlias == "proportion" {
+ formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
+ logger.Info("褰撳墠鍗犳瘮灏忓叕寮忥細", formula)
+ } else {
+ formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
+ logger.Info("褰撳墠灏哄灏忓叕寮忥細", formula)
+ }
+ expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
+ result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
+ if result.(bool) {
+ am.FilterData = append(am.FilterData, arg) // 寰楀埌绗﹀悎鏉′欢鐨勮繃婊ゆ暟鎹�
+ }
+ }
+ am.TargetNum = len(am.FilterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁
+ if am.TargetNum > 0 {
+ return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
+ } else {
+ return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
+ }
+
+ } else if rule.SdkArgAlias == "" {
+ if am.TargetNum > 0 {
+ return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
+ } else {
+ return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
}
}
- am.TargetNum = len(am.FilterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁
- if am.TargetNum > 0 {
- return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
- } else {
- return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
- }
+ return structure.LittleRuleResult{}
}
-// 鍒ゆ柇涓や釜鐭╁舰鐨勯噸鍚堝害锛屾妸闈㈢Н鏇村ぇ鐨勫仛鍒嗘瘝
+// 鍒ゆ柇涓や釜鐭╁舰鐨勯噸鍚堝害锛屾妸闈㈢Н鏇村ぇ鐨勫仛鍒嗘瘝锛屽嵆鍙栧皬鍊�
func PgsInterPercent(pgpts []structure.Point, box structure.Rect, widthScale float64, heightScale float64) (percent float64) {
areapts, areaBox := ruleserver.GetLocation(box, 10)
@@ -98,3 +93,144 @@
}
return (perInterPg * 100)
}
+// 鍒ゆ柇涓�涓尯鍩熷唴鏈夋病鏈夐潤姝㈢殑鐩爣
+func CompareAndSave(rule *protomsg.Rule, am *structure.AreaMap,lable *structure.Others,args *structure.SdkDatas,message *protomsg.SdkMessage) structure.LittleRuleResult {
+ initN := 60
+ if rule.SdkId == "涓綋闈欐" && rule.SdkArgAlias == "duration" {
+ if init,err := strconv.Atoi(rule.SdkArgValue); err != nil {
+ logger.Debug("涓綋闈欐绠楁硶璇诲彇鎸佺画鏃堕棿澶辫触",err)
+ } else {
+ initN = init
+ }
+ }
+ if len(structure.StaticMap[am.AreaId].Targets) == 0 { // 鍗崇涓�甯ф暟鎹�(涔熶笉涓�瀹�)锛岃繕娌℃湁缂撳瓨
+ objs := []*structure.Obj{}
+ for _, tar := range am.FilterData {
+ obj := &structure.Obj{Id: tar.Id, Location: tar.Location, N: initN,InitN:initN}
+ objs = append(objs, obj)
+ }
+ structure.StaticMap[am.AreaId] = &structure.CameraArea{objs}
+ return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
+ } else {
+ flag := "false"
+ for _, tar := range structure.StaticMap[am.AreaId].Targets {
+ singleResult := SingleStatic(tar,am,lable,90)
+ if singleResult {
+ flag = "true"
+ }
+ }
+ // 鏇存柊鏁版嵁,鎶婃柊鏉ョ殑鏁版嵁鍐欏叆缂撳瓨
+ objs := []*structure.Obj{}
+ for _, tar := range am.FilterData {
+ flag1 := false
+ for _, OBJ := range structure.StaticMap[am.AreaId].Targets {
+ if tar.Id == OBJ.Id {
+ flag1 = true
+ }
+ }
+ if !flag1 { // 闆嗗悎涓病鏈夌殑鎵嶆彃鍏�
+ obj := &structure.Obj{Id: tar.Id, Location: tar.Location, N: initN,InitN:initN,AlarmFlag: false, BufferFlag: 10, CacheSdkData: structure.ResultMsg{message, nil}}
+ objs = append(objs, obj)
+ }
+ }
+ structure.StaticMap[am.AreaId] = &structure.CameraArea{objs}
+ return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + flag, rule.Sort}
+ }
+}
+
+// rec鍙樹负[t]point 閫嗘椂閽堜竴鍦堢殑鍧愭爣
+func Rect2Point(rect structure.Rect) []structure.Point {
+ points := []structure.Point{}
+ point1 := structure.Point{rect.X, rect.Y}
+ points = append(points, point1)
+ point2 := structure.Point{rect.X, rect.Y + rect.Height}
+ points = append(points, point2)
+ point3 := structure.Point{rect.X + rect.Width, rect.Y + rect.Height}
+ points = append(points, point3)
+ point4 := structure.Point{rect.X + rect.Width, rect.Y}
+ points = append(points, point4)
+ return points
+}
+
+// 鍒ゆ柇涓�涓洰鏍囨槸鍚﹂潤姝簡鎸囧畾鏃堕棿
+func SingleStatic(person *structure.Obj, am *structure.AreaMap,lable *structure.Others, argValue float64) bool{
+ flag := false
+ for _, obj := range am.FilterData {
+ if person.Id == obj.Id {
+ coincidenceDegree := PgsInterPercent(Rect2Point(person.Location), obj.Location, 1, 1)
+ if coincidenceDegree >= argValue {
+ flag = true
+ }
+ }
+ }
+ if flag { // 鏈変竴涓璞′繚鎸侀潤姝紙id鐩哥瓑骞朵笖閲嶅悎搴﹂珮浜庨槇鍊硷級
+ flagTime := TimerAlarm(lable,person,flag,am.AreaId)
+ if flagTime == "10" || flagTime == "11" {
+ return flag
+ } else {
+ return false
+ }
+ } else {
+ TimerAlarm(lable,person,flag,am.AreaId)
+ return flag
+ }
+}
+var rw sync.RWMutex
+// 鍒ゆ柇鏄惁绗﹀悎瀹氭椂鍣ㄦ潯浠�
+func TimerAlarm(oth *structure.Others,person *structure.Obj, result bool,areaId string) (string) {
+ var flagTime string //
+
+ rw.Lock()
+
+ if result { // 缁撴灉涓虹湡
+ for k, tar := range structure.StaticMap[areaId].Targets {
+ if tar.Id == person.Id {
+ if tar.N == 0 && tar.AlarmFlag {
+ logger.Debug("-------------------------绗﹀悎鎸佺画鏃堕棿瑙勫垯浣嗗苟涓嶆槸棣栨锛屼笉鎶ヨ")
+ flagTime = "11"
+ oth.TimeLabel = flagTime
+ }
+ if tar.N == 0 && !tar.AlarmFlag { // 杩欑粍瑙勫垯鐨勫畾鏃跺櫒瑕佸叏閮ㄧ瓑浜�0 鏆備笖璁や负涓�缁勮鍒欏彧鏈変竴涓畾鏃跺櫒
+ logger.Debug("鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺��-------------棣栨绗﹀悎鎸佺画鏃堕棿瑙勫垯骞舵姤璀�")
+ flagTime = "10"
+ tar.AlarmFlag = true
+ oth.CacheData = []structure.ResultMsg{}
+ oth.CacheData = append(oth.CacheData,tar.CacheSdkData)
+ oth.TimeLabel = flagTime
+ }
+ if tar.N != 0 {
+ flagTime = "00"
+ // 鏈夊畾鏃跺櫒浣嗕笉涓�0鎶婂凡鎵撶殑鏍囩鍒犻櫎
+ // args.RuleResult = nil
+ logger.Debug("------------------------缁撴灉涓虹湡浣嗚鏁板櫒涓嶅埌0锛屼笉鎶ヨ,姝ゆ椂鐨勮鏁板櫒", k, "鐨勫�间负锛�", tar.N)
+ }
+ }
+ }
+ } else { // 缁撴灉涓哄亣 骞叉帀杩欎釜璁℃暟鍣�
+ for index, tar := range structure.StaticMap[areaId].Targets {
+ if tar.Id == person.Id {
+ if tar.AlarmFlag {
+ if tar.BufferFlag == 0 {
+ logger.Debug("------------------------------鏉�姝昏鏁板櫒锛屾姤璀︽甯х姸鎬佹敼鍙樼殑鏁版嵁锛屾鏃剁殑璁℃暟鍣ㄧ殑鍊间负", tar.N)
+ flagTime = "12"
+ oth.TimeLabel = flagTime
+ structure.StaticMap[areaId].Targets = append(structure.StaticMap[areaId].Targets[:index],structure.StaticMap[areaId].Targets[index+1:]...)
+ } else {
+ if tar.BufferFlag > 0 {
+ logger.Debug("缂撳啿鍖哄噺鍑�")
+ tar.BufferFlag--
+ }
+ }
+ } else {
+ logger.Debug("-----------缁撴灉涓哄亣涓斾笉鍒�0锛屾潃姝诲畾鏃跺櫒")
+ structure.StaticMap[areaId].Targets = append(structure.StaticMap[areaId].Targets[:index],structure.StaticMap[areaId].Targets[index+1:]...)
+ }
+ }
+ }
+ }
+
+ rw.Unlock()
+ return flagTime
+}
+
+
diff --git a/algorithm/static/static_test.go b/algorithm/static/static_test.go
new file mode 100644
index 0000000..e2134bb
--- /dev/null
+++ b/algorithm/static/static_test.go
@@ -0,0 +1,13 @@
+package main
+
+import (
+ "fmt"
+ "ruleprocess/structure"
+ "testing"
+)
+
+func TestRect2Point(t *testing.T) {
+ rect := structure.Rect{100,100,200,200}
+ points := Rect2Point(rect)
+ fmt.Println(points)
+}
\ No newline at end of file
diff --git a/insertdata/insertDataToEs.go b/insertdata/insertDataToEs.go
index fc97d18..88f0aae 100644
--- a/insertdata/insertDataToEs.go
+++ b/insertdata/insertDataToEs.go
@@ -146,7 +146,7 @@
// 寰�es涓彃鍏ヤ汉鑴告暟鎹�
func InsertFace(msg structure.ResultMsg, linkId string) {
- if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]structure.FaceResult)) > 0 {
+ if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]structure.TargetResult)) > 0 {
logger.Info("寰�ES鎻掍汉鑴告暟鎹�")
faces := []*FaceAndRules{}
faces = PutFace(faces, msg)
@@ -178,7 +178,7 @@
// 涓婁紶澶у浘
if imgMaxUrl == "" {
bigPhotoUrl := make(map[string]interface{})
- bigPhotoUrl, err = util.DrawPolygonOnImageForFace(msg.Cid, i, msg.RuleResult["face"].([]structure.FaceResult), weedfsUrl)
+ bigPhotoUrl, err = util.DrawPolygonOnImageForFace(msg.Cid, i, msg.RuleResult["face"].([]structure.TargetResult), weedfsUrl)
logger.Debug("========澶у浘璺緞锛�", bigPhotoUrl)
imgMaxUrl = bigPhotoUrl["fileUrl"].(string)
picTime = i.Timestamp
@@ -259,8 +259,8 @@
// 褰掔疆浜鸿劯
func PutFace(faces []*FaceAndRules, msg structure.ResultMsg) []*FaceAndRules {
- if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]structure.FaceResult)) > 0 {
- for _, faceResult := range msg.RuleResult["face"].([]structure.FaceResult) {
+ if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]structure.TargetResult)) > 0 {
+ for _, faceResult := range msg.RuleResult["face"].([]structure.TargetResult) {
faces = hebingFace(faces, faceResult)
}
return faces
@@ -268,7 +268,7 @@
return nil
}
}
-func hebingFace(faces []*FaceAndRules, faceResult structure.FaceResult) []*FaceAndRules {
+func hebingFace(faces []*FaceAndRules, faceResult structure.TargetResult) []*FaceAndRules {
for _, arg := range faceResult.Args {
// 鎷垮埌姣忎竴寮犱汉鑴�
//logger.Info("褰掔疆浜鸿劯鏃剁浉浼艰�呯殑鏁伴噺锛�", len(arg.Liker))
diff --git a/labelFilter/readyDataForLabel.go b/labelFilter/readyDataForLabel.go
index 5c792e1..8aa4406 100644
--- a/labelFilter/readyDataForLabel.go
+++ b/labelFilter/readyDataForLabel.go
@@ -13,14 +13,14 @@
CameraAddr string
TaskId string
Time string
- Persons []structure.FaceResult
+ Persons []structure.TargetResult
DefenceLevel []int32
}
// 鎶婃暟鎹閰嶅埌label
func (label *Label)DataFormatToLabel(result structure.ResultMsg) {
- logger.Debug("face缁撴灉锛�",result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]structure.FaceResult)) > 0)
+ logger.Debug("face缁撴灉锛�",result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]structure.TargetResult)) > 0)
logger.Debug("yolo缁撴灉锛�",result.RuleResult["yolo"] != nil && len(result.RuleResult["yolo"].([]structure.Result)) > 0)
- if (result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]structure.FaceResult)) > 0) || (result.RuleResult["yolo"] != nil && len(result.RuleResult["yolo"].([]structure.Result)) > 0) { // 寰楁湁浜鸿劯鎴栬�厃olo瑙勫垯鎵嶅彲浠�
+ if (result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]structure.TargetResult)) > 0) || (result.RuleResult["yolo"] != nil && len(result.RuleResult["yolo"].([]structure.Result)) > 0) { // 寰楁湁浜鸿劯鎴栬�厃olo瑙勫垯鎵嶅彲浠�
// 鍏堝垽鏂竴涓嬫暟鎹甫鐨勮鍒欐爣绛炬槸鍚︽湁鎶ヨ鐨勫彲浠ユ帹閫佺殑
flag := false
@@ -30,7 +30,7 @@
flag = true
}
}
- if flag || (result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]structure.FaceResult)) > 0){
+ if flag || (result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]structure.TargetResult)) > 0){
logger.Info("---------------鏍囩杩囨护鍣ㄨ祴鍊�")
label.CameraId = result.Cid
camera, err := cache.GetCameraById(result.Cid)
@@ -41,8 +41,8 @@
label.CameraAddr = camera.Addr
label.TaskId = result.Tasklab.Taskid
label.Time = time.Now().Format("2006-01-02 15:04:05")
- if result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]structure.FaceResult)) > 0 {
- for _,faceGroup := range result.RuleResult["face"].([]structure.FaceResult) {
+ if result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]structure.TargetResult)) > 0 {
+ for _,faceGroup := range result.RuleResult["face"].([]structure.TargetResult) {
label.Persons = append(label.Persons,faceGroup)
label.DefenceLevel = append(label.DefenceLevel,faceGroup.AlarmLevel)
}
diff --git a/ruleserver/readyDataForRule.go b/ruleserver/readyDataForRule.go
index 91b36da..5f603fb 100644
--- a/ruleserver/readyDataForRule.go
+++ b/ruleserver/readyDataForRule.go
@@ -236,14 +236,6 @@
//logger.Info("--------------鐪嬬湅compareFlag鐨勫�煎拰tableId鍜宎reaMap.args鐨勯暱搴︼細",compareFlag,tableIds,len(areaMap.args))
for _, arg := range areaMap.Args {
arg.Liker = arg.Liker[0:0]
- //logger.Info("娓呯┖涔嬪悗鐪嬬湅涔嬪墠鎵撶殑浜鸿劯鏍囩鍙樹簡娌★細")
- //if args.RuleResult["face"] != nil && len(args.RuleResult["face"].([]FaceResult)) > 0 {
- // for _, faceResult := range args.RuleResult["face"].([]FaceResult) {
- // for _,arg := range faceResult.Args {
- // logger.Info("浜哄憳鍒嗗�兼槸锛�",arg.Score,"liker鐨勬暟閲忎负",arg.Liker)
- // }
- // }
- //}
if compareFlag == 1 {
fillLiker(nil, threshold, arg)
}
@@ -281,7 +273,7 @@
if obj.Score >= threshold && float64(obj.Rects.Width*obj.Rects.Height) >= size && PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale) >= intersectionper {
// 杩欐瑕佸榻愯〃杈惧紡閲屾墍闇�瑕佺殑鎵�鏈夊弬鏁�
a.TargetNum++
- arg1 := structure.Arg{obj.Id,obj.Score, PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), obj.IsYolo, obj.Rects, obj.Feature, obj.ThftRes, []*structure.BaseInfo{}}
+ arg1 := structure.Arg{obj.Id,obj.Score, PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), obj.IsYolo, obj.Rects, obj.Feature, obj.ThftRes, []*structure.BaseInfo{},nil}
//logger.Println("鏀捐繘鍘荤殑arg锛�-------", arg1)
a.Args = append(a.Args, &arg1)
a.FilterData = append(a.FilterData, &arg1)
diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index d5433ae..7838d53 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -36,7 +36,8 @@
// 寰楀埌灞炰簬璇ユ憚鍍忔満鐨勮嫢骞茬粍浠诲姟鐨勫畬鏁磋鍒欙紙璺熸瘡涓�鏉″畬鏁磋鍒欐瘮杈冧箣鍚庡緱鍑烘湰寮犲浘鍍忓浜庢煇涓鍒欐槸鍚︽姤璀︾殑缁撴灉銆傛斁杩沵ap锛屾瘮濡傛湰甯у浘鍍忕殑id锛屾墍纰版挒鎴愬姛鐨勮鍒檌d锛�
args.RuleResult = make(map[string]interface{})
args.RuleResult["yolo"] = []structure.Result{}
- args.RuleResult["face"] = []structure.FaceResult{}
+ args.RuleResult["face"] = []structure.TargetResult{}
+ args.RuleResult["target"] = []structure.TargetResult{}
//logger.Warn("浼犺繘鍘讳箣鍓嶆槸浠�涔堝痉琛岋細",args.RuleResult["yolo"])
if taskGroup != nil && len(taskGroup.GroupRules) > 0 {
// 鍏堣繃鐙珛锛屽啀杩囪仈鍔�
@@ -76,7 +77,7 @@
}
}
-func CallMiddleware(args *structure.SdkDatas,rule protomsg.GroupRule) (bool, string, string){
+func CallMiddleware(args *structure.SdkDatas,rule protomsg.GroupRule,lable *structure.Others,message *protomsg.SdkMessage) (bool, string, string){
p,err := plugin.Open("./algorithm/middleware.so")
if err != nil {
panic(err)
@@ -85,7 +86,7 @@
if err1 != nil {
panic("娌℃湁鎵惧埌涓棿浠跺叆鍙e嚱鏁�")
}
- a,b,c := f.(func(args *structure.SdkDatas,rule protomsg.GroupRule)(bool, string, string))(args,rule)
+ a,b,c := f.(func(args *structure.SdkDatas,rule protomsg.GroupRule,label *structure.Others,message *protomsg.SdkMessage)(bool, string, string))(args,rule,lable,message)
return a,b,c
}
@@ -102,7 +103,7 @@
sdkNames := ""
polygonId := ""
// 鎶婁竴甯ф暟鎹拰涓�缁勮鍒欏彂缁欑畻娉曢儴鍒嗭紝寰楀嚭鍒ゆ柇缁撴灉
- result,sdkNames,polygonId = CallMiddleware(args,*groupRule)
+ result,sdkNames,polygonId = CallMiddleware(args,*groupRule,&label,message)
if result {
// 鏈�鍚庤繃鎸佺画鏃堕棿绛夋椂闂寸淮搴︾殑鏉′欢 鎶婃椂闂磋鍒欎綅缃皟鏁村埌杩欎釜浣嶇疆鏄负浜嗙紦瀛樻暟鎹�
@@ -177,7 +178,7 @@
//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})
+ args.RuleResult["face"] = append(args.RuleResult["face"].([]structure.TargetResult), structure.TargetResult{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)
}
@@ -192,9 +193,9 @@
}
}
if k == "face" {
- tempMap[k] = []structure.FaceResult{}
- for _, res := range result.([]structure.FaceResult) {
- tempMap[k] = append(tempMap[k].([]structure.FaceResult), res)
+ tempMap[k] = []structure.TargetResult{}
+ for _, res := range result.([]structure.TargetResult) {
+ tempMap[k] = append(tempMap[k].([]structure.TargetResult), res)
}
}
}
@@ -305,9 +306,9 @@
}
}
if k == "face" {
- tempMap[k] = []structure.FaceResult{}
- for _, res := range result.([]structure.FaceResult) {
- tempMap[k] = append(tempMap[k].([]structure.FaceResult), res)
+ tempMap[k] = []structure.TargetResult{}
+ for _, res := range result.([]structure.TargetResult) {
+ tempMap[k] = append(tempMap[k].([]structure.TargetResult), res)
}
}
}
@@ -351,9 +352,9 @@
args.RuleResult["yolo"].([]structure.Result)[i].Others.LinkCache = label.LinkCache
}
}
- for i := 0; i < len(args.RuleResult["face"].([]structure.FaceResult)); i++ {
- if args.RuleResult["face"].([]structure.FaceResult)[i].RuleGroupId == groupRule.GroupId { // 鎶婅仈鍔ㄦ暟鎹拷鍔犱笂
- args.RuleResult["face"].([]structure.FaceResult)[i].Others.LinkCache = label.LinkCache
+ for i := 0; i < len(args.RuleResult["face"].([]structure.TargetResult)); i++ {
+ if args.RuleResult["face"].([]structure.TargetResult)[i].RuleGroupId == groupRule.GroupId { // 鎶婅仈鍔ㄦ暟鎹拷鍔犱笂
+ args.RuleResult["face"].([]structure.TargetResult)[i].Others.LinkCache = label.LinkCache
}
}
}
@@ -371,9 +372,9 @@
}
}
if val == 1 {
- if len(args.RuleResult["face"].([]structure.FaceResult)) >= 1 {
- lens := len(args.RuleResult["face"].([]structure.FaceResult))-1
- args.RuleResult["face"] = args.RuleResult["face"].([]structure.FaceResult)[0:lens]
+ if len(args.RuleResult["face"].([]structure.TargetResult)) >= 1 {
+ lens := len(args.RuleResult["face"].([]structure.TargetResult))-1
+ args.RuleResult["face"] = args.RuleResult["face"].([]structure.TargetResult)[0:lens]
}
}
}
diff --git a/ruleserver/timeTicker.go b/ruleserver/timeTicker.go
index 820ab18..c0c0037 100644
--- a/ruleserver/timeTicker.go
+++ b/ruleserver/timeTicker.go
@@ -42,11 +42,12 @@
logger.Info("瀹氭椂鍣ㄦ墽琛屽崟鍏�", time.Now().Unix())
fmt.Println("瀹氭椂鍣ㄦ墽琛屽崟鍏�", time.Now().Unix())
// 姣忕閽熻鏁板櫒姹犲瓙閲屾墍鏈夌殑璁℃暟鍣ㄥ厓绱犻兘鍑忎竴锛屽噺鍒�0鐨勬槸璇ユ姤璀︾殑
+ // 鍥剧墖瀹氭椂鍣ㄧ郴鍒�
rw.Lock()
for k, timeEle := range TimeEleList {
if timeEle.N > 0 {
timeEle.N = timeEle.N - 1
- logger.Error("-------------------------------------鎵撳嵃瀹氭椂鍣ㄨ鏁板厓绱犲綋鍓嶅��-----------------------------------------锛�", timeEle.N)
+ logger.Debug("-------------------------------------鎵撳嵃瀹氭椂鍣ㄨ鏁板厓绱犲綋鍓嶅��-----------------------------------------锛�", timeEle.N)
}
if timeEle.GroupId != "" && timeEle.N == 0 {
// 璇存槑鏄仈鍔ㄤ换鍔$殑鏃堕棿绐楀彛 鍒扮偣鍎夸簡璇ラ攢姣佷簡,鍐嶆潵浜嗗啀鍒涘缓
@@ -54,6 +55,14 @@
}
}
rw.Unlock()
+ // 鐩爣瀹氭椂鍣ㄧ郴鍒�
+ for _,cameraArea := range structure.StaticMap {
+ for _,obj := range cameraArea.Targets {
+ if obj.N > 0 {
+ obj.N = obj.N - 1
+ }
+ }
+ }
case stop := <-stopChan:
if stop {
logger.Info("瀹氭椂鍣ㄧ粨鏉�")
diff --git a/structure/algorithm.go b/structure/algorithm.go
new file mode 100644
index 0000000..e40b2c2
--- /dev/null
+++ b/structure/algorithm.go
@@ -0,0 +1,17 @@
+package structure
+
+//涓綋闈欐绠楁硶
+var StaticMap = make(map[string]*CameraArea)
+
+type CameraArea struct {
+ Targets []*Obj
+}
+type Obj struct {
+ Id uint64
+ Location Rect
+ N int // 璁℃暟鍣ㄥ綋鍓嶅��
+ InitN int // 璁℃暟鍣ㄥ垵濮嬪��
+ BufferFlag int // 缂撳啿瀹归敊浣� 杩炵画n甯alse鎵嶄负false
+ AlarmFlag bool
+ CacheSdkData ResultMsg // 瀹氭椂鍣ㄧ殑缂撳瓨鏁版嵁 鎸佺画鏃堕棿绫荤殑寮�鍚畾鏃跺櫒鏃惰缂撳瓨涓�甯�
+}
\ No newline at end of file
diff --git a/structure/rule.go b/structure/rule.go
index 60fe306..ce55b80 100644
--- a/structure/rule.go
+++ b/structure/rule.go
@@ -13,6 +13,7 @@
Feature []byte
ThftRes protomsg.ThftResult
Liker []*BaseInfo
+ CacheData ResultMsg
}
// 姣忎釜鍖哄煙鍐呯殑鍥剧墖鏁版嵁闆嗗悎
@@ -68,7 +69,7 @@
type ResultMsg struct {
*protomsg.SdkMessage
- RuleResult map[string]interface{} // 杩囧畬瑙勫垯鍚庢墦鐨勬爣绛� face: []FaceResult, yolo: []Result
+ RuleResult map[string]interface{} // 杩囧畬瑙勫垯鍚庢墦鐨勬爣绛� face: []FaceResult, yolo: []Result target
}
// 杩囪鍒欏簱鎵撲笂鐨勬爣绛�
@@ -97,7 +98,7 @@
}
// 杩囪鍒欏簱鎵撲笂鐨勬爣绛�
-type FaceResult struct {
+type TargetResult struct {
Result
Args []Arg
}
diff --git a/util/simpleCV.go b/util/simpleCV.go
index bb34716..23bee35 100644
--- a/util/simpleCV.go
+++ b/util/simpleCV.go
@@ -187,7 +187,7 @@
return
}
-func DrawPolygonOnImageForFace(cameraId string, img protomsg.Image, results []structure.FaceResult,url string) (maps map[string]interface{}, err0 error) {
+func DrawPolygonOnImageForFace(cameraId string, img protomsg.Image, results []structure.TargetResult,url string) (maps map[string]interface{}, err0 error) {
rook, _ := gocv.NewMatFromBytes(int(img.Height), int(img.Width), gocv.MatTypeCV8UC3, img.Data)
//rook := gocv.IMRead("/home/user/workspace/ruleprocess/util/105.jpg",gocv.IMReadColor)
--
Gitblit v1.8.0