From 332fc6ad5edca596ecd23876aa9db7452b45f804 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期三, 29 五月 2024 02:58:21 +0800 Subject: [PATCH] 添加人员抓拍处理 --- repository/captureRepo.go | 121 +++++++++++++++++++++++++++++++++++++++ 1 files changed, 119 insertions(+), 2 deletions(-) diff --git a/repository/captureRepo.go b/repository/captureRepo.go index d0702b5..8572735 100644 --- a/repository/captureRepo.go +++ b/repository/captureRepo.go @@ -121,6 +121,91 @@ 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) + 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", deviceId) + } + } + } + + return +} + func (c CaptureRepository) PackPushDataV2(deviceId, faceId, appearTime string, bgImgBytes, faceImgBytes []byte) *vo.PushDataInfoV2 { var pd = new(vo.PushDataInfoV2) var floor string @@ -165,7 +250,7 @@ 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) @@ -190,7 +275,39 @@ 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, v := 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.") } -- Gitblit v1.8.0