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