From 1570637a67ec0849dbe53cff570c8691a9cff49b Mon Sep 17 00:00:00 2001 From: panlei <2799247126@qq.com> Date: 星期一, 16 十二月 2019 13:55:26 +0800 Subject: [PATCH] arg新加一个参数 --- algorithm/middleware/readyData.go | 246 +++++++++++++++++++++++++++++++----------------- 1 files changed, 159 insertions(+), 87 deletions(-) diff --git a/algorithm/middleware/readyData.go b/algorithm/middleware/readyData.go index 9f146d8..a25f62d 100644 --- a/algorithm/middleware/readyData.go +++ b/algorithm/middleware/readyData.go @@ -21,7 +21,7 @@ func CountAreaObjs(a *structure.AreaMap,arg *structure.SdkData) { a.TargetNum = 0 - threshold := 60.0 // 鐩镐技搴� + threshold := 0.0 // 鐩镐技搴� intersectionper := 20.0 // 鍗犳瘮 size := 0.0 // 灏哄 @@ -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.BodyFeature,obj.ThftRes, []*structure.BaseInfo{},"",structure.ResultMsg{}},structure.SourceArg{}} //logger.Println("鏀捐繘鍘荤殑arg锛�-------", arg1) a.Args = append(a.Args, &arg1) a.FilterData = append(a.FilterData, &arg1) @@ -74,16 +74,12 @@ return rect } - - - // 灏嗗閮ㄤ紶杩涙潵鐨剆dk鏁版嵁鍖呰В鎴� SdkDatas func ParamFormat(msg []byte, args *structure.SdkDatas) protomsg.SdkMessage { defer func() { if err := recover(); err != nil { logger.Info("瑙e寘杩囩▼鐨勫紓甯告崟鑾�", err.(string)) } - }() // 鍙嶅簭鍒楀寲鏁版嵁寰楀埌sdk鍏ュ弬 m := protomsg.SdkMessage{} @@ -106,88 +102,164 @@ 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) - photoMap := structure.PhotoMap{Id: info.License,Score: float64(info.NConfidence),Rects: rectFormat(info.RcLocation), 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 "HumanTrack": + extractTrack(args,m,sdkinfo,i) } } return m } + +// 鎻愬彇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{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},structure.SourcePhoto{}} + 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{structure.SourcePhoto{Rects: rectFormat(info.RcObj), Score: float64(info.Prob) * 100, Type: "yolo",Id:strconv.Itoa(int(info.ObjID))},structure.SourcePhoto{}} + 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{structure.SourcePhoto{Id: info.License,Score: float64(info.FvdConf)*100,Rects: rectFormat(info.RcCarLocation), Type: "plate", Car:info},structure.SourcePhoto{}} + 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 { + + Track := protomsg.HumanTrackResult {} + err := proto.Unmarshal(sdkinfo.Sdkdata, &Track) + if err != nil { + logger.Info("瑙f瀽璺熻釜鐩爣鏁版嵁鏃跺嚭鐜伴敊璇�", err) + return + } + for _, info := range Track.Result { + logger.Info("鎺ユ敹璺熻釜鏁版嵁锛�",info.Id,info.Confidence,info.Feature) + photoMap := structure.PhotoMap{structure.SourcePhoto{Id: strconv.Itoa(int(info.Id)),Score: float64(info.Confidence)*100,Rects: rectFormat(info.RcHuman), Type: "track",BodyFeature: info.Feature},structure.SourcePhoto{}} + 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 -- Gitblit v1.8.0