From cbe73e3706a6494b506febd0e4a51ce1096aae1f Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期四, 05 十二月 2019 17:21:46 +0800
Subject: [PATCH] 加跟踪算法,进程间通讯加sleep
---
algorithm/middleware/middleware.go | 104 ++++-
ruleserver/server.go | 2
go.mod | 1
ruleserver/ruleToformula.go | 17 +
ruleserver/readyDataForRule.go | 110 +++---
labelFilter/req.go | 33 -
algorithm/personTrack/personTrack.go | 203 ++++++++++++
go.sum | 2
insertdata/insertDataToEs.go | 75 +---
algorithm/middleware/readyData.go | 214 ++++++++-----
main.go | 90 ++---
logger/log.xml | 4
structure/rule.go | 47 +-
13 files changed, 582 insertions(+), 320 deletions(-)
diff --git a/algorithm/middleware/middleware.go b/algorithm/middleware/middleware.go
index 282e069..8657df7 100644
--- a/algorithm/middleware/middleware.go
+++ b/algorithm/middleware/middleware.go
@@ -18,6 +18,38 @@
resultSplice := []*structure.LittleRuleResult{}
sdkNames := ""
polygonId := ""
+ // 杩欐杩囩殑鏄椂闂存瑙勫垯锛堟椂闂存绛夛級
+ 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
+ sdkName := sdk.SdkName
+ if ipcId == sdkData.IpcId {
+ for _, areaMap := range sdkData.AreaMapList {
+ ruleResult := timeRuleResult(groupRule.Rules[j], areaMap)
+ if ruleResult.Result != "" {
+ if strings.Contains(ruleResult.Result, "false") {
+ return false,"","" // 涓嶇鍚堟椂闂磋鍒欑殑璇濈洿鎺ヨ繑鍥烇紝涓嶅啀娴垂鏃堕棿
+ }
+ if strings.Contains(ruleResult.Result, "true") {
+ areaMap.IsEffective = true
+ }
+ //logger.Info("鏃堕棿瑙勫垯缁撴灉锛�", ruleResult.Result)
+ 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++ {
@@ -168,6 +200,42 @@
}
}
}
+ // 璺ㄦ憚鍍忔満璺熻釜
+ for j := 0; j < len(groupRule.Rules); j++ {
+ if groupRule.Rules[j].SdkId == "浜轰綋璺熻釜" && groupRule.Rules[j].SdkArgAlias != "鐏甸瓊鍙傛暟"{
+ 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("褰撳墠璧扮殑瑙勫垯鏄�--锛�", groupRule.Rules[j],sdkName,groupRule.Rules[j].SdkArgAlias, "---","")
+ for _, areaMap := range sdkData.AreaMapList {
+ ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap,lable,args,message)
+ 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].SdkArgAlias == "objCount" {
@@ -200,35 +268,7 @@
}
}
}
- // 杩欐杩囩殑鏄椂闂存瑙勫垯锛堟椂闂存绛夛級
- 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
- sdkName := sdk.SdkName
- if ipcId == sdkData.IpcId {
- for _, areaMap := range sdkData.AreaMapList {
- ruleResult := timeRuleResult(groupRule.Rules[j], areaMap)
- if ruleResult.Result != "" {
- if strings.Contains(ruleResult.Result, "true") {
- areaMap.IsEffective = true
- }
- //logger.Info("鏃堕棿瑙勫垯缁撴灉锛�", ruleResult.Result)
- 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)
- }
- }
- }
- }
- }
+
// 灏嗘暟缁勬寜sort鎺掑簭
sort.Sort(ruleserver.ResultList(resultSplice))
// 鎺掑簭鍚庡彇鍚勮嚜鐨勭粨鏋滃拰杩炴帴绗︽嫾鍑鸿鍒欒〃杈惧紡寰楀嚭缁撴灉
@@ -334,9 +374,11 @@
soName = "static.so"
} else if sdkId == "812b674b-2375-4589-919a-5c1c3278a978" {
soName = "plate.so"
+ } else if sdkId == "浜轰綋璺熻釜" {
+ soName = "personTrack.so"
}
- //soInfo,errr := cache.GetSoInfoById(sdkId)
- //if errr != nil {
+ //soInfo,err := cache.GetSoInfoById(sdkId)
+ //if err != nil {
// panic("娌¤鍒版敞鍐岃〃")
//}
//soName := soInfo.SoName
diff --git a/algorithm/middleware/readyData.go b/algorithm/middleware/readyData.go
index ee8c813..8b367f8 100644
--- a/algorithm/middleware/readyData.go
+++ b/algorithm/middleware/readyData.go
@@ -35,7 +35,7 @@
// 杩欐瑕佸榻愯〃杈惧紡閲屾墍闇�瑕佺殑鎵�鏈夊弬鏁�
a.TargetNum++
uuid := uuid.NewV4().String()
- arg1 := structure.Arg{obj.Id,uuid,obj.Score, ruleserver.PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), a.AreaJson,obj.Type, obj.Rects, obj.Car,obj.Feature, obj.ThftRes, []*structure.BaseInfo{},"",structure.ResultMsg{}}
+ arg1 := structure.Arg{structure.SourceArg{obj.Id,uuid,obj.Score, ruleserver.PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), a.AreaJson,obj.Type, obj.Rects, obj.Car,obj.Feature,obj.ThftRes, []*structure.BaseInfo{},"",structure.ResultMsg{}},structure.SourceArg{}}
//logger.Println("鏀捐繘鍘荤殑arg锛�-------", arg1)
a.Args = append(a.Args, &arg1)
a.FilterData = append(a.FilterData, &arg1)
@@ -106,91 +106,135 @@
logger.Info("鎺ュ埌鏁版嵁锛屾憚鍍忔満涓猴細", m.Cid, "鍥剧墖鐨刬d涓猴細", i.Id)
//logger.Info("----------------鐪嬬湅鏈夊嚑涓畻娉曪細",len(m.Tasklab.Sdkinfos))
for _, sdkinfo := range m.Tasklab.Sdkinfos { // yolo绠楁硶
- if sdkinfo.Sdktype == "Yolo" {
- arg := structure.SdkData{}
- arg.TaskId = m.Tasklab.Taskid
- arg.IpcId = sdkinfo.Ipcid
- arg.IsYolo = true
- arg.ImageWidth = int(i.Width)
- arg.ImageHeight = int(i.Height)
- logger.Info("-----杩借釜涔嬪悗sdkinfo.Sdkdata鐨勯暱搴︿负锛�----", len(sdkinfo.Sdkdata))
- if len(sdkinfo.Sdkdata) > 1 {
- // 澶т簬1鎵嶆湁鏁版嵁
- yoloParam := protomsg.ParamYoloObj{}
- err = proto.Unmarshal(sdkinfo.Sdkdata, &yoloParam)
- if err != nil {
- logger.Info("瑙f瀽YOLO sdk鏁版嵁鏃跺嚭鐜伴敊璇�", err)
- continue
- }
- var yoloNum int = 0
- for _, info := range yoloParam.Infos {
- if info.Typ == 0 {
- //logger.Debug("-------------yolo鐨勫潗鏍囨湁鍑犱釜",info.RcObj)
- photoMap := structure.PhotoMap{Rects: rectFormat(info.RcObj), Score: float64(info.Prob) * 100, Type: "yolo",Id:strconv.Itoa(int(info.ObjID))}
- arg.Photo = append(arg.Photo, photoMap)
- yoloNum++
- }
- }
- logger.Info("--------------杩借釜涔嬪悗yolo鐨勪釜鏁帮細", yoloNum)
- args.Sdkdata = append(args.Sdkdata, &arg)
- } else {
- continue
- }
-
- }
- if sdkinfo.Sdktype == "FaceDetect" { // 浜鸿劯妫�娴�
- arg := structure.SdkData{}
- arg.TaskId = m.Tasklab.Taskid
- arg.IpcId = sdkinfo.Ipcid
- arg.IsYolo = false
- arg.ImageWidth = int(i.Width)
- arg.ImageHeight = int(i.Height)
- if len(sdkinfo.Sdkdata) > 1 {
- faceParam := protomsg.ParamFacePos{}
- err = proto.Unmarshal(sdkinfo.Sdkdata, &faceParam)
- if err != nil {
- logger.Info("瑙f瀽FACE sdk鏁版嵁鏃跺嚭鐜伴敊璇�", err)
- continue
- }
- logger.Info("--------------杩借釜涔嬪悗浜鸿劯鐨勪釜鏁帮細", len(faceParam.Faces))
- for _, info := range faceParam.Faces {
- //logger.Info("_______________________________________________绗竴娆$湅鐩镐技鍊硷細",info.Pos.FAngle.Confidence*100)
- photoMap := structure.PhotoMap{Id: strconv.Itoa(int(info.Pos.FaceID)) , Rects: rectFormat(info.Pos.RcFace), Score: float64(info.Pos.FAngle.Confidence * 100), Type: "face", ThftRes: *(info.Result), Feature: info.Feats}
- arg.Photo = append(arg.Photo, photoMap)
- }
- args.Sdkdata = append(args.Sdkdata, &arg)
- } else {
- continue
- }
- }
- if sdkinfo.Sdktype == "Plate" { // 杞︾墝璇嗗埆
- arg := structure.SdkData{}
- arg.TaskId = m.Tasklab.Taskid
- logger.Info("杞︾墝鐨刬pcid锛�",sdkinfo.Ipcid)
- arg.IpcId = sdkinfo.Ipcid
- arg.IsYolo = false
- arg.ImageWidth = int(i.Width)
- arg.ImageHeight = int(i.Height)
- if len(sdkinfo.Sdkdata) > 1 {
- plateIDResult := protomsg.PlateIDResult {}
- err = proto.Unmarshal(sdkinfo.Sdkdata, &plateIDResult )
- if err != nil {
- logger.Info("瑙f瀽杞︾墝鏁版嵁鏃跺嚭鐜伴敊璇�", err)
- continue
- }
- for _, info := range plateIDResult.Result {
- logger.Info("鎺ユ敹杞︾墝鏁版嵁锛�",info.FvdConf,info.NVehicleColor1,info.NPlateFlag,info.RcCarLocation)
- if info.NConfidence > 70 {
- logger.Info("杞︾墝涔熺鍚堢殑鏁版嵁",info.FvdConf,info.NVehicleColor1,info.NPlateFlag,info.RcCarLocation,info.NConfidence,)
- photoMap := structure.PhotoMap{Id: info.License,Score: float64(info.FvdConf)*100,Rects: rectFormat(info.RcCarLocation), Type: "plate", Car:info}
- arg.Photo = append(arg.Photo, photoMap)
- }
- }
- args.Sdkdata = append(args.Sdkdata, &arg)
- } else {
- continue
- }
+ switch sdkinfo.Sdktype {
+ case "Yolo":
+ extractYolo(args,m,sdkinfo,i)
+ case "FaceDetect":
+ extractFace(args,m,sdkinfo,i)
+ case "Plate":
+ extractCar(args,m,sdkinfo,i)
+ case "Track":
+ extractTrack(args,m,sdkinfo,i)
}
}
return m
}
+
+// 鎶婁汉鑴告斁杩涘搴旂殑浜轰綋
+func FacePush2Body () {
+
+}
+// 鎻愬彇face
+func extractFace(args *structure.SdkDatas,m protomsg.SdkMessage,sdkinfo *protomsg.SdkmsgWithTask,i protomsg.Image) {
+ arg := structure.SdkData{}
+ arg.TaskId = m.Tasklab.Taskid
+ arg.IpcId = sdkinfo.Ipcid
+ arg.IsYolo = false
+ arg.ImageWidth = int(i.Width)
+ arg.ImageHeight = int(i.Height)
+ if len(sdkinfo.Sdkdata) > 1 {
+ faceParam := protomsg.ParamFacePos{}
+ err := proto.Unmarshal(sdkinfo.Sdkdata, &faceParam)
+ if err != nil {
+ logger.Info("瑙f瀽FACE sdk鏁版嵁鏃跺嚭鐜伴敊璇�", err)
+ return
+ }
+ logger.Info("--------------杩借釜涔嬪悗浜鸿劯鐨勪釜鏁帮細", len(faceParam.Faces))
+ for _, info := range faceParam.Faces {
+ //logger.Info("_______________________________________________绗竴娆$湅鐩镐技鍊硷細",info.Pos.FAngle.Confidence*100)
+ photoMap := structure.PhotoMap{Id: strconv.Itoa(int(info.Pos.FaceID)) , Rects: rectFormat(info.Pos.RcFace), Score: float64(info.Pos.FAngle.Confidence * 100), Type: "face", ThftRes: *(info.Result), Feature: info.Feats}
+ arg.Photo = append(arg.Photo, photoMap)
+ }
+ args.Sdkdata = append(args.Sdkdata, &arg)
+ }
+}
+// 鎻愬彇yolo
+func extractYolo(args *structure.SdkDatas,m protomsg.SdkMessage,sdkinfo *protomsg.SdkmsgWithTask,i protomsg.Image) {
+ arg := structure.SdkData{}
+ arg.TaskId = m.Tasklab.Taskid
+ arg.IpcId = sdkinfo.Ipcid
+ arg.IsYolo = true
+ arg.ImageWidth = int(i.Width)
+ arg.ImageHeight = int(i.Height)
+ logger.Info("-----杩借釜涔嬪悗sdkinfo.Sdkdata鐨勯暱搴︿负锛�----", len(sdkinfo.Sdkdata))
+ if len(sdkinfo.Sdkdata) > 1 {
+ // 澶т簬1鎵嶆湁鏁版嵁
+ yoloParam := protomsg.ParamYoloObj{}
+ err := proto.Unmarshal(sdkinfo.Sdkdata, &yoloParam)
+ if err != nil {
+ logger.Info("瑙f瀽YOLO sdk鏁版嵁鏃跺嚭鐜伴敊璇�", err)
+ return
+ }
+ var yoloNum int = 0
+ for _, info := range yoloParam.Infos {
+ if info.Typ == 0 {
+ //logger.Debug("-------------yolo鐨勫潗鏍囨湁鍑犱釜",info.RcObj)
+ photoMap := structure.PhotoMap{Rects: rectFormat(info.RcObj), Score: float64(info.Prob) * 100, Type: "yolo",Id:strconv.Itoa(int(info.ObjID))}
+ arg.Photo = append(arg.Photo, photoMap)
+ yoloNum++
+ }
+ }
+ logger.Info("--------------杩借釜涔嬪悗yolo鐨勪釜鏁帮細", yoloNum)
+ args.Sdkdata = append(args.Sdkdata, &arg)
+ } else {
+ return
+ }
+}
+
+// 鎻愬彇car
+func extractCar(args *structure.SdkDatas,m protomsg.SdkMessage,sdkinfo *protomsg.SdkmsgWithTask,i protomsg.Image) {
+ arg := structure.SdkData{}
+ arg.TaskId = m.Tasklab.Taskid
+ arg.IpcId = sdkinfo.Ipcid
+ arg.IsYolo = false
+ arg.ImageWidth = int(i.Width)
+ arg.ImageHeight = int(i.Height)
+ if len(sdkinfo.Sdkdata) > 1 {
+ plateIDResult := protomsg.PlateIDResult {}
+ err := proto.Unmarshal(sdkinfo.Sdkdata, &plateIDResult )
+ if err != nil {
+ logger.Info("瑙f瀽杞︾墝鏁版嵁鏃跺嚭鐜伴敊璇�", err)
+ return
+ }
+ for _, info := range plateIDResult.Result {
+ logger.Info("鎺ユ敹杞︾墝鏁版嵁锛�",info.FvdConf,info.NVehicleColor1,info.NPlateFlag,info.RcCarLocation)
+ if info.NConfidence > 70 {
+ logger.Info("杞︾墝涔熺鍚堢殑鏁版嵁",info.FvdConf,info.NVehicleColor1,info.NPlateFlag,info.RcCarLocation,info.NConfidence,)
+ photoMap := structure.PhotoMap{Id: info.License,Score: float64(info.FvdConf)*100,Rects: rectFormat(info.RcCarLocation), Type: "plate", Car:info}
+ arg.Photo = append(arg.Photo, photoMap)
+ }
+ }
+ args.Sdkdata = append(args.Sdkdata, &arg)
+ } else {
+ return
+ }
+}
+
+// 鎻愬彇璺熻釜
+func extractTrack(args *structure.SdkDatas,m protomsg.SdkMessage,sdkinfo *protomsg.SdkmsgWithTask,i protomsg.Image) {
+ arg := structure.SdkData{}
+ arg.TaskId = m.Tasklab.Taskid
+ arg.IpcId = sdkinfo.Ipcid
+ arg.IsYolo = false
+ arg.ImageWidth = int(i.Width)
+ arg.ImageHeight = int(i.Height)
+ if len(sdkinfo.Sdkdata) > 1 {
+ plateIDResult := protomsg.PlateIDResult {}
+ err := proto.Unmarshal(sdkinfo.Sdkdata, &plateIDResult )
+ if err != nil {
+ logger.Info("瑙f瀽璺熻釜鐩爣鏁版嵁鏃跺嚭鐜伴敊璇�", err)
+ return
+ }
+ for _, info := range plateIDResult.Result {
+ logger.Info("鎺ユ敹杞︾墝鏁版嵁锛�",info.FvdConf,info.NVehicleColor1,info.NPlateFlag,info.RcCarLocation)
+ if info.NConfidence > 70 {
+ logger.Info("杞︾墝涔熺鍚堢殑鏁版嵁",info.FvdConf,info.NVehicleColor1,info.NPlateFlag,info.RcCarLocation,info.NConfidence,)
+ photoMap := structure.PhotoMap{Id: info.License,Score: float64(info.FvdConf)*100,Rects: rectFormat(info.RcCarLocation), Type: "plate", Car:info}
+ arg.Photo = append(arg.Photo, photoMap)
+ }
+ }
+ args.Sdkdata = append(args.Sdkdata, &arg)
+ } else {
+ return
+ }
+}
\ No newline at end of file
diff --git a/algorithm/personTrack/personTrack.go b/algorithm/personTrack/personTrack.go
new file mode 100644
index 0000000..3961c0e
--- /dev/null
+++ b/algorithm/personTrack/personTrack.go
@@ -0,0 +1,203 @@
+package personTrack
+
+import (
+ "encoding/json"
+ "errors"
+ "net"
+ "strconv"
+
+ "nanomsg.org/go-mangos"
+ "nanomsg.org/go-mangos/protocol/req"
+ "nanomsg.org/go-mangos/transport/tcp"
+ "github.com/knetic/govaluate"
+ logger "github.com/alecthomas/log4go"
+
+ "basic.com/pubsub/protomsg.git"
+ "ruleprocess/structure"
+)
+
+var sender chan []byte = make(chan []byte)
+var receiver chan string = make(chan string)
+var initFlag bool = false
+var sock mangos.Socket
+func Init() {
+ go Push()
+}
+
+// 浜轰綋璺熻釜绠楁硶
+func Entrance(rule *protomsg.Rule, am *structure.AreaMap, lable *structure.Others, args *structure.SdkDatas, message *protomsg.SdkMessage) structure.LittleRuleResult {
+ if !initFlag {
+ Init()
+ }
+ 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 == "threshold"{
+ return track(rule,am)
+ }
+ return structure.LittleRuleResult{}
+ } else {
+ return structure.LittleRuleResult{}
+ }
+}
+
+// 杩囨护瑙勫垯鍏堢瓫閫夊嚭绗﹀悎鏉′欢鐨勭洰鏍囨暟閲�
+func filterRule(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult {
+ // 澶勭悊鐨勯兘鏄痽olo鏁版嵁
+ 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
+ switch rule.SdkArgAlias {
+ case "score":
+ formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue
+ //logger.Info("鐩镐技搴﹀皬鍏紡锛�", formula)
+ case "proportion":
+ formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue
+ //logger.Info("鍗犳瘮鍏紡锛�", formula)
+ case "size":
+ 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}
+ }
+ }
+ return structure.LittleRuleResult{}
+}
+
+// 缁欑洰鏍囧~鍏卨iker
+func fillLiker(compareThreshold float32,arg *structure.Arg,am *structure.AreaMap) {
+ trackArg := make(map[string]interface{})
+ trackArg["esId"] = ""
+ trackArg["cameraId"] = am.CameraId
+ trackArg["bodyFeature"] = arg.Feature
+ trackArg["faceFeature"] = arg.AttachArg.Feature
+ b,err := json.Marshal(trackArg)
+ if err != nil {
+ _ = logger.Error("json搴忓垪鍖栭敊璇�", err)
+ }
+ esId := getCompareMsg(b)
+ logger.Info("姣斿鍑烘潵鐨別sid:",esId)
+ base := structure.BaseInfo{TargetId:esId}
+ arg.Liker = append(arg.Liker, &base)
+}
+
+func track (rule *protomsg.Rule,am *structure.AreaMap) structure.LittleRuleResult{
+ var threshold float32 = 70 // 榛樿闃堝�间负70
+ if th,err := strconv.ParseFloat(rule.SdkArgValue,32); err == nil {
+ threshold = float32(th)
+ }
+ for i, arg := range am.FilterData {
+ fillLiker(threshold,arg,am)
+ if len(arg.Liker) == 0 {
+ // 濡傛灉娌℃湁鐩镐技鑰呭垯鍒犻櫎鏈洰鏍囨暟鎹�
+ am.FilterData = append(am.FilterData[:i],am.FilterData[i+1:]...)
+ }
+ }
+ if len(am.FilterData) > 0 {
+ return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
+ } else {
+ return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
+ }
+}
+
+func Push(){
+ var err error
+ var msg []byte
+
+ if sock, err = req.NewSocket(); err != nil {
+ _ = logger.Error("鍒涘缓璇锋眰socket澶辫触: %s", err.Error())
+ }
+ errSize := sock.SetOption(mangos.OptionMaxRecvSize,5*1024*1024)
+ if errSize != nil {
+ _ = logger.Error("Failed set MaxRecvSize: %v", err)
+ }
+ //sock.AddTransport(ipc.NewTransport())
+ sock.AddTransport(tcp.NewTransport())
+ serverIP, _ := GetLocalIP()
+ if err = sock.Dial("tcp://"+serverIP+":4010"); err != nil {
+ _ = logger.Error("璇锋眰socket鎷ㄥ彿澶辫触: %s", err.Error())
+ }
+ logger.Info("搴忓垪鍖栨暟鎹�")
+ initFlag = true
+ for {
+ select {
+ // case <-ctx.Done():
+ // return
+ case data := <- sender:
+
+ logger.Info("鏁版嵁闀垮害涓猴細",len(data))
+
+ logger.Debug("鎺ㄩ�佹暟鎹�")
+ if err = sock.Send(data); err != nil {
+ _ = logger.Error("鎺ㄩ�乻ocket鍙戦�佹暟鎹け璐�: %s", err.Error())
+ }
+ if msg, err = sock.Recv(); err != nil {
+ _ = logger.Error("鎺ユ敹鍝嶅簲澶辫触: %s", err.Error())
+ }
+ logger.Debug("鏁版嵁鎺ㄩ�佹垚鍔燂紒鏀跺埌鍝嶅簲,鏁版嵁闀垮害涓猴細",len(msg))
+ receiver <- string(msg)
+ default:
+
+ }
+ }
+}
+
+func getCompareMsg(data []byte) string{
+ sender <- data
+ return <- receiver
+}
+
+// 鑾峰彇鏈満ip
+func GetLocalIP() (ipv4 string, err error) {
+ var (
+ addrs []net.Addr
+ addr net.Addr
+ ipNet *net.IPNet // IP鍦板潃
+ isIpNet bool
+ )
+ // 鑾峰彇鎵�鏈夌綉鍗�
+ if addrs, err = net.InterfaceAddrs(); err != nil {
+ return
+ }
+ // 鍙栫涓�涓潪lo鐨勭綉鍗P
+ for _, addr = range addrs {
+ // 杩欎釜缃戠粶鍦板潃鏄疘P鍦板潃: ipv4, ipv6
+ if ipNet, isIpNet = addr.(*net.IPNet); isIpNet && !ipNet.IP.IsLoopback() {
+ // 璺宠繃IPV6
+ if ipNet.IP.To4() != nil {
+ ipv4 = ipNet.IP.String() // 192.168.1.1
+ return
+ }
+ }
+ }
+
+ err = errors.New("ipv4 not found")
+ return
+}
\ No newline at end of file
diff --git a/go.mod b/go.mod
index 5cb57ea..6d6f95a 100644
--- a/go.mod
+++ b/go.mod
@@ -20,6 +20,7 @@
github.com/jeanphorn/log4go v0.0.0-20190526082429-7dbb8deb9468 // indirect
github.com/kirinlabs/HttpRequest v0.1.5 // indirect
github.com/knetic/govaluate v3.0.0+incompatible
+ github.com/panjf2000/ants/v2 v2.2.2 // indirect
github.com/pierrec/lz4 v2.2.3+incompatible
github.com/satori/go.uuid v1.2.0
github.com/spf13/viper v1.4.0
diff --git a/go.sum b/go.sum
index e57c273..565aa64 100644
--- a/go.sum
+++ b/go.sum
@@ -114,6 +114,8 @@
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
+github.com/panjf2000/ants/v2 v2.2.2 h1:TWzusBjq/IflXhy+/S6u5wmMLCBdJnB9tPIx9Zmhvok=
+github.com/panjf2000/ants/v2 v2.2.2/go.mod h1:1GFm8bV8nyCQvU5K4WvBCTG1/YBFOD2VzjffD8fV55A=
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pierrec/lz4 v2.2.3+incompatible h1:YpgKDCFg5dd0Eb+XlgrfJtH4fAqoRA1kBcKnBZ4EFSE=
diff --git a/insertdata/insertDataToEs.go b/insertdata/insertDataToEs.go
index 0825a05..3169cb9 100644
--- a/insertdata/insertDataToEs.go
+++ b/insertdata/insertDataToEs.go
@@ -1,19 +1,20 @@
package insertdata
import (
- logger "github.com/alecthomas/log4go"
"encoding/base64"
"encoding/json"
"errors"
"net"
- "ruleprocess/cache"
- "ruleprocess/structure"
"strconv"
"time"
- "basic.com/pubsub/protomsg.git"
"github.com/golang/protobuf/proto"
"github.com/satori/go.uuid"
+ logger "github.com/alecthomas/log4go"
+
+ "ruleprocess/cache"
+ "ruleprocess/structure"
+ "basic.com/pubsub/protomsg.git"
"ruleprocess/ruleserver"
"ruleprocess/util"
)
@@ -27,43 +28,6 @@
ServerIp string `yaml:"serverIp"`
ServerPort string `yaml:"serverPort"`
DbTablePersons string `yaml:"dbTablePersons"`
-}
-
-//func InitInsertEs() {
-// weedfsUrl = "http://"+WeedFs.Ip+":"+strconv.Itoa(WeedFs.UploadPort)+"/submit"
-// videoPersonUrl = "http://"+EsInfo.Masterip+":"+EsInfo.Httpport+"/"+EsInfo.EsIndex.VideoPersons.IndexName+"/"+EsInfo.EsIndex.VideoPersons.IndexType
-// personAction = "http://"+EsInfo.Masterip+":"+EsInfo.Httpport+"/"+EsInfo.EsIndex.Personaction.IndexName+"/"+EsInfo.EsIndex.Personaction.IndexType
-//}
-
-// 浜鸿劯鐨勬暟鎹粨鏋�
-type PerVideoPicture struct {
- Id string `json:"id"`
- CameraId string `json:"cameraId"`
- CameraAddr string `json:"cameraAddr"`
- CameraName string `json:"cameraName"`
- PicDate string `json:"picDate"`
- PicMaxUrl []string `json:"picMaxUrl"`
- TaskId string `json:"taskId"`
- TaskName string `json:"taskName"`
- SdkName string `json:"sdkName"`
- Content string `json:"content"`
- AlarmRules []AlarmRule `json:"alarmRules"`
- LikeDate string `json:"likeDate"`
- ShowLabels string `json:"showLabels"`
- OtherLabels string `json:"otherLabels"`
- VideoUrl string `json:"videoUrl"`
- AnalyServerId string `json:"analyServerId"`
- AnalyServerName string `json:"analyServerName"`
- AnalyServerIp string `json:"analyServerIp"`
- ClusterId string `json:"clusterId"`
- IsAlarm bool `json:"isAlarm"`
- IsAckAlarm bool `json:"isAckAlarm"`
- IsCollect bool `json:"isCollect"`
- IsDelete bool `json:"isDelete"`
- BaseInfo []*structure.BaseInfo `json:"baseInfo"`
- TargetInfo []Target `json:"targetInfo"`
- LinkTag string `json:"linkTag"`
- LinkTagInfo []*LinkInfo `json:"linkTagInfo"`
}
type LinkInfo struct {
@@ -94,13 +58,24 @@
TargetInfo []Target `json:"targetInfo"`
}
-type Target struct {
+// 缁熶竴鐨勬暟鎹粨鏋�
+type PerVideoPicture struct {
+ LinkInfo
+ LinkTag string `json:"linkTag"`
+ LinkTagInfo []*LinkInfo `json:"linkTagInfo"`
+}
+
+type SourceTarget struct {
TargetId string `json:"targetId"`
TargetScore float64 `json:"targetScore"`
TargetType string `json:"targetType"`
Feature string `json:"feature"`
PicSmUrl string `json:"picSmUrl"`
TargetLocation Points `json:"targetLocation"`
+}
+type Target struct {
+ SourceTarget
+ AttachTarget SourceTarget
}
type Points struct {
@@ -138,7 +113,7 @@
panic("閰嶇疆鏂囦欢涓嶅悎娉�")
}
weedfsUrl = "http://" + localConfig1.WebPicIp + ":" + strconv.Itoa(int(localConfig1.WebPicPort)) + "/submit"
- videoPersonUrl = "http://" + localConfig1.AlarmIp + ":" + strconv.Itoa(int(localConfig1.AlarmPort)) + "/" + EsInfo.EsIndex.AIOcean.IndexName + "/" + EsInfo.EsIndex.AIOcean.IndexType
+ videoPersonUrl = "http://" + localConfig1.AlarmIp + ":" + strconv.Itoa(int(localConfig1.AlarmPort)) + "/" + EsInfo.EsIndex.AIOcean.IndexName + "/" + EsInfo.EsIndex.AIOcean.IndexType+"?refresh=true"
InsertFace(msg)
InsertYolo(msg)
InsertTarget(msg)
@@ -146,9 +121,9 @@
// 寰�es涓彃鍏ヤ汉鑴哥被鍨嬫暟鎹�
func InsertFace(msg structure.ResultMsg) {
- if (msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]structure.Result)) > 0) || (msg.RuleResult["plate"] != nil && len(msg.RuleResult["plate"].([]structure.Result)) > 0) {
+ if (msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]structure.Result)) > 0) || (msg.RuleResult["plate"] != nil && len(msg.RuleResult["plate"].([]structure.Result)) > 0) || (msg.RuleResult["track"] != nil && len(msg.RuleResult["track"].([]structure.Result)) > 0) {
for key, results := range msg.RuleResult {
- if key == "face" || key == "plate" {
+ if key == "face" || key == "plate" || key == "track"{
logger.Info("寰�ES鎻掍汉鑴告暟鎹�(鎴栬溅鐗屾暟鎹�)")
faces := []*ObjAndRules{}
faces = PutFace(faces, results.([]structure.Result))
@@ -194,6 +169,7 @@
target.Feature = base64.StdEncoding.EncodeToString(face.Feature)
target.PicSmUrl = resp["fileUrl"].(string)
target.TargetLocation = Points{TopLeft: Point{face.Location.X, face.Location.Y}, BottomRight: Point{face.Location.X + face.Location.Width, face.Location.Y + face.Location.Height}}
+ target.AttachTarget = SourceTarget{face.AttachArg.Id,face.AttachArg.Score,face.AttachArg.Type,base64.StdEncoding.EncodeToString(face.AttachArg.Feature),"",Points{TopLeft: Point{face.AttachArg.Location.X, face.AttachArg.Location.Y}, BottomRight: Point{face.AttachArg.Location.X + face.AttachArg.Location.Width, face.AttachArg.Location.Y + face.AttachArg.Location.Height}}}
var targetInfos []Target
targetInfos = append(targetInfos, *target)
@@ -205,7 +181,7 @@
sdkname = "杞︾墝璇嗗埆"
}
//logger.Info("浜鸿劯鐩爣target:",targetInfos)
- pervideo := PerVideoPicture{
+ pervideo := PerVideoPicture{LinkInfo{
face.Uuid,
msg.Cid,
msg.Push.Cam.Addr,
@@ -231,6 +207,7 @@
false,
face.Liker,
targetInfos,
+ },
"",
[]*LinkInfo{},
}
@@ -413,7 +390,7 @@
if resp["fileUrl"] != nil {
url = append(url, resp["fileUrl"].(string))
//esDataId := uuid.NewV4().String()
- peraction := PerVideoPicture{
+ peraction := PerVideoPicture{LinkInfo{
msg.Push.PushId,
msg.Cid,
msg.Push.Cam.Addr,
@@ -439,6 +416,7 @@
false,
nil,
targetInfos,
+ },
linkTag,
linkTagInfos,
}
@@ -575,7 +553,7 @@
return
}
//esDataId := uuid.NewV4().String()
- peraction := PerVideoPicture{
+ peraction := PerVideoPicture{LinkInfo{
msg.Push.PushId,
msg.Cid,
msg.Push.Cam.Addr,
@@ -601,6 +579,7 @@
false,
nil,
targetInfos,
+ },
linkTag,
linkTagInfos,
}
diff --git a/labelFilter/req.go b/labelFilter/req.go
index f97352f..c6badd2 100644
--- a/labelFilter/req.go
+++ b/labelFilter/req.go
@@ -90,60 +90,43 @@
}
errSize := sock.SetOption(mangos.OptionMaxRecvSize,30*1024*1024)
if errSize != nil {
- logger.Error("浼犺緭鐨勬暟鎹秴杩囧ぇ灏忛檺鍒�")
+ _ = logger.Error("浼犺緭鐨勬暟鎹秴杩囧ぇ灏忛檺鍒�")
return
}
errTimeOut := sock.SetOption(mangos.OptionRecvDeadline,time.Millisecond * 1500)
if errTimeOut != nil {
- logger.Error("鎺ユ敹鍝嶅簲瓒呮椂")
+ _ = logger.Error("鎺ユ敹鍝嶅簲瓒呮椂")
return
}
errTimeOut1 := sock.SetOption(mangos.OptionSendDeadline,time.Millisecond * 1500)
if errTimeOut1 != nil {
- logger.Error("鍙戦�佽秴鏃�")
+ _ = logger.Error("鍙戦�佽秴鏃�")
return
}
errWrite := sock.SetOption(mangos.OptionWriteQLen,5)
if errWrite != nil {
- logger.Error("璁剧疆浼犺緭缂撳瓨澶у皬澶辫触")
+ _ = logger.Error("璁剧疆浼犺緭缂撳瓨澶у皬澶辫触")
return
}
errRead := sock.SetOption(mangos.OptionReadQLen,5)
if errRead != nil {
- logger.Error("璁剧疆浼犺緭缂撳瓨澶у皬澶辫触")
+ _ = logger.Error("璁剧疆浼犺緭缂撳瓨澶у皬澶辫触")
return
}
sock.AddTransport(tcp.NewTransport())
if err = sock.Dial("tcp://"+url); err != nil {
- logger.Error("璇锋眰socket鎷ㄥ彿澶辫触: ", err.Error())
+ _ = logger.Error("璇锋眰socket鎷ㄥ彿澶辫触: ", err.Error())
}
logger.Info("搴忓垪鍖栨暟鎹�")
- //for v := range pool{
- // logger.Info("鏃犻檺寰幆",v.Cid)
- //}
- //var ch chan *structure.ResultMsg
- //for _, v := range urlChans {
- // if v.url == url{
- // ch = v.ch
- // }
- //}
- //logger.Info("chan淇℃伅锛�",urlPool[url])
for {
select {
// case <-ctx.Done():
// return
case data := <- urlPool[url]:
- //logger.Info("鎺ユ敹鍒版暟鎹�",data.Cid)
- //bytes,err1 := proto.Marshal(data)
+
go func(data []byte) {
- //logger.Info("鏁版嵁闀垮害涓猴細",len(data))
- //if err1 != nil {
- // logger.Info("搴忓垪鍖栧け璐ワ細",err1)
- //}
start := time.Now()
- //logger.Debug("groutine"+url+"鎺ㄩ�佹暟鎹�")
- //bytes := []byte("ndfasojdfaidsos")
if err = sock.Send(data); err != nil {
Die("groutine"+url+"鎺ㄩ�乻ocket鍙戦�佹暟鎹け璐�: ", err.Error())
}
@@ -156,7 +139,7 @@
}
}(data)
default:
-
+ time.Sleep(time.Second)
}
}
sock.Close()
diff --git a/logger/log.xml b/logger/log.xml
index 489baf0..af8a494 100644
--- a/logger/log.xml
+++ b/logger/log.xml
@@ -22,8 +22,8 @@
Recommended: "[%D %T] [%L] (%S) %M"
-->
<property name="format">[%D %T] [%L] (%S) %M</property>
- <property name="rotate">false</property> <!-- true enables log rotation, otherwise append -->
- <property name="maxsize">600M</property> <!-- \d+[KMG]? Suffixes are in terms of 2**10 -->
+ <property name="rotate">true</property> <!-- true enables log rotation, otherwise append -->
+ <property name="maxsize">800M</property> <!-- \d+[KMG]? Suffixes are in terms of 2**10 -->
<property name="maxlines">10K</property> <!-- \d+[KMG]? Suffixes are in terms of thousands -->
<property name="daily">true</property> <!-- Automatically rotates when a log message is written after midnight -->
</filter>
diff --git a/main.go b/main.go
index f8a44a5..11dbbb4 100644
--- a/main.go
+++ b/main.go
@@ -1,23 +1,25 @@
package main
import (
- "basic.com/dbapi.git"
- "basic.com/pubsub/protomsg.git"
- "basic.com/valib/deliver.git"
+
+ "flag"
+ "fmt"
+ "sync"
"net/http"
_ "net/http/pprof"
"plugin"
+
+ //"github.com/spf13/viper"
+ logger "github.com/alecthomas/log4go"
+ "github.com/panjf2000/ants/v2"
+
+ "basic.com/pubsub/protomsg.git"
+ "basic.com/valib/deliver.git"
"ruleprocess/insertdata"
"ruleprocess/labelFilter"
"ruleprocess/structure"
- //"basic.com/valib/logger.git"
- "flag"
- "fmt"
- //"github.com/spf13/viper"
- logger "github.com/alecthomas/log4go"
"ruleprocess/cache"
"ruleprocess/ruleserver"
- "sync"
)
var dbIp = flag.String("dbIp", "127.0.0.1", "dbserver ip")
@@ -47,6 +49,7 @@
}
func main() {
//fmt.Println("缂撳瓨鍒濆鍖栧畬鎴�",<- initchan)//dbserver鍒濆鍖栧畬姣�
+ defer ants.Release()
go func() {
http.ListenAndServe("0.0.0.0:8899",nil)
}()
@@ -54,17 +57,17 @@
wg := sync.WaitGroup{}
wg.Add(3)
- dbapi.Init(*dbIp, *dbPort)
go cache.Init(initchan, *dbIp, *surveyPort, *pubPort)
logger.Info("cache init completed!!!", <-initchan) //dbserver鍒濆鍖栧畬姣�
ruleserver.Init()
labelFilter.Init()
+
go ruleserver.TimeTicker()
go ruleserver.StartServer()
- //timeEle := ruleserver.TimeElement{N: 300, InitN: 300}
- //ruleserver.TimeEleList["ruleprocess"] = &timeEle
+
nReciever("ipc:///tmp/sdk-2-rules-process.ipc", deliver.PushPull, 1)
wg.Wait()
+
}
func nReciever(url string, m deliver.Mode, count int) {
c := deliver.NewServer(m, url)
@@ -72,49 +75,39 @@
}
func nRecvImpl(c deliver.Deliver, index int) {
-
var msg []byte
+ //var wg1 sync.WaitGroup
+ //p,_ := ants.NewPool(100)
+ //syncCalculateSum := func() {
+ // Task(msg)
+ // wg1.Done()
+ //}
+ //wg1.Wait()
var err error
- //msgChan := make(chan []byte,100)
for {
- select {
- // case <-ctx.Done():
- // return
- default:
- msg, err = c.Recv()
- //msgChan <- msg
- if err != nil {
- //logger.Info("recv error : ", err)
- fmt.Println("recv error : ", err)
- continue
- } else {
-
- //go func(msg []byte) {
- //logger.Debug("褰撳墠鏃堕棿鎴筹細", time.Now().Unix())
- //logger.Warn(time.Now().Format("2006-01-02 15:04:05"))
- arg := structure.SdkDatas{}
- //paramFormat(msg, &arg)
- //start := time.Now()
- m := CallParamFormat(msg, &arg)
- // 杩涜瑙勫垯澶勭悊鍒ゆ柇(鎵撲笂瑙勫垯鐨勬爣绛�)
- ruleserver.Judge(&arg, &m) // 鎶妔dkMessage浼犺繘鍘伙紝鏂逛究缂撳瓨鏁版嵁鏃舵嫾鍑轰竴涓猺esultMag
- // 鎶奱rg閲岀殑鎵撶殑鏍囩鎷垮嚭鏉ョ粰m鍐嶅皝瑁呬竴灞�
- resultMsg := structure.ResultMsg{SdkMessage: &m, RuleResult: arg.RuleResult}
- ruleserver.GetAttachInfo(resultMsg.SdkMessage)
- //ruleEnd := time.Since(start)
- //logger.Debug("瑙勫垯鍒ゆ柇瀹屾墍鐢ㄦ椂闂达細", ruleEnd)
- // 灏嗘墦瀹屾爣绛剧殑鏁版嵁鎻掑叆鍒癊S
- insertdata.InsertToEs(resultMsg)
- //esEnd := time.Since(start)
- //logger.Debug("鎻掑叆瀹孍s鎵�鐢ㄦ椂闂达細", esEnd)
- //浜嬩欢鎺ㄩ��
- labelFilter.PushSomthing(resultMsg)
- //}(msg)
- }
+ msg, err = c.Recv()
+ if err == nil {
+ //wg1.Add(1)
+ //_ = p.Submit(syncCalculateSum)
+ Task(msg)
}
}
}
+func Task (msg []byte) {
+ arg := structure.SdkDatas{}
+ //start := time.Now()
+ m := CallParamFormat(msg, &arg)
+ // 杩涜瑙勫垯澶勭悊鍒ゆ柇(鎵撲笂瑙勫垯鐨勬爣绛�)
+ ruleserver.Judge(&arg, &m) // 鎶妔dkMessage浼犺繘鍘伙紝鏂逛究缂撳瓨鏁版嵁鏃舵嫾鍑轰竴涓猺esultMag
+ // 鎶奱rg閲岀殑鎵撶殑鏍囩鎷垮嚭鏉ョ粰m鍐嶅皝瑁呬竴灞�
+ resultMsg := structure.ResultMsg{SdkMessage: &m, RuleResult: arg.RuleResult}
+ ruleserver.GetAttachInfo(resultMsg.SdkMessage)
+ // 灏嗘墦瀹屾爣绛剧殑鏁版嵁鎻掑叆鍒癊S
+ insertdata.InsertToEs(resultMsg)
+ //浜嬩欢鎺ㄩ��
+ labelFilter.PushSomthing(resultMsg)
+}
func CallParamFormat(msg []byte, args *structure.SdkDatas) protomsg.SdkMessage{
//logger.Info("鍛煎彨涓棿浠舵牸寮忓寲鏁版嵁")
p,err := plugin.Open("./algorithm/middleware.so")
@@ -129,4 +122,3 @@
return mess
}
-// 5鍒嗛挓鏀朵笉鍒版秷鎭潃姝昏嚜宸遍噸鍚�
diff --git a/ruleserver/readyDataForRule.go b/ruleserver/readyDataForRule.go
index 46420b7..bdd79c4 100644
--- a/ruleserver/readyDataForRule.go
+++ b/ruleserver/readyDataForRule.go
@@ -3,12 +3,11 @@
import (
"basic.com/dbapi.git"
"basic.com/pubsub/protomsg.git"
- logger "github.com/alecthomas/log4go"
"encoding/json"
"errors"
"fmt"
+ logger "github.com/alecthomas/log4go"
"github.com/golang/protobuf/proto"
- uuid "github.com/satori/go.uuid"
"math"
"nanomsg.org/go-mangos"
"nanomsg.org/go-mangos/protocol/req"
@@ -229,48 +228,48 @@
}
// 璁$畻鍖哄煙鍐呯殑鐩爣鏁伴噺浠ュ強灏嗙浉浼煎害銆佸崰姣斻�佸昂瀵哥瓑鎵撳寘
-func CountAreaObjs(a *structure.AreaMap,arg *structure.SdkData) {
-
- a.TargetNum = 0
- threshold := 80.0 // 鐩镐技搴�
- intersectionper := 20.0 // 鍗犳瘮
- size := 0.0 // 灏哄
-
- areaPoints := Json2points(a.AreaJson)
- logger.Info("鐪嬬湅鍥剧墖鐨剋idth鍜宧eight:",arg.ImageWidth,arg.ImageHeight)
- widthScale := float64(arg.ImageWidth) / 960
- heigthScale := float64(arg.ImageHeight) / 540
- for _, obj := range arg.Photo {
- //logger.Info("------------------鐪嬬湅sdkData:", arg.SdkName, "鐨凱hoto鏁版嵁----------------", obj, "----椤轰究鐪嬬湅鍗犳瘮-----锛�", PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale))
- if obj.Score >= threshold && float64(obj.Rects.Width*obj.Rects.Height) >= size && PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale) >= intersectionper {
- // 杩欐瑕佸榻愯〃杈惧紡閲屾墍闇�瑕佺殑鎵�鏈夊弬鏁�
- a.TargetNum++
- uuid := uuid.NewV4().String()
- arg1 := structure.Arg{obj.Id,uuid,obj.Score, PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), a.AreaJson,obj.Type, obj.Rects, obj.Car,obj.Feature, obj.ThftRes, []*structure.BaseInfo{},"",structure.ResultMsg{}}
- //logger.Println("鏀捐繘鍘荤殑arg锛�-------", arg1)
- a.Args = append(a.Args, &arg1)
- a.FilterData = append(a.FilterData, &arg1)
- }
- }
- //logger.Info("鍖哄煙鏄細",areaPoints,"鍖哄煙鍐呯洰鏍囨暟閲忎负锛�",a.TargetNum,"---",len(a.FilterData))
- a.Time = time.Unix(time.Now().Unix(), 0).String()[11:16]
- //logger.Println("--------------------鐪嬬湅鍖哄煙鏁版嵁锛�",*a)
-}
-
-// 鎶妔dk浠庢暟鎹抚涓婃彁鍙栫殑鎸夌収鍖哄煙鍒嗙被褰掔疆
-func SdkDataFormat(cameraId string, arg *structure.SdkData, cameraPolygons []protomsg.CameraPolygon) {
- logger.Info("==================================鏈瑂dkData涓В鍑烘潵鐨勭洰鏍囨暟鎹�=======================================")
- for _, photo := range arg.Photo {
- logger.Info("--------瑙f瀽鍑烘潵鐨勬暟鎹�---", cameraId, arg.IpcId, photo.Rects, photo.Score)
- }
- for _, polygon := range cameraPolygons {
- //logger.Println("++++++鍦ㄨ繖鍎跨湅涓�涓嬪尯鍩熷晩:", polygon.Polygon)
- areaMap := structure.AreaMap{CameraId: cameraId, AreaId: polygon.Id, AreaJson: polygon.Polygon, TriggerLine: polygon.TriggerLine, DirectionLine: polygon.DirectionLine}
- // 涓烘瘡涓憚鍍忔満鍖哄煙濉厖鏁版嵁
- CountAreaObjs(&areaMap,arg)
- arg.AreaMapList = append(arg.AreaMapList, &areaMap)
- }
-}
+//func CountAreaObjs(a *structure.AreaMap,arg *structure.SdkData) {
+//
+// a.TargetNum = 0
+// threshold := 80.0 // 鐩镐技搴�
+// intersectionper := 20.0 // 鍗犳瘮
+// size := 0.0 // 灏哄
+//
+// areaPoints := Json2points(a.AreaJson)
+// logger.Info("鐪嬬湅鍥剧墖鐨剋idth鍜宧eight:",arg.ImageWidth,arg.ImageHeight)
+// widthScale := float64(arg.ImageWidth) / 960
+// heigthScale := float64(arg.ImageHeight) / 540
+// for _, obj := range arg.Photo {
+// //logger.Info("------------------鐪嬬湅sdkData:", arg.SdkName, "鐨凱hoto鏁版嵁----------------", obj, "----椤轰究鐪嬬湅鍗犳瘮-----锛�", PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale))
+// if obj.Score >= threshold && float64(obj.Rects.Width*obj.Rects.Height) >= size && PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale) >= intersectionper {
+// // 杩欐瑕佸榻愯〃杈惧紡閲屾墍闇�瑕佺殑鎵�鏈夊弬鏁�
+// a.TargetNum++
+// uuid := uuid.NewV4().String()
+// arg1 := structure.Arg{obj.Id,uuid,obj.Score, PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), a.AreaJson,obj.Type, obj.Rects, obj.Car,obj.Feature, obj.ThftRes, []*structure.BaseInfo{},"",structure.ResultMsg{}}
+// //logger.Println("鏀捐繘鍘荤殑arg锛�-------", arg1)
+// a.Args = append(a.Args, &arg1)
+// a.FilterData = append(a.FilterData, &arg1)
+// }
+// }
+// //logger.Info("鍖哄煙鏄細",areaPoints,"鍖哄煙鍐呯洰鏍囨暟閲忎负锛�",a.TargetNum,"---",len(a.FilterData))
+// a.Time = time.Unix(time.Now().Unix(), 0).String()[11:16]
+// //logger.Println("--------------------鐪嬬湅鍖哄煙鏁版嵁锛�",*a)
+//}
+//
+//// 鎶妔dk浠庢暟鎹抚涓婃彁鍙栫殑鎸夌収鍖哄煙鍒嗙被褰掔疆
+//func SdkDataFormat(cameraId string, arg *structure.SdkData, cameraPolygons []protomsg.CameraPolygon) {
+// logger.Info("==================================鏈瑂dkData涓В鍑烘潵鐨勭洰鏍囨暟鎹�=======================================")
+// for _, photo := range arg.Photo {
+// logger.Info("--------瑙f瀽鍑烘潵鐨勬暟鎹�---", cameraId, arg.IpcId, photo.Rects, photo.Score)
+// }
+// for _, polygon := range cameraPolygons {
+// //logger.Println("++++++鍦ㄨ繖鍎跨湅涓�涓嬪尯鍩熷晩:", polygon.Polygon)
+// areaMap := structure.AreaMap{CameraId: cameraId, AreaId: polygon.Id, AreaJson: polygon.Polygon, TriggerLine: polygon.TriggerLine, DirectionLine: polygon.DirectionLine}
+// // 涓烘瘡涓憚鍍忔満鍖哄煙濉厖鏁版嵁
+// CountAreaObjs(&areaMap,arg)
+// arg.AreaMapList = append(arg.AreaMapList, &areaMap)
+// }
+//}
func Push(data *protomsg.CompareArgs,sock mangos.Socket) []byte{
//var sock mangos.Socket
@@ -282,12 +281,12 @@
//}
errSize := sock.SetOption(mangos.OptionMaxRecvSize,5*1024*1024)
if errSize != nil {
- logger.Error("Failed set MaxRecvSize: %v", err)
+ _ = logger.Error("Failed set MaxRecvSize: %v", err)
return nil
}
serverIP, _ := GetLocalIP()
if err = sock.Dial("tcp://"+serverIP+":4010"); err != nil {
- logger.Error("璇锋眰socket鎷ㄥ彿澶辫触: %s", err.Error())
+ _ = logger.Error("璇锋眰socket鎷ㄥ彿澶辫触: %s", err.Error())
}
//sock.AddTransport(ipc.NewTransport())
sock.AddTransport(tcp.NewTransport())
@@ -301,11 +300,11 @@
logger.Debug("鎺ㄩ�佹暟鎹�")
//bytes := []byte("ndfasojdfaidsos")
if err = sock.Send(bytes); err != nil {
- logger.Error("鎺ㄩ�乻ocket鍙戦�佹暟鎹け璐�: %s", err.Error())
+ _ = logger.Error("鎺ㄩ�乻ocket鍙戦�佹暟鎹け璐�: %s", err.Error())
//os.Exit(1)
}
if msg, err = sock.Recv(); err != nil {
- logger.Error("鎺ユ敹鍝嶅簲澶辫触: %s", err.Error())
+ _ = logger.Error("鎺ユ敹鍝嶅簲澶辫触: %s", err.Error())
//os.Exit(1)
}
logger.Debug("鏁版嵁鎺ㄩ�佹垚鍔燂紒鏀跺埌鍝嶅簲,鏁版嵁闀垮害涓猴細",len(msg))
@@ -318,17 +317,17 @@
var msg []byte
if sock, err = req.NewSocket(); err != nil {
- logger.Error("鍒涘缓璇锋眰socket澶辫触: %s", err.Error())
+ _ = logger.Error("鍒涘缓璇锋眰socket澶辫触: %s", err.Error())
}
errSize := sock.SetOption(mangos.OptionMaxRecvSize,5*1024*1024)
if errSize != nil {
- logger.Error("Failed set MaxRecvSize: %v", err)
+ _ = logger.Error("Failed set MaxRecvSize: %v", err)
}
//sock.AddTransport(ipc.NewTransport())
sock.AddTransport(tcp.NewTransport())
serverIP, _ := GetLocalIP()
if err = sock.Dial("tcp://"+serverIP+":4010"); err != nil {
- logger.Error("璇锋眰socket鎷ㄥ彿澶辫触: %s", err.Error())
+ _ = logger.Error("璇锋眰socket鎷ㄥ彿澶辫触: %s", err.Error())
}
logger.Info("搴忓垪鍖栨暟鎹�")
@@ -344,19 +343,16 @@
logger.Info("搴忓垪鍖栧け璐ワ細",err1)
}
logger.Debug("鎺ㄩ�佹暟鎹�")
- //bytes := []byte("ndfasojdfaidsos")
if err = sock.Send(bytes); err != nil {
- logger.Error("鎺ㄩ�乻ocket鍙戦�佹暟鎹け璐�: %s", err.Error())
- //os.Exit(1)
+ _ = logger.Error("鎺ㄩ�乻ocket鍙戦�佹暟鎹け璐�: %s", err.Error())
}
if msg, err = sock.Recv(); err != nil {
- logger.Error("鎺ユ敹鍝嶅簲澶辫触: %s", err.Error())
- //os.Exit(1)
+ _ = logger.Error("鎺ユ敹鍝嶅簲澶辫触: %s", err.Error())
}
logger.Debug("鏁版嵁鎺ㄩ�佹垚鍔燂紒鏀跺埌鍝嶅簲,鏁版嵁闀垮害涓猴細",len(msg))
receiver <- msg
default:
-
+ time.Sleep(time.Second)
}
}
}
diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index f200c2b..8688dab 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -196,6 +196,18 @@
}
}
}
+ // 璺熻釜鐩爣缁熻
+ personTrack := []*structure.Arg{}
+ for _, sdkData := range args.Sdkdata {
+ //logger.Info("鐪嬬湅sdkNames",sdkNames)
+ if sdkData.IpcId == "璺熻釜鐨刬pcId" { // 鎶婅窡韪〉闈㈢殑鍚勪釜鐩爣鐨勫潗鏍囪緭鍑�
+ for _, areaMap := range sdkData.AreaMapList {
+ if areaMap.IsEffective {
+ personTrack = append(personTrack, putFaceToResult(areaMap, personTrack)...)
+ }
+ }
+ }
+ }
var islink bool
if groupRule.SetType == "linkTask" {
islink = true
@@ -224,6 +236,11 @@
//logger.Info("-------------------杞︾墝缁撴灉鏍囩", len(args.RuleResult["plate"].([]structure.Result)))
//labelTypes = append(labelTypes,2)
}
+ if len(personTrack) > 0 {
+ args.RuleResult["track"] = append(args.RuleResult["track"].([]structure.Result), structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, personTrack, polygonId, islink,label})
+ //logger.Info("-------------------杞︾墝缁撴灉鏍囩", len(args.RuleResult["plate"].([]structure.Result)))
+ //labelTypes = append(labelTypes,2)
+ }
// 缁欐寔缁椂闂寸殑绗竴寮犺祴浜堢紦瀛樻暟鎹紙閬嶅巻澶嶅埗锛�
//if cacheId != "" { // 鏈夎繖甯ф暟鎹殑缂撳瓨
// tempMap := make(map[string]interface{})
diff --git a/ruleserver/server.go b/ruleserver/server.go
index b1fc03f..0ee0e48 100644
--- a/ruleserver/server.go
+++ b/ruleserver/server.go
@@ -43,6 +43,8 @@
select {
case dbMsg := <-videotapChan:
publishMessage(dbMsg)
+ default:
+ time.Sleep(time.Second)
}
}
}
diff --git a/structure/rule.go b/structure/rule.go
index 8ddf5fe..99604a4 100644
--- a/structure/rule.go
+++ b/structure/rule.go
@@ -5,23 +5,27 @@
)
// 姣忎釜鐩爣鐨勫弬鏁帮細鐩镐技搴︼紝鍗犳瘮锛屽昂瀵�
-type Arg struct {
- Id string
- Uuid string
- Score float64 // 鍖哄煙鍐呯殑鐩爣鐨勭浉浼煎害
- Proportion float64 // 鍖哄煙鍐呯殑鐩爣鐨勫崰姣�
- Size float64 // 鍖哄煙鍐呯殑鐩爣鐨勫昂瀵�
- AreaJson string // 鎵�灞炲尯鍩�
- Type string // 璁拌浇鏁版嵁绫诲瀷
- Location Rect // 璁颁笅姣忎釜鐩爣鐨勪綅缃弬鏁帮紝鏈�鍚庣粰缁撴灉瑁呴厤鐩爣鏁版嵁鐨勬椂鍊欑敤鐨勫埌
- Car *protomsg.PlateIDVehicle // 杞﹁締鍙傛暟
- Feature []byte
- ThftRes protomsg.ThftResult
- Liker []*BaseInfo
- TimeLable string
- CacheData ResultMsg
+type SourceArg struct {
+ Id string
+ Uuid string
+ Score float64 // 鍖哄煙鍐呯殑鐩爣鐨勭浉浼煎害
+ Proportion float64 // 鍖哄煙鍐呯殑鐩爣鐨勫崰姣�
+ Size float64 // 鍖哄煙鍐呯殑鐩爣鐨勫昂瀵�
+ AreaJson string // 鎵�灞炲尯鍩�
+ Type string // 璁拌浇鏁版嵁绫诲瀷
+ Location Rect // 璁颁笅姣忎釜鐩爣鐨勪綅缃弬鏁帮紝鏈�鍚庣粰缁撴灉瑁呴厤鐩爣鏁版嵁鐨勬椂鍊欑敤鐨勫埌
+ Car *protomsg.PlateIDVehicle // 杞﹁締鍙傛暟
+ Feature []byte
+ ThftRes protomsg.ThftResult
+ Liker []*BaseInfo
+ TimeLable string
+ CacheData ResultMsg
}
+type Arg struct {
+ SourceArg
+ AttachArg SourceArg
+}
// 姣忎釜鍖哄煙鍐呯殑鍥剧墖鏁版嵁闆嗗悎
type AreaMap struct {
CameraId string
@@ -36,7 +40,7 @@
TargetNum int // 鍖哄煙鍐呯洰鏍囨暟閲�
Args []*Arg // 鍖哄煙鍐呯洰鏍囬泦鍚�
FilterData []*Arg // 杩囨护鍚庡尯鍩熷唴鐩爣闆嗗悎
- AlarmObj []*Arg // 鍖哄煙鍐呮渶鍚庢弧瓒宠鍒欑殑鐩爣
+ AlarmObj []*Arg // 鍖哄煙鍐呮渶鍚庢弧瓒宠鍒欑殑鐩爣
Time string // 褰撳墠鏃堕棿锛堢敤浠ュ尮閰嶆椂闂磋鍒欙級
IsEffective bool // 瑙勫垯涓槸鍚︾敤鍒颁簡姝ゅ尯鍩�
}
@@ -46,10 +50,10 @@
Id string
Rects Rect // 鐭╁舰鍖哄煙鍙傛暟
Score float64 // 鐩镐技搴﹀緱鍒嗭紙鏈夊澶х▼搴﹀儚涓�涓洰鏍囥�備汉鑴革紝浜轰綋鎴栬溅绛夌瓑锛�
- Type string // 璁拌浇鏁版嵁绫诲瀷
+ Type string // 璁拌浇鏁版嵁绫诲瀷
ThftRes protomsg.ThftResult
Feature []byte
- Car *protomsg.PlateIDVehicle
+ Car *protomsg.PlateIDVehicle
}
// 姣忎釜绠楁硶瀵逛簬褰撳墠甯х敾闈㈣嚜宸辨彁鍙栫殑鏁版嵁
@@ -85,7 +89,7 @@
AlarmLevel int32 // 鎶ヨ绛夌骇
RuleText string // 鏂囧瓧鐗堣鍒欑粍
//Location []TargetInfo // 鐩爣鐨勫潗鏍�
- AlarmObj []*Arg // 鎶ヨ鐨勭洰鏍囨暟鎹� 鎵撶畻搴熸帀涓婇潰鐨凩ocation
+ AlarmObj []*Arg // 鎶ヨ鐨勭洰鏍囨暟鎹� 鎵撶畻搴熸帀涓婇潰鐨凩ocation
AlarmPolygon string // 瑙﹀彂鐨勬姤璀︽
IsLink bool // 鏄惁鏄仈鍔ㄤ换鍔�
Others
@@ -126,8 +130,5 @@
TargetPicUrl string `json:"targetPicUrl"`
MonitorLevel string `json:"monitorLevel"`
Content string `json:"content"`
- DbLabel string `json:"labels"`
- //PhoneNum string `json:"phoneNum"`
- //Sex string `json:"sex"`
- //IdCard string `json:"idCard"`
+ DbLabel string `json:"labels"`
}
--
Gitblit v1.8.0