From 300791a58cb2034fc779b74203d7e4ca5acba4d3 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期一, 09 十二月 2019 15:45:15 +0800
Subject: [PATCH] ---
---
algorithm/middleware/readyData.go | 248 ++++++++++++++++++++++++++++++++-----------------
1 files changed, 160 insertions(+), 88 deletions(-)
diff --git a/algorithm/middleware/readyData.go b/algorithm/middleware/readyData.go
index 7eb4265..bdcc857 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)
@@ -74,9 +74,6 @@
return rect
}
-
-
-
// 灏嗗閮ㄤ紶杩涙潵鐨剆dk鏁版嵁鍖呰В鎴� SdkDatas
func ParamFormat(msg []byte, args *structure.SdkDatas) protomsg.SdkMessage {
defer func() {
@@ -106,91 +103,166 @@
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("杞︾墝涔熺鍚堢殑鏁版嵁")
- 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 "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)
+ photoMap := structure.PhotoMap{structure.SourcePhoto{Id: strconv.Itoa(int(info.Id)),Score: float64(info.Confidence)*100,Rects: rectFormat(info.RcHuman), Type: "track"},structure.SourcePhoto{}}
+ 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
--
Gitblit v1.8.0