From 539a78196da60eb97cf7057c5c85dfaa9b240741 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期五, 11 十月 2024 16:21:32 +0800 Subject: [PATCH] 添加A3平层传感器数据获取方式 --- repository/captureRepo.go | 236 +++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 205 insertions(+), 31 deletions(-) diff --git a/repository/captureRepo.go b/repository/captureRepo.go index d0702b5..bb82cf5 100644 --- a/repository/captureRepo.go +++ b/repository/captureRepo.go @@ -3,13 +3,14 @@ import ( "encoding/base64" "encoding/json" - "gat1400Exchange/pkg" "time" "gat1400Exchange/client" "gat1400Exchange/config" "gat1400Exchange/models" + "gat1400Exchange/pkg" "gat1400Exchange/pkg/logger" + "gat1400Exchange/service" "gat1400Exchange/util" "gat1400Exchange/vo" ) @@ -36,7 +37,7 @@ } var deviceId = face.DeviceID var faceId = face.FaceID - var bgImageStr, imageType string + var bgImageStr string var bgImageBytes, faceImageBytes []byte = nil, nil // 鑾峰彇澶у浘, 鐩墠娴峰悍鐨勫皬鍥惧垎杈ㄧ巼澶綆 @@ -69,37 +70,116 @@ } // 鍒ゆ柇鍥剧墖绫诲瀷鏄惁涓哄満鏅浘, 鏍规嵁浜鸿劯鍧愭爣鍒囧皬鍥�. - if imageType == "14" && config.ForwardConf.CutFaceImage { - faceRect := &vo.Rect{ + if config.ImageConf.CutFaceImage && face.LeftTopX != 0 { + faceRect := &pkg.Rect{ Left: face.LeftTopX, Top: face.LeftTopY, Right: face.RightBtmX, Bottom: face.RightBtmY, } - faceImageBytes, err = util.SubCutImg(bgImageBytes, faceRect, 90) + faceImageBytes, err = pkg.SubCutImage(bgImageBytes, faceRect, config.ImageConf.Enlarge) if err != nil { logger.Warn("Cut face image failure, %s", err.Error()) } } // 杞彂鍥惧儚 - logger.Debug("Prepare forward image, deviceId:%s, image len:%d, server:%s", deviceId, len(bgImageBytes), config.ForwardConf.SyncServer) + logger.Debug("Prepare forward image, deviceId:%s, bgImage len:%d, smImage len:%d server:%s", deviceId, len(bgImageBytes), len(faceImageBytes), config.ForwardConf.SyncServer) if deviceId != "" && bgImageStr != "" && config.ForwardConf.SyncServer != "" { pd := c.PackPushDataV2(deviceId, faceId, face.FaceAppearTime, bgImageBytes, faceImageBytes) if pd == nil { return } - // 澶勭悊姊帶濉啓鐨勬ゼ灞備俊鎭� 鏆傛椂浣跨敤oherFeature瀛楁 - if face.OtherFeature != "" { - pd.CameraFloor = face.OtherFeature + // 澶勭悊姊帶濉啓鐨勬ゼ灞備俊鎭� 鏆傛椂浣跨敤otherFeature瀛楁 + if face.OtherFeature != "" && pd.CameraFloor == "" { + pd.Direction, pd.CameraFloor, _ = pkg.RestoreFloor(face.OtherFeature) } - // 灏濊瘯浠巉aceId鎻愬彇妤煎眰 - if pd.CameraFloor == "" && config.ClientConf.AddFloorToFaceId { - pd.CameraFloor, _ = pkg.ParseFloorFromId(face.FaceID) + payload, err := json.Marshal(pd) + if err != nil { + logger.Warn("Marshal error, %s", err.Error()) + return } + + if !util.SendData(payload, config.ForwardConf.SyncServer) { + cacheItem, _ := json.Marshal(pd) + c.CacheData(cacheItem, "basic") + logger.Warn("The data forwarding failed, adding to local cache.") + } else { + logger.Debug("The data forwarding successful. deviceId:%s, picId:%s", deviceId, face.FaceID) + } + } + } + + return +} + +func (c CaptureRepository) PersonForward(personList []vo.PersonObject) { + var err error + + if personList == nil || len(personList) == 0 { + logger.Warn("FaceList is nil") + return + } + + for _, v := range personList { + if v.SubImageList.SubImageInfoObject == nil { + logger.Warn("SubImageInfoObject is nil") + continue + } + var deviceId = v.DeviceID + var targetId = v.PersonID + var bgImageStr string + var bgImageBytes, faceImageBytes []byte = nil, nil + + // 鑾峰彇澶у浘, 鐩墠娴峰悍鐨勫皬鍥惧垎杈ㄧ巼澶綆 + for _, image := range v.SubImageList.SubImageInfoObject { + if image.Type != "14" { + continue + } + + if len(image.Data) > 0 { + if len(image.Data) > len(bgImageStr) { + bgImageStr = image.Data + } + } else if image.StoragePath != "" { + imgData, err := util.ImageDownload(image.StoragePath, nil) + if err != nil { + logger.Warn("Image download failure, %s", err.Error()) + } else { + bgImageBytes = imgData + bgImageStr = "///" + } + } + } + + if bgImageBytes == nil { + bgImageBytes, err = base64.StdEncoding.DecodeString(bgImageStr) + if err != nil { + logger.Warn("Decode Image Base64 String failure, %s", err.Error()) + continue + } + } + + // 杞彂鍥惧儚 + logger.Debug("Prepare forward person image, deviceId:%s, image len:%d, server:%s", deviceId, len(bgImageBytes), config.ForwardConf.SyncServer) + if deviceId != "" && bgImageStr != "" && config.ForwardConf.SyncServer != "" { + pd := c.PackPushDataV2(deviceId, targetId, v.PersonAppearTime, bgImageBytes, faceImageBytes) + if pd == nil { + return + } + + // 澶勭悊姊帶濉啓鐨勬ゼ灞備俊鎭� 鏆傛椂浣跨敤oherFeature瀛楁 + if v.BehaviorDescription != "" { + pd.CameraFloor = v.BehaviorDescription + } + + //// 灏濊瘯浠巉aceId鎻愬彇妤煎眰 + //if pd.CameraFloor == "" && config.ClientConf.AddFloorToFaceId { + // pd.CameraFloor, _ = pkg.ParseFloorFromId(v.PersonID) + //} //logger.Debug("device %s, CameraFloor:%s", deviceId, pd.CameraFloor) payload, err := json.Marshal(pd) @@ -124,6 +204,7 @@ func (c CaptureRepository) PackPushDataV2(deviceId, faceId, appearTime string, bgImgBytes, faceImgBytes []byte) *vo.PushDataInfoV2 { var pd = new(vo.PushDataInfoV2) var floor string + var runDir string faceAppearTime, err := time.ParseInLocation("20060102150405", appearTime, time.Local) if err != nil { @@ -131,12 +212,31 @@ faceAppearTime = time.Now() } - if config.ServeConf.Role == "server" { + // 鍒ゆ柇鏄惁闇�瑕佸尮閰嶆ゼ灞� + if config.NVCSConf.Model != "" { // 鍖归厤妤煎眰 var devPos models.Positions _ = devPos.FindDevicePosition(deviceId, faceAppearTime.Unix()+5) // 鍔�5绉掔數姊叧闂ㄧ殑鏃堕棿 floor = devPos.Pos + + for i := 0; i < config.NVCSConf.WaitRunTime; i++ { + var dbPos models.Positions + if err := dbPos.FindMovePosition(faceAppearTime.Unix()+5, floor); err == nil { + switch dbPos.RunDir { + case service.RunUp: + runDir = "in" + case service.RunDown: + runDir = "out" + case service.RunStop: + runDir = "" + } + + break + } + + time.Sleep(1 * time.Second) + } } pd.PicMaxImages = append(pd.PicMaxImages, bgImgBytes) @@ -150,6 +250,7 @@ pd.DataSource = "camera" pd.CameraFloor = floor pd.CameraId = deviceId + pd.Direction = runDir return pd } @@ -165,34 +266,107 @@ cacheItem.Save() } -func (c CaptureRepository) VIIDMsgForward(msg *vo.RequestFaceList) { +func (c CaptureRepository) VIIDFaceMsgForward(msg *vo.RequestFaceList) { faceInfo := msg.FaceListObject.FaceObject[0] - // 鍖归厤妤煎眰 - faceAppearTime, err := time.ParseInLocation("20060102150405", faceInfo.FaceAppearTime, time.Local) - if err != nil { - logger.Warn("Parse face appear time error, %s", err.Error()) - faceAppearTime = time.Now() - } - var devPos models.Positions - _ = devPos.FindPositionByTime(faceAppearTime.Unix() + 5) // 鍔�5绉掔數姊叧闂ㄧ殑鏃堕棿 - if devPos.Pos == "" { - devPos.Pos = "1F" - } - - for idx, face := range msg.FaceListObject.FaceObject { - msg.FaceListObject.FaceObject[idx].OtherFeature = devPos.Pos - if config.ClientConf.AddFloorToFaceId { - msg.FaceListObject.FaceObject[idx].FaceID = pkg.GenerateFaceIdContainFloor(face.FaceID, devPos.Pos) + // 鍒ゆ柇鏄惁寮�鍚簡姊帶 + if config.NVCSConf.Model != "" { + // 鍖归厤妤煎眰 + faceAppearTime, err := time.ParseInLocation("20060102150405", faceInfo.FaceAppearTime, time.Local) + if err != nil { + logger.Warn("Parse face appear time error, %s", err.Error()) + faceAppearTime = time.Now() } + + var floor, runDir string + var devPos models.Positions + _ = devPos.FindPositionByTime(faceAppearTime.Unix() + 5) // 鍔�5绉掔數姊叧闂ㄧ殑鏃堕棿 + if devPos.Pos == "" { + devPos.Pos = "1F" + } + + floor = devPos.Pos + + for i := 0; i < config.NVCSConf.WaitRunTime; i++ { + var dbPos models.Positions + if err := dbPos.FindMovePosition(faceAppearTime.Unix()+5, floor); err == nil { + switch dbPos.RunDir { + case service.RunUp: + runDir = "1" + case service.RunDown: + runDir = "2" + case service.RunStop: + runDir = "0" + } + + break + } + + time.Sleep(1 * time.Second) + } + + for idx, _ := range msg.FaceListObject.FaceObject { + msg.FaceListObject.FaceObject[idx].OtherFeature, _ = pkg.ParseFloor(runDir, floor) + //if config.ClientConf.AddFloorToFaceId { + // msg.FaceListObject.FaceObject[idx].FaceID = pkg.GenerateFaceIdContainFloor(face.FaceID, devPos.Pos) + //} + } + } b, _ := json.Marshal(msg) if client.FaceCapture(b) != vo.StatusSuccess { cacheItem, _ := json.Marshal(msg) - c.CacheData(cacheItem, "1400") + c.CacheData(cacheItem, "1400-face") logger.Warn("The data forwarding failed, adding to local cache.") } return } + +func (c CaptureRepository) VIIDPersonMsgForward(msg *vo.RequestPersonList) { + person := msg.PersonListObject.PersonObject[0] + // 鍖归厤妤煎眰 + appearTime, err := time.ParseInLocation("20060102150405", person.PersonAppearTime, time.Local) + if err != nil { + logger.Warn("Parse face appear time error, %s", err.Error()) + appearTime = time.Now() + } + + var devPos models.Positions + _ = devPos.FindPositionByTime(appearTime.Unix() + 5) // 鍔�5绉掔數姊叧闂ㄧ殑鏃堕棿 + if devPos.Pos == "" { + devPos.Pos = "1F" + } + + for idx, _ := range msg.PersonListObject.PersonObject { + msg.PersonListObject.PersonObject[idx].BehaviorDescription = devPos.Pos + //if config.ClientConf.AddFloorToFaceId { + // msg.PersonListObject.PersonObject[idx].PersonID = pkg.GenerateFaceIdContainFloor(v.PersonID, devPos.Pos) + //} + } + + b, _ := json.Marshal(msg) + if client.PersonCapture(b) != vo.StatusSuccess { + cacheItem, _ := json.Marshal(msg) + c.CacheData(cacheItem, "1400-person") + logger.Warn("The data forwarding failed, adding to local cache.") + } + + return +} + +func (c CaptureRepository) PubRecordMessage(deviceId, msgId string) { + var msg = vo.RecordMsg{ + CamId: deviceId, + MsgId: msgId, + } + + logger.Debug("Pub record message %s, %s", deviceId, msgId) + body, _ := json.Marshal(&msg) + + _, err := util.HttpPost(config.ForwardConf.RecordServer, nil, body) + if err != nil { + logger.Warn(err.Error()) + } +} -- Gitblit v1.8.0