| | |
| | | "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"` |
| | |
| | | func InsertToEs(msg structure.ResultMsg) { |
| | | defer func() { |
| | | if err := recover(); err != nil { |
| | | logger.Error("es模块儿的异常捕获:", err) |
| | | _ = logger.Error("es模块儿的异常捕获:", err) |
| | | } |
| | | }() |
| | | localConfig1, err := cache.GetServerInfo() |
| | |
| | | } |
| | | 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插人脸数据(或车牌数据)") |
| | | 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") |
| | | _ = logger.Warn("face不为nil") |
| | | var imgMaxUrl []string = []string{} |
| | | var picTime string = "" |
| | | for _, face := range faces { |
| | |
| | | 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("上传小图出错") |
| | | _ = logger.Error("上传小图出错") |
| | | } |
| | | // 上传大图 |
| | | if len(imgMaxUrl) == 0 { |
| | |
| | | targetInfos = append(targetInfos, *target) |
| | | |
| | | 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) |
| | | |
| | | pervideo := PerVideoPicture{LinkInfo{ |
| | | face.Uuid, |
| | | id, |
| | | msg.Cid, |
| | | msg.Push.Cam.Addr, |
| | | msg.Push.Cam.Name, |
| | |
| | | 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) |
| | | _ = logger.Error("上传ES出错!---", err1) |
| | | } else { |
| | | logger.Info("插入es返回的信息:", sdkname, "---", resp1) |
| | | 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}) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | // 归置人脸 |
| | |
| | | } |
| | | |
| | | // 往es中插入yolo数据 |
| | | 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) { |
| | |
| | | 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("应该进来才对的") |
| | |
| | | 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) |
| | | } |
| | |
| | | //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) |
| | |
| | | } |
| | | resp1, err2 := EsReq("POST", videoPersonUrl, requstbody) |
| | | if err2 != nil { |
| | | logger.Error("往ES插入数据失败", err) |
| | | _ = logger.Error("往ES插入数据失败", err) |
| | | } else { |
| | | logger.Debug("插入es返回的数据信息是(yolo):", resp1) |
| | | // 发出录像信号 |
| | |
| | | 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))) |
| | |
| | | //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) |
| | |
| | | } |
| | | resp1, err2 := EsReq("POST", videoPersonUrl, requstbody) |
| | | if err2 != nil { |
| | | logger.Error("往ES插入数据失败", err) |
| | | _ = logger.Error("往ES插入数据失败", err) |
| | | } else { |
| | | logger.Debug("插入es返回的数据信息是(target):", resp1) |
| | | // 发出录像信号 |
| | |
| | | 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) |
| | | } |
| | | } |
| | |
| | | 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) |
| | | } |
| | |
| | | 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) |
| | | } |
| | |
| | | //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) |