From bf32a74cbb28405eb116495eb2046880ecfceb66 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期五, 06 十二月 2019 18:03:33 +0800
Subject: [PATCH] fix 追踪bug
---
algorithm/personTrack/personTrack.go | 49 ++--
go.sum | 8
insertdata/insertDataToEs.go | 279 +++++++++++++-----------
algorithm/middleware/readyData.go | 68 ++++-
go.mod | 9
ruleserver/ruleToformula.go | 212 +++++++-----------
structure/rule.go | 8
7 files changed, 333 insertions(+), 300 deletions(-)
diff --git a/algorithm/middleware/readyData.go b/algorithm/middleware/readyData.go
index 8b367f8..a1e0662 100644
--- a/algorithm/middleware/readyData.go
+++ b/algorithm/middleware/readyData.go
@@ -74,9 +74,6 @@
return rect
}
-
-
-
// 灏嗗閮ㄤ紶杩涙潵鐨剆dk鏁版嵁鍖呰В鎴� SdkDatas
func ParamFormat(msg []byte, args *structure.SdkDatas) protomsg.SdkMessage {
defer func() {
@@ -113,17 +110,13 @@
extractFace(args,m,sdkinfo,i)
case "Plate":
extractCar(args,m,sdkinfo,i)
- case "Track":
+ case "HumanTrack":
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{}
@@ -142,7 +135,7 @@
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}
+ photoMap := structure.PhotoMap{structure.SourcePhoto{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},nil}
arg.Photo = append(arg.Photo, photoMap)
}
args.Sdkdata = append(args.Sdkdata, &arg)
@@ -169,7 +162,7 @@
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))}
+ photoMap := structure.PhotoMap{structure.SourcePhoto{Rects: rectFormat(info.RcObj), Score: float64(info.Prob) * 100, Type: "yolo",Id:strconv.Itoa(int(info.ObjID))},nil}
arg.Photo = append(arg.Photo, photoMap)
yoloNum++
}
@@ -200,7 +193,7 @@
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}
+ photoMap := structure.PhotoMap{structure.SourcePhoto{Id: info.License,Score: float64(info.FvdConf)*100,Rects: rectFormat(info.RcCarLocation), Type: "plate", Car:info},nil}
arg.Photo = append(arg.Photo, photoMap)
}
}
@@ -219,22 +212,57 @@
arg.ImageWidth = int(i.Width)
arg.ImageHeight = int(i.Height)
if len(sdkinfo.Sdkdata) > 1 {
- plateIDResult := protomsg.PlateIDResult {}
- err := proto.Unmarshal(sdkinfo.Sdkdata, &plateIDResult )
+
+ Track := protomsg.HumanTrackResult {}
+ err := proto.Unmarshal(sdkinfo.Sdkdata, &Track)
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)
- }
+ for _, info := range Track.Result {
+ logger.Info("鎺ユ敹璺熻釜鏁版嵁锛�",info.Id,info.Confidence)
+ photoMap := structure.PhotoMap{structure.SourcePhoto{Id: strconv.Itoa(int(info.Id)),Score: float64(info.Confidence)*100,Rects: rectFormat(info.RcHuman), Type: "track"},nil}
+ FacePush2Body(&photoMap,m.Tasklab.Sdkinfos)
+ logger.Info("缁勮鍚庣殑璺熻釜鏁版嵁锛�",photoMap)
+ arg.Photo = append(arg.Photo, photoMap)
}
args.Sdkdata = append(args.Sdkdata, &arg)
} else {
return
}
+}
+
+// 鎶婁汉鑴告斁杩涘搴旂殑浜轰綋
+func FacePush2Body (photomap *structure.PhotoMap,sdkInfos []*protomsg.SdkmsgWithTask) {
+ for _,sdkinfo := range sdkInfos {
+ if sdkinfo.Sdktype == "FaceDetect" {
+ 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 {
+ percent := ruleserver.PgsInterPercent(Rect2Point(photomap.Rects),rectFormat(info.Pos.RcFace), 1, 1)
+ if percent > 99 {
+ photomap.AttachObj = structure.SourcePhoto{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}
+ }
+ }
+ }
+ }
+}
+
+func Rect2Point(rect structure.Rect) []structure.Point{
+ // 鎸夐�嗘椂閽堣浆鍖�
+ points := []structure.Point{}
+ leftTop := structure.Point{rect.X,rect.Y}
+ points = append(points,leftTop)
+ leftBottom := structure.Point{rect.X,rect.Y+rect.Height}
+ points = append(points,leftBottom)
+ rightBottom := structure.Point{rect.X+rect.Width,rect.Y+rect.Height}
+ points = append(points,rightBottom)
+ rightTop := structure.Point{rect.X+rect.Width,rect.Y}
+ points = append(points,rightTop)
+ return points
}
\ No newline at end of file
diff --git a/algorithm/personTrack/personTrack.go b/algorithm/personTrack/personTrack.go
index 3961c0e..b6be24c 100644
--- a/algorithm/personTrack/personTrack.go
+++ b/algorithm/personTrack/personTrack.go
@@ -3,8 +3,10 @@
import (
"encoding/json"
"errors"
+ uuid "github.com/satori/go.uuid"
"net"
"strconv"
+ "time"
"nanomsg.org/go-mangos"
"nanomsg.org/go-mangos/protocol/req"
@@ -94,7 +96,8 @@
// 缁欑洰鏍囧~鍏卨iker
func fillLiker(compareThreshold float32,arg *structure.Arg,am *structure.AreaMap) {
trackArg := make(map[string]interface{})
- trackArg["esId"] = ""
+ esId := uuid.NewV4().String()
+ trackArg["esId"] = esId
trackArg["cameraId"] = am.CameraId
trackArg["bodyFeature"] = arg.Feature
trackArg["faceFeature"] = arg.AttachArg.Feature
@@ -102,10 +105,15 @@
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)
+ dataId := getCompareMsg(b)
+ if esId == dataId { // 璇存槑娌℃瘮鍒扮浉浼肩殑浜�
+ logger.Info("娌℃瘮鍒颁汉")
+ arg.Uuid = dataId
+ } else {
+ logger.Info("姣斿鍑烘潵鐨刣ataId:",dataId)
+ base := structure.BaseInfo{TargetId:dataId}
+ arg.Liker = append(arg.Liker, &base)
+ }
}
func track (rule *protomsg.Rule,am *structure.AreaMap) structure.LittleRuleResult{
@@ -113,18 +121,20 @@
if th,err := strconv.ParseFloat(rule.SdkArgValue,32); err == nil {
threshold = float32(th)
}
- for i, arg := range am.FilterData {
+ for _, 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(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}
- }
+ //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}
+ //}
+ // 鏃犺鏈夋病鏈夌浉浼艰�呴兘瑕佽繑鍥瀟rue
+ return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
}
func Push(){
@@ -148,13 +158,8 @@
initFlag = true
for {
select {
- // case <-ctx.Done():
- // return
case data := <- sender:
-
- logger.Info("鏁版嵁闀垮害涓猴細",len(data))
-
- logger.Debug("鎺ㄩ�佹暟鎹�")
+ logger.Debug("鎺ㄩ�佹暟鎹�:",len(data))
if err = sock.Send(data); err != nil {
_ = logger.Error("鎺ㄩ�乻ocket鍙戦�佹暟鎹け璐�: %s", err.Error())
}
@@ -164,7 +169,7 @@
logger.Debug("鏁版嵁鎺ㄩ�佹垚鍔燂紒鏀跺埌鍝嶅簲,鏁版嵁闀垮害涓猴細",len(msg))
receiver <- string(msg)
default:
-
+ time.Sleep(time.Millisecond * 10)
}
}
}
diff --git a/go.mod b/go.mod
index 6d6f95a..3dba522 100644
--- a/go.mod
+++ b/go.mod
@@ -6,21 +6,22 @@
basic.com/dbapi.git v0.0.0-20191025084729-a04db890e7b5
basic.com/fileserver/WeedFSClient.git v0.0.0-20191105073656-98059e699477
basic.com/pubsub/cache.git v0.0.0-20190718093725-6a413e1d7d48
- basic.com/pubsub/protomsg.git v0.0.0-20191121033547-7af037c469a7
+ basic.com/pubsub/esutil.git v0.0.0-20191205065552-198b5ecaefce
+ basic.com/pubsub/protomsg.git v0.0.0-20191206064248-c404f7d36eb2
basic.com/valib/deliver.git v0.0.0-20190927081905-2d390df9ede3
basic.com/valib/gopherdiscovery.git v0.0.0-20190605034340-15d89d8b4e28
basic.com/valib/logger.git v0.0.0-20190928113028-4907b08c4159
basic.com/valib/shm.git v0.0.0-20190829074754-ad2e00879627 // indirect
github.com/Microsoft/go-winio v0.4.12 // indirect
github.com/ajg/form v1.5.1 // indirect
- github.com/alecthomas/log4go v0.0.0-20180109082532-d146e6b86faa // indirect
+ github.com/alecthomas/log4go v0.0.0-20180109082532-d146e6b86faa
github.com/go-yaml/yaml v2.1.0+incompatible
github.com/gogo/protobuf v1.2.1
github.com/golang/protobuf v1.3.1
github.com/jeanphorn/log4go v0.0.0-20190526082429-7dbb8deb9468 // indirect
- github.com/kirinlabs/HttpRequest v0.1.5 // indirect
+ github.com/kirinlabs/HttpRequest v0.1.5
github.com/knetic/govaluate v3.0.0+incompatible
- github.com/panjf2000/ants/v2 v2.2.2 // indirect
+ github.com/panjf2000/ants/v2 v2.2.2
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 565aa64..7056fa9 100644
--- a/go.sum
+++ b/go.sum
@@ -6,6 +6,8 @@
basic.com/fileserver/WeedFSClient.git v0.0.0-20191105073656-98059e699477/go.mod h1:oiXPn3wwwOi/Sbm6cDWpNWofoG5iV2Nb1V/DxLEAqYY=
basic.com/pubsub/cache.git v0.0.0-20190718093725-6a413e1d7d48 h1:BBA30Rgljn6MRieC4gUncETJDyna3ObyubTo9HEQ2M0=
basic.com/pubsub/cache.git v0.0.0-20190718093725-6a413e1d7d48/go.mod h1:gHLJZz2ee1cGL0X0ae69fs56bAxkDgEQwDhhXZJNUcY=
+basic.com/pubsub/esutil.git v0.0.0-20191205065552-198b5ecaefce h1:VBdSBX9HZJB93+CA5Vv7XU+laljn6d997KvLwZBg3A4=
+basic.com/pubsub/esutil.git v0.0.0-20191205065552-198b5ecaefce/go.mod h1:yIvppFPFGC61DOdm71ujnsxZBMFUu2yKjr5O43bMWCw=
basic.com/pubsub/protomsg.git v0.0.0-20190905061607-7b96dafe8f99 h1:YSmWZPp/mHoq+/L5d0iTsqjiCcVwZqEQRQAXxQFSbvY=
basic.com/pubsub/protomsg.git v0.0.0-20190905061607-7b96dafe8f99/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
basic.com/pubsub/protomsg.git v0.0.0-20191025080939-9b30ac3be52d h1:Lhny6vIq3GNjunE+r0ymLnpg+/n0lqwnsOAy6HbARfk=
@@ -20,6 +22,12 @@
basic.com/pubsub/protomsg.git v0.0.0-20191121023847-bd1d8f822f8f/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
basic.com/pubsub/protomsg.git v0.0.0-20191121033547-7af037c469a7 h1:JFN0eyyRZ2Ty/FMtoCGHDtEcJdQrIkpGfHcKk2N4IQs=
basic.com/pubsub/protomsg.git v0.0.0-20191121033547-7af037c469a7/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
+basic.com/pubsub/protomsg.git v0.0.0-20191206061611-4dd5374a4e31 h1:oz/P7JqMHNAOlXyyZ2WGWW6H1C3BnPdjsPa82BAfLsU=
+basic.com/pubsub/protomsg.git v0.0.0-20191206061611-4dd5374a4e31/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
+basic.com/pubsub/protomsg.git v0.0.0-20191206062708-331a33663565 h1:8Pkfz7XKj2mbV9ggqbmQ0pdQ6OLStPF549TUUPUmFZA=
+basic.com/pubsub/protomsg.git v0.0.0-20191206062708-331a33663565/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
+basic.com/pubsub/protomsg.git v0.0.0-20191206064248-c404f7d36eb2 h1:uDXeWCPB6ZuaK2a6CpYbs7attGB2fNudzEPRTP15se0=
+basic.com/pubsub/protomsg.git v0.0.0-20191206064248-c404f7d36eb2/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
basic.com/pubsub/sdkcompare.git v0.0.0-20190715013640-f536a4647d00 h1:sK+Tx7rvM9J2WnNIwrzMDjZSylWiKNfQO0prUBfKsDk=
basic.com/pubsub/sdkcompare.git v0.0.0-20190715013640-f536a4647d00/go.mod h1:8by33F9E1w17Pw/rDgJGJXAo122w0wDENG14hiMS+RE=
basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051 h1:9flC2o3kasaM2Y6I+mY+mxmve/pyAY/UzGQZLT3lFHM=
diff --git a/insertdata/insertDataToEs.go b/insertdata/insertDataToEs.go
index 0ca5793..f432036 100644
--- a/insertdata/insertDataToEs.go
+++ b/insertdata/insertDataToEs.go
@@ -15,12 +15,14 @@
"ruleprocess/cache"
"ruleprocess/structure"
"basic.com/pubsub/protomsg.git"
+ "basic.com/pubsub/esutil.git"
"ruleprocess/ruleserver"
"ruleprocess/util"
)
var weedfsUrl, videoPersonUrl, personAction string
-
+var serverIp string
+var serverPort string
type conf struct {
PhotoUrl string `yaml:"photoUrl"`
VideoPersons string `yaml:"videoPersons"`
@@ -105,7 +107,7 @@
func InsertToEs(msg structure.ResultMsg) {
defer func() {
if err := recover(); err != nil {
- logger.Error("es妯″潡鍎跨殑寮傚父鎹曡幏锛�", err)
+ _ = logger.Error("es妯″潡鍎跨殑寮傚父鎹曡幏锛�", err)
}
}()
localConfig1, err := cache.GetServerInfo()
@@ -114,122 +116,151 @@
}
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+"?refresh=true"
- InsertFace(msg)
- InsertYolo(msg)
- InsertTarget(msg)
+ serverIp = localConfig1.AlarmIp
+ serverPort = strconv.Itoa(int(localConfig1.AlarmPort))
+ for k,results := range msg.RuleResult {
+ if results != nil && len(results.([]structure.Result)) > 0{
+ switch k {
+ case "yolo":
+ InsertYolo(msg,k,results)
+ case "face":
+ InsertFace(msg,k,results)
+ case "plate":
+ InsertFace(msg,k,results)
+ case "track":
+ InsertFace(msg,k,results)
+ case "target":
+ InsertLastTarget(msg)
+ }
+ }
+ }
}
// 寰�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) || (msg.RuleResult["track"] != nil && len(msg.RuleResult["track"].([]structure.Result)) > 0) {
- for key, results := range msg.RuleResult {
- if key == "face" || key == "plate" || key == "track"{
- logger.Info("寰�ES鎻掍汉鑴告暟鎹�(鎴栬溅鐗屾暟鎹�)")
- faces := []*ObjAndRules{}
- faces = PutFace(faces, results.([]structure.Result))
- //logger.Info("鏁寸悊鍚庣殑鏁版嵁锛�",faces)
- if faces != nil {
- logger.Warn("face涓嶄负nil")
- var imgMaxUrl []string = []string{}
- var picTime string = ""
- for _, face := range faces {
- // 涓婁紶澶у浘
- // 瑙e帇缂╁苟涓婁紶鍥剧墖
- bdata, err := util.UnCompress(msg.Data)
- if err != nil {
- panic("瑙e帇缂╁浘鐗囨椂鍑虹幇閿欒")
- }
- alarmRules := []AlarmRule{}
- //logger.Info("寰幆姣忎竴涓洰鏍�")
- for _, faceResult := range face.rules {
- alarm := ChangeToString(faceResult.DefenceState, faceResult.AlarmLevel)
- alarmRules = append(alarmRules, AlarmRule{faceResult.RuleGroupId, alarm, faceResult.RuleText, faceResult.DefenceState, ""})
- }
- i := protomsg.Image{}
- err = proto.Unmarshal(bdata, &i)
- // 鍏堜紶灏忓浘锛屽啀浼犲ぇ鍥撅紝闃叉鑴镐笂鏈夌嚎
- bytes := util.SubImg(i, int(face.Location.X), int(face.Location.Y), int(face.Location.X+face.Location.Width), int(face.Location.Y+face.Location.Height),face.Type)
- resp, err := util.PostFormBufferData1(weedfsUrl, bytes, uuid.NewV4().String())
- if err != nil {
- logger.Error("涓婁紶灏忓浘鍑洪敊")
- }
- // 涓婁紶澶у浘
- if len(imgMaxUrl) == 0 {
- bigPhotoUrl := make(map[string]interface{})
- bigPhotoUrl, err = util.DrawPolygonOnImageForFace(msg.Cid, i, msg.RuleResult["face"].([]structure.Result), weedfsUrl)
- logger.Debug("========澶у浘璺緞锛�", bigPhotoUrl)
- imgMaxUrl = append(imgMaxUrl, bigPhotoUrl["fileUrl"].(string))
- picTime = i.Timestamp
- }
- lable, lableAttach := Feature2Jsonstr(*face)
- var target = new(Target)
- target.TargetId = face.Id
- target.TargetScore = face.Score
- target.TargetType = face.Type
- 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)
+func InsertFace(msg structure.ResultMsg,key string, results interface{}) {
+ logger.Info("寰�es鎻掑叆鎶撴媿鏁版嵁")
+ faces := []*ObjAndRules{}
+ faces = PutFace(faces, results.([]structure.Result))
+ //logger.Info("鏁寸悊鍚庣殑鏁版嵁锛�",faces)
+ if faces != nil {
+ _ = logger.Warn("face涓嶄负nil")
+ var imgMaxUrl []string = []string{}
+ var picTime string = ""
+ for _, face := range faces {
+ // 涓婁紶澶у浘
+ // 瑙e帇缂╁苟涓婁紶鍥剧墖
+ bdata, err := util.UnCompress(msg.Data)
+ if err != nil {
+ panic("瑙e帇缂╁浘鐗囨椂鍑虹幇閿欒")
+ }
+ alarmRules := []AlarmRule{}
+ //logger.Info("寰幆姣忎竴涓洰鏍�")
+ for _, faceResult := range face.rules {
+ alarm := ChangeToString(faceResult.DefenceState, faceResult.AlarmLevel)
+ alarmRules = append(alarmRules, AlarmRule{faceResult.RuleGroupId, alarm, faceResult.RuleText, faceResult.DefenceState, ""})
+ }
+ i := protomsg.Image{}
+ err = proto.Unmarshal(bdata, &i)
+ // 鍏堜紶灏忓浘锛屽啀浼犲ぇ鍥撅紝闃叉鑴镐笂鏈夌嚎
+ bytes := util.SubImg(i, int(face.Location.X), int(face.Location.Y), int(face.Location.X+face.Location.Width), int(face.Location.Y+face.Location.Height),face.Type)
+ resp, err := util.PostFormBufferData1(weedfsUrl, bytes, uuid.NewV4().String())
+ if err != nil {
+ _ = logger.Error("涓婁紶灏忓浘鍑洪敊")
+ }
+ // 涓婁紶澶у浘
+ if len(imgMaxUrl) == 0 {
+ bigPhotoUrl := make(map[string]interface{})
+ bigPhotoUrl, err = util.DrawPolygonOnImageForFace(msg.Cid, i, msg.RuleResult["face"].([]structure.Result), weedfsUrl)
+ logger.Debug("========澶у浘璺緞锛�", bigPhotoUrl)
+ imgMaxUrl = append(imgMaxUrl, bigPhotoUrl["fileUrl"].(string))
+ picTime = i.Timestamp
+ }
+ lable, lableAttach := Feature2Jsonstr(*face)
+ var target = new(Target)
+ target.TargetId = face.Id
+ target.TargetScore = face.Score
+ target.TargetType = face.Type
+ 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)
- sdkname := ""
- switch key {
- case "face":
- sdkname = "浜鸿劯"
- case "plate":
- sdkname = "杞︾墝璇嗗埆"
- }
- //logger.Info("浜鸿劯鐩爣target:",targetInfos)
- pervideo := PerVideoPicture{LinkInfo{
- face.Uuid,
- msg.Cid,
- msg.Push.Cam.Addr,
- msg.Push.Cam.Name,
- picTime,
- imgMaxUrl,
- msg.Tasklab.Taskid,
- msg.Tasklab.Taskname,
- sdkname,
- "",
- alarmRules,
- time.Now().Format("2006-01-02 15:04:05"), // 鍙娴嬶紝娌℃湁姣斿鏃堕棿
- lable,
- lableAttach,
- "",
- msg.Push.ServerId,
- msg.Push.ServerName,
- msg.Push.LocalIp,
- "",
- true,
- false,
- false,
- false,
- face.Liker,
- targetInfos,
- },
- "",
- []*LinkInfo{},
- }
- requstbody, err := json.Marshal(pervideo)
+ sdkname := ""
+ id := face.Uuid
+ switch key {
+ case "face":
+ sdkname = "浜鸿劯"
+ case "plate":
+ sdkname = "杞︾墝璇嗗埆"
+ case "track":
+ sdkname = "浜哄憳璺熻釜"
+ if len(face.Liker) == 1{
+ id = face.Liker[0].TargetId
+ }
+ }
+ //logger.Info("浜鸿劯鐩爣target:",targetInfos)
- if err != nil {
- logger.Info("json parse error ", err)
- return
- }
- resp1, err1 := EsReq("POST", videoPersonUrl, requstbody)
- if err1 != nil {
- logger.Error("涓婁紶ES鍑洪敊锛�---", err1)
- } else {
- logger.Info("鎻掑叆es杩斿洖鐨勪俊鎭細", sdkname, "---", resp1)
- // 鍙戝嚭褰曞儚淇″彿
- ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: face.Uuid, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid, VideoUrl: msg.Push.VideoUrl, ImgId: i.Id, SdkIds: []string{"-1"}, Type: 1})
- }
+ pervideo := PerVideoPicture{LinkInfo{
+ id,
+ msg.Cid,
+ msg.Push.Cam.Addr,
+ msg.Push.Cam.Name,
+ picTime,
+ imgMaxUrl,
+ msg.Tasklab.Taskid,
+ msg.Tasklab.Taskname,
+ sdkname,
+ "",
+ alarmRules,
+ time.Now().Format("2006-01-02 15:04:05"), // 鍙娴嬶紝娌℃湁姣斿鏃堕棿
+ lable,
+ lableAttach,
+ "",
+ msg.Push.ServerId,
+ msg.Push.ServerName,
+ msg.Push.LocalIp,
+ "",
+ true,
+ false,
+ false,
+ false,
+ face.Liker,
+ targetInfos,
+ },
+ "",
+ []*LinkInfo{},
+ }
+ requstbody, err := json.Marshal(pervideo)
+
+ if err != nil {
+ logger.Info("json parse error ", err)
+ return
+ }
+ if key == "track" && len(face.Liker) == 1{
+ esid := face.Liker[0].TargetId
+ returnMsg, err1 := esutil.AppendTargetInfo(esid, string(requstbody),EsInfo.EsIndex.AIOcean.IndexName,serverIp,serverPort)
+ if err1 != nil {
+ _ = logger.Error("杩藉姞鏁版嵁鍑洪敊锛�---", err1)
+ } else {
+ logger.Info("鎻掑叆es杩斿洖鐨勪俊鎭細", returnMsg)
+ // 鍙戝嚭褰曞儚淇″彿
+ ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: face.Uuid, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid, VideoUrl: msg.Push.VideoUrl, ImgId: i.Id, SdkIds: []string{"-1"}, Type: 1})
+ }
+ } else {
+ resp1, err1 := EsReq("POST", videoPersonUrl, requstbody)
+ if err1 != nil {
+ _ = logger.Error("涓婁紶ES鍑洪敊锛�---", err1)
+ } else {
+ logger.Info("鎻掑叆es杩斿洖鐨勪俊鎭細", resp1)
+ // 鍙戝嚭褰曞儚淇″彿
+ ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: face.Uuid, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid, VideoUrl: msg.Push.VideoUrl, ImgId: i.Id, SdkIds: []string{"-1"}, Type: 1})
}
}
}
}
- }
+
}
// 褰掔疆浜鸿劯
@@ -274,8 +305,7 @@
}
// 寰�es涓彃鍏olo鏁版嵁
-func InsertYolo(msg structure.ResultMsg) {
- if msg.RuleResult["yolo"] != nil && len(msg.RuleResult["yolo"].([]structure.Result)) > 0 {
+func InsertYolo(msg structure.ResultMsg,key string, results interface{}) {
// 鍏堝垽鏂竴涓嬫暟鎹甫鐨勮鍒欐爣绛炬槸鍚︽湁鍙互鎻掑叆鐨�
flag := false
for _, res := range msg.RuleResult["yolo"].([]structure.Result) {
@@ -290,7 +320,7 @@
alarmRules := []AlarmRule{}
var targetInfos []Target
url := []string{}
- for _, yoloResult := range msg.RuleResult["yolo"].([]structure.Result) {
+ for _, yoloResult := range results.([]structure.Result) {
if yoloResult.Others.TimeLabel == "01" || yoloResult.Others.TimeLabel == "10" {
// 鎷煎嚭sdkname
//logger.Info("搴旇杩涙潵鎵嶅鐨�")
@@ -317,7 +347,7 @@
err = proto.Unmarshal(bdata, &i)
resp1, err1 := util.DrawPolygonOnImageForYolo(msg1.Cid, i, msg1.RuleResult["yolo"].([]structure.Result), weedfsUrl)
if err1 != nil {
- logger.Error("缂撳瓨鏁版嵁鐢绘鎴栦笂浼犲浘鐗囨湇鍔″櫒鍑洪敊", err)
+ _ = logger.Error("缂撳瓨鏁版嵁鐢绘鎴栦笂浼犲浘鐗囨湇鍔″櫒鍑洪敊", err)
} else {
logger.Info("涓婁紶鐨勫浘鐗囦俊鎭細", resp1)
}
@@ -377,7 +407,7 @@
//resp, err = util.PostFormBufferData(weedfsUrl, i, uuid.NewV4().String())
resp, err = util.DrawPolygonOnImageForYolo(msg.Cid, i, msg.RuleResult["yolo"].([]structure.Result), weedfsUrl)
if err != nil {
- logger.Error("鐢绘鎴栦笂浼犲浘鐗囨湇鍔″櫒鍑洪敊", err)
+ _ = logger.Error("鐢绘鎴栦笂浼犲浘鐗囨湇鍔″櫒鍑洪敊", err)
return
} else {
logger.Info("涓婁紶鐨勫浘鐗囦俊鎭細", resp)
@@ -431,7 +461,7 @@
}
resp1, err2 := EsReq("POST", videoPersonUrl, requstbody)
if err2 != nil {
- logger.Error("寰�ES鎻掑叆鏁版嵁澶辫触", err)
+ _ = logger.Error("寰�ES鎻掑叆鏁版嵁澶辫触", err)
} else {
logger.Debug("鎻掑叆es杩斿洖鐨勬暟鎹俊鎭槸锛坹olo锛夛細", resp1)
// 鍙戝嚭褰曞儚淇″彿
@@ -440,19 +470,16 @@
logger.Info("鑱斿姩浠诲姟鐨勫綍鍍忎俊鍙凤細", index)
ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: msg.Push.PushId, CameraId: link.CameraId, TaskId: msg.Tasklab.Taskid, VideoUrl: msg.Push.VideoUrl, ImgId: i.Id, SdkIds: []string{strconv.Itoa(index)}, Type: 2})
}
- logger.Warn("__________________________________________寰�ES鎻掑叆yolo鏁版嵁鎴愬姛")
+ _ = logger.Warn("__________________________________________寰�ES鎻掑叆yolo鏁版嵁鎴愬姛")
//os.Exit(1)
}
}
}
- } else {
- logger.Debug("timeLabel鏉′欢閮戒笉绗﹀悎锛�")
- }
}
// 鎻掑叆鐩爣鎸佺画鏃堕棿鏁版嵁
-func InsertTarget(msg structure.ResultMsg) {
+func InsertLastTarget(msg structure.ResultMsg) {
if msg.RuleResult["target"] != nil && len(msg.RuleResult["target"].([]structure.Result)) > 0 {
// 鍏堝垽鏂竴涓嬫暟鎹甫鐨勮鍒欐爣绛炬槸鍚︽湁鍙互鎻掑叆鐨�
logger.Info("鎻掑叆瀹氭椂鐩爣淇℃伅锛�", len(msg.RuleResult["target"].([]structure.Result)))
@@ -517,7 +544,7 @@
//resp, err = util.PostFormBufferData(weedfsUrl, i, uuid.NewV4().String())
resp, err = util.DrawPolygonOnImageForYolo(msg.Cid, i, msg.RuleResult["target"].([]structure.Result), weedfsUrl)
if err != nil {
- logger.Error("鐢绘鎴栦笂浼犲浘鐗囨湇鍔″櫒鍑洪敊", err)
+ _ = logger.Error("鐢绘鎴栦笂浼犲浘鐗囨湇鍔″櫒鍑洪敊", err)
return
} else {
logger.Info("涓婁紶鐨勫浘鐗囦俊鎭細", resp)
@@ -594,7 +621,7 @@
}
resp1, err2 := EsReq("POST", videoPersonUrl, requstbody)
if err2 != nil {
- logger.Error("寰�ES鎻掑叆鏁版嵁澶辫触", err)
+ _ = logger.Error("寰�ES鎻掑叆鏁版嵁澶辫触", err)
} else {
logger.Debug("鎻掑叆es杩斿洖鐨勬暟鎹俊鎭槸锛坱arget锛夛細", resp1)
// 鍙戝嚭褰曞儚淇″彿
@@ -603,7 +630,7 @@
logger.Info("鑱斿姩浠诲姟鐨勫綍鍍忎俊鍙凤細", index)
ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: msg.Push.PushId, CameraId: link.CameraId, TaskId: msg.Tasklab.Taskid, VideoUrl: msg.Push.VideoUrl, ImgId: i.Id, SdkIds: []string{strconv.Itoa(index)}, Type: 2})
}
- logger.Warn("__________________________________________寰�ES鎻掑叆target鏁版嵁鎴愬姛")
+ _ = logger.Warn("__________________________________________寰�ES鎻掑叆target鏁版嵁鎴愬姛")
//os.Exit(1)
}
}
@@ -677,7 +704,7 @@
err = proto.Unmarshal(bdata, &i)
resp1, err1 := util.DrawPolygonOnImageForTarget(msg.Cid, i, msg.RuleResult["target"].([]structure.Result), weedfsUrl)
if err1 != nil {
- logger.Error("缂撳瓨鏁版嵁鐢绘鎴栦笂浼犲浘鐗囨湇鍔″櫒鍑洪敊", err)
+ _ = logger.Error("缂撳瓨鏁版嵁鐢绘鎴栦笂浼犲浘鐗囨湇鍔″櫒鍑洪敊", err)
} else {
logger.Info("涓婁紶鐨勫浘鐗囦俊鎭細", resp1)
}
@@ -786,7 +813,7 @@
err = proto.Unmarshal(bdata, &i)
resp1, err1 := util.DrawPolygonOnImageForYolo(msg1.Cid, i, msg1.RuleResult["yolo"].([]structure.Result), weedfsUrl)
if err1 != nil {
- logger.Error("缂撳瓨鏁版嵁鐢绘鎴栦笂浼犲浘鐗囨湇鍔″櫒鍑洪敊", err)
+ _ = logger.Error("缂撳瓨鏁版嵁鐢绘鎴栦笂浼犲浘鐗囨湇鍔″櫒鍑洪敊", err)
} else {
logger.Info("涓婁紶鐨勫浘鐗囦俊鎭細", resp1)
}
@@ -829,7 +856,7 @@
//resp, err = util.PostFormBufferData(weedfsUrl, i, uuid.NewV4().String())
resp, err = util.DrawPolygonOnImageForYolo(msg.Cid, i, msg.RuleResult["yolo"].([]structure.Result), weedfsUrl)
if err != nil {
- logger.Error("鐢绘鎴栦笂浼犲浘鐗囨湇鍔″櫒鍑洪敊", err)
+ _ = logger.Error("鐢绘鎴栦笂浼犲浘鐗囨湇鍔″櫒鍑洪敊", err)
return nil
} else {
logger.Info("涓婁紶鐨勫浘鐗囦俊鎭細", resp)
diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index 8688dab..a231877 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -37,6 +37,7 @@
args.RuleResult["face"] = []structure.Result{}
args.RuleResult["target"] = []structure.Result{}
args.RuleResult["plate"] = []structure.Result{}
+ args.RuleResult["track"] = []structure.Result{}
//logger.Warn("浼犺繘鍘讳箣鍓嶆槸浠�涔堝痉琛岋細",args.RuleResult["yolo"])
if taskGroup != nil && len(taskGroup.GroupRules) > 0 {
// 鍏堣繃鐙珛锛屽啀杩囪仈鍔�
@@ -137,132 +138,7 @@
// 杩涜瀹氭椂鍣ㄧ殑澶勭悊鍜屽垽鏂�
timeFlag := TimerAlarm(&label, groupRule.GroupId, result)
if timeFlag == "01" || timeFlag == "10" || timeFlag == "11"{ // 娌℃湁瀹氭椂鍣ㄦ垨鑰呮弧瓒冲畾鏃跺櫒鏉′欢
- // 鎵撲汉鑴告爣绛惧拰yolo鏍囩
- // 鏈�鍚庢垚鍔熸姤璀︽墠鎶婄鍚堟潯浠剁殑浜鸿劯鏁版嵁濉炶繘缁撴灉鏍囩閲�
- // 閰嶄簡浜鸿劯鐨勭畻娉曟墠鎶婁汉鑴哥殑鏁版嵁鐢╁嚭鏉ユ墦鏍囩
- faces := []*structure.Arg{}
- faceFlag := 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-5c1c3278a972" {
- faceFlag = true
- }
- }
- for _, sdkData := range args.Sdkdata {
- if sdkData.IpcId == "A8B73405-373D-4F23-CED2-A617EBD7EC55" && faceFlag { // sdkData閲屾湁浜鸿劯鏁版嵁涓旈厤缃簡绠楁硶鎵嶆妸绗﹀悎鏉′欢鐨勬暟鎹杩涙爣绛鹃噷鍘�
- for _, areaMap := range sdkData.AreaMapList {
- if areaMap.IsEffective {
- faces = append(faces, putFaceToResult(areaMap, faces)...)
- }
- }
- }
- }
- //logger.Info("face鏍囩鐨勯暱搴︼細",len(faces))
- //for _,face := range faces {
- // //logger.Debug("鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�擾_______________鐪嬬湅浜鸿劯鐨勫潗鏍�:",face.Location)
- //}
- //logger.Warn("___________________________________________________________________________缁堜簬璧板畬涓囬噷闀垮緛")
- // 鎶婁粬浠殑浣嶇疆鏁版嵁涔熶紶涓嬪幓
- yolos := []*structure.Arg{}
- for _, sdkData := range args.Sdkdata {
- if sdkData.IpcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && sdkNames != "" { // 鎶妝olo鏁版嵁鐨勫悇涓洰鏍囩殑鍧愭爣杈撳嚭鏂逛究鍚庨潰鐢绘
- for _, areaMap := range sdkData.AreaMapList {
- if areaMap.IsEffective {
- yolos = append(yolos, putYolosToResult(areaMap)...)
- }
- }
- }
- }
- //logger.Debug("------locations鐨勫唴瀹癸細", yolos)
- // 澶勭悊鐩爣瀹氭椂鏁版嵁
- targets := []*structure.Arg{}
- for _, sdkData := range args.Sdkdata {
- if sdkData.IpcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && sdkNames != "" { // 杈撳嚭鐩爣鏁版嵁
- for _, areaMap := range sdkData.AreaMapList {
- if areaMap.IsEffective {
- targets = append(targets, putTargetsToResult(areaMap)...)
- }
- }
- }
- }
- // 杞﹁締鐩爣缁熻
- cars := []*structure.Arg{}
- for _, sdkData := range args.Sdkdata {
- //logger.Info("鐪嬬湅sdkNames",sdkNames)
- if sdkData.IpcId == "91d923ef-6200-4549-ab1b-8e773e85d729" { // 鎶婅溅鐗屾暟鎹殑鍚勪釜鐩爣鐨勫潗鏍囪緭鍑烘柟渚垮悗闈㈢敾妗�
- for _, areaMap := range sdkData.AreaMapList {
- if areaMap.IsEffective {
- cars = append(cars, putFaceToResult(areaMap, cars)...)
- }
- }
- }
- }
- // 璺熻釜鐩爣缁熻
- 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
- } else {
- islink = false
- }
- //logger.Info("瑙﹀彂鐨勫尯鍩焛d锛�",polygonId)
- var labelTypes []int // 0涓簓olo鏍囩锛�1涓篺ace鏍囩 2涓轰袱鑰呮爣绛�
- if sdkNames != "" && len(targets) == 0 {
- args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]structure.Result), structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, yolos, polygonId, islink,label})
- labelTypes = append(labelTypes,0)
- //logger.Info("-------------------yolo缁撴灉鏍囩闀垮害", len(args.RuleResult["yolo"].([]Result)))
- }
- if faceFlag {
- args.RuleResult["face"] = append(args.RuleResult["face"].([]structure.Result), structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, faces, polygonId, islink,label})
- //logger.Info("-------------------face缁撴灉鏍囩", len(args.RuleResult["face"].([]structure.Result)))
- labelTypes = append(labelTypes,1)
- }
- if len(targets) > 0 {
- args.RuleResult["target"] = append(args.RuleResult["target"].([]structure.Result), structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, targets, polygonId, islink,label})
- //logger.Info("-------------------鐩爣鎸佺画缁撴灉鏍囩", len(args.RuleResult["target"].([]structure.Result)))
- //labelTypes = append(labelTypes,2)
- }
- if len(cars) > 0 {
- args.RuleResult["plate"] = append(args.RuleResult["plate"].([]structure.Result), structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, cars, polygonId, islink,label})
- //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{})
- // for k, result := range args.RuleResult {
- // if k == "yolo" {
- // tempMap[k] = []structure.Result{}
- // for _, res := range result.([]structure.Result) {
- // tempMap[k] = append(tempMap[k].([]structure.Result), res)
- // }
- // }
- // if k == "face" {
- // tempMap[k] = []structure.Result{}
- // for _, res := range result.([]structure.Result) {
- // tempMap[k] = append(tempMap[k].([]structure.Result), res)
- // }
- // }
- // }
- // rw.Lock()
- // TimeEleList[cacheId].CacheSdkData.RuleResult = tempMap
- // rw.Unlock()
- //}
-
+ labelTypes := AssembResultLabel(args,groupRule,sdkNames,taskId,polygonId,label)
return true,labelTypes
} else {
return false,[]int{}
@@ -493,3 +369,87 @@
return
}
+func AssembResultLabel(args *structure.SdkDatas, groupRule *protomsg.GroupRule,sdkNames string,taskId string,polygonId string,label structure.Others) []int{
+ faces := []*structure.Arg{}
+ yolos := []*structure.Arg{}
+ targets := []*structure.Arg{}
+ personTrack := []*structure.Arg{}
+ cars := []*structure.Arg{}
+ faceFlag := 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-5c1c3278a972" {
+ faceFlag = true
+ }
+ }
+ for _, sdkData := range args.Sdkdata {
+ switch sdkData.IpcId {
+ case "A8B73405-373D-4F23-CED2-A617EBD7EC55" :
+ if faceFlag { // sdkData閲屾湁浜鸿劯鏁版嵁涓旈厤缃簡绠楁硶鎵嶆妸绗﹀悎鏉′欢鐨勬暟鎹杩涙爣绛鹃噷鍘�
+ for _, areaMap := range sdkData.AreaMapList {
+ if areaMap.IsEffective {
+ faces = append(faces, putFaceToResult(areaMap, faces)...)
+ }
+ }
+ }
+ case "02D54B61-0F16-C604-8567-FC4BE493C523":
+ if sdkNames != "" { // 鎶妝olo鏁版嵁鐨勫悇涓洰鏍囩殑鍧愭爣杈撳嚭鏂逛究鍚庨潰鐢绘
+ for _, areaMap := range sdkData.AreaMapList {
+ if areaMap.IsEffective {
+ yolos = append(yolos, putYolosToResult(areaMap)...)
+ // 澶勭悊鐩爣瀹氭椂鏁版嵁
+ targets = append(targets, putTargetsToResult(areaMap)...)
+ }
+ }
+ }
+ case "91d923ef-6200-4549-ab1b-8e773e85d729":
+ // 杞﹁締鏁版嵁
+ for _, areaMap := range sdkData.AreaMapList {
+ if areaMap.IsEffective {
+ cars = append(cars, putFaceToResult(areaMap, cars)...)
+ }
+ }
+ case "璺熻釜鐨刬pcId":
+ // 璺熻釜鐩爣
+ for _, areaMap := range sdkData.AreaMapList {
+ if areaMap.IsEffective {
+ personTrack = append(personTrack, putFaceToResult(areaMap, personTrack)...)
+ }
+ }
+ }
+ }
+
+ var islink bool
+ if groupRule.SetType == "linkTask" {
+ islink = true
+ } else {
+ islink = false
+ }
+ //logger.Info("瑙﹀彂鐨勫尯鍩焛d锛�",polygonId)
+ var labelTypes []int // 0涓簓olo鏍囩锛�1涓篺ace鏍囩 2涓轰袱鑰呮爣绛�
+ if sdkNames != "" && len(targets) == 0 {
+ args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]structure.Result), structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, yolos, polygonId, islink,label})
+ labelTypes = append(labelTypes,0)
+ //logger.Info("-------------------yolo缁撴灉鏍囩闀垮害", len(args.RuleResult["yolo"].([]Result)))
+ }
+ if faceFlag {
+ args.RuleResult["face"] = append(args.RuleResult["face"].([]structure.Result), structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, faces, polygonId, islink,label})
+ //logger.Info("-------------------face缁撴灉鏍囩", len(args.RuleResult["face"].([]structure.Result)))
+ labelTypes = append(labelTypes,1)
+ }
+ if len(targets) > 0 {
+ args.RuleResult["target"] = append(args.RuleResult["target"].([]structure.Result), structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, targets, polygonId, islink,label})
+ //logger.Info("-------------------鐩爣鎸佺画缁撴灉鏍囩", len(args.RuleResult["target"].([]structure.Result)))
+ labelTypes = append(labelTypes,2)
+ }
+ if len(cars) > 0 {
+ args.RuleResult["plate"] = append(args.RuleResult["plate"].([]structure.Result), structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, cars, polygonId, islink,label})
+ //logger.Info("-------------------杞︾墝缁撴灉鏍囩", len(args.RuleResult["plate"].([]structure.Result)))
+ labelTypes = append(labelTypes,3)
+ }
+ 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,4)
+ }
+ return labelTypes
+}
\ No newline at end of file
diff --git a/structure/rule.go b/structure/rule.go
index 99604a4..2389cca 100644
--- a/structure/rule.go
+++ b/structure/rule.go
@@ -45,8 +45,7 @@
IsEffective bool // 瑙勫垯涓槸鍚︾敤鍒颁簡姝ゅ尯鍩�
}
-// sdk杈撳嚭鐨勫浘鐗囦笂鍗曚釜鐩爣鐨勬暟鎹�
-type PhotoMap struct {
+type SourcePhoto struct {
Id string
Rects Rect // 鐭╁舰鍖哄煙鍙傛暟
Score float64 // 鐩镐技搴﹀緱鍒嗭紙鏈夊澶х▼搴﹀儚涓�涓洰鏍囥�備汉鑴革紝浜轰綋鎴栬溅绛夌瓑锛�
@@ -55,6 +54,11 @@
Feature []byte
Car *protomsg.PlateIDVehicle
}
+// sdk杈撳嚭鐨勫浘鐗囦笂鍗曚釜鐩爣鐨勬暟鎹�
+type PhotoMap struct {
+ SourcePhoto
+ AttachObj SourcePhoto
+}
// 姣忎釜绠楁硶瀵逛簬褰撳墠甯х敾闈㈣嚜宸辨彁鍙栫殑鏁版嵁
type SdkData struct {
--
Gitblit v1.8.0