From 5f31d07ff92d87dd1016e9279df84d8f3641feb5 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期日, 25 八月 2024 22:26:29 +0800 Subject: [PATCH] 添加系统校时功能 --- controller/captureCtl.go | 128 ++++++++++++++++++++++++++++++++++-------- 1 files changed, 103 insertions(+), 25 deletions(-) diff --git a/controller/captureCtl.go b/controller/captureCtl.go index a6fc5cb..79efc0f 100644 --- a/controller/captureCtl.go +++ b/controller/captureCtl.go @@ -2,14 +2,19 @@ import ( "encoding/base64" - "gat1400Exchange/config" - "gat1400Exchange/pkg" - "gat1400Exchange/service" + "fmt" + "math/rand" "net/http" + "path" + "strconv" "time" + "gat1400Exchange/config" + "gat1400Exchange/pkg" "gat1400Exchange/pkg/logger" "gat1400Exchange/repository" + "gat1400Exchange/service" + "gat1400Exchange/util" "gat1400Exchange/vo" "github.com/gin-gonic/gin" @@ -41,17 +46,44 @@ } face := req.FaceListObject.FaceObject[0] - logger.Debug("Receive new message, Id:%s Ip:%s faceId:%s, LeftTopX:%d, appearTime:%s", c.RemoteIP(), face.DeviceID, face.FaceID, face.LeftTopX, face.FaceAppearTime) + logger.Debug("Receive new face message, ip:%s, device id:%s faceId:%s, LeftTopX:%d, appearTime:%s", c.RemoteIP(), face.DeviceID, face.FaceID, face.LeftTopX, face.FaceAppearTime) + + if config.ClientConf.UploadType == "url" { + for idx, img := range face.SubImageList.SubImageInfoObject { + if img.Type != "14" { + continue + } + + imageBytes, err := base64.StdEncoding.DecodeString(img.Data) + if err != nil { + logger.Warn("Decode Small Image Base64 String failure, %s", err.Error()) + c.AbortWithStatus(http.StatusBadRequest) + return + } + + today := time.Now().Format("2006-01-02") + imagePath := path.Join(config.LogConf.Path, "gat1400_face_images", today, img.ImageID+".jpeg") + err = util.WriteToFile(imagePath, imageBytes) + if err == nil { + face.SubImageList.SubImageInfoObject[idx].Data = "" + face.SubImageList.SubImageInfoObject[idx].StoragePath = config.ImageConf.ImageUriPrefix + "/" + today + "/" + img.ImageID + ".jpeg" + } + } + } // 濡傛灉寮�鍚簡涓嬬骇, 韬唤搴旇鏄秷鎭唬鐞�, 涓嶅啀杞彂鍒版湇鍔″櫒 if config.ClientConf.Enable && config.ServeConf.Role == "agent" { - go a.Repository.VIIDMsgForward(&req) + go a.Repository.VIIDFaceMsgForward(&req) } else if config.ServeConf.Role == "cascade" { go service.AddFaceNotification(&face) } if config.ForwardConf.SyncServer != "" { go a.Repository.FaceForward(req.FaceListObject.FaceObject) + } + + if config.ForwardConf.RecordServer != "" { + go a.Repository.PubRecordMessage(face.DeviceID, face.FaceID) } rspMsg := vo.ResponseStatus{ @@ -78,17 +110,19 @@ } videoLabel := req.VideoLabelListObject.VideoLabelObject[0] - logger.Debug("Receive new message, Id:%s Ip:%s ", videoLabel.VideoLabelID, c.RemoteIP()) + logger.Debug("Receive new videoLabel message, Id:%s Ip:%s ", videoLabel.VideoLabelID, c.RemoteIP()) - // 杞汉鑴告秷鎭� - var face vo.FaceObject - face.FaceID = videoLabel.VideoLabelID - face.InfoKind = 1 - face.SourceID = videoLabel.VideoImageID - face.DeviceID = videoLabel.IVADeviceID - face.LocationMarkTime = videoLabel.CreateTimeAbs - face.FaceAppearTime = videoLabel.BehaviorAnalysisObject.BehaviorBeginTime - face.FaceDisAppearTime = videoLabel.BehaviorAnalysisObject.BehaviorEndTime + // 杞汉鍛樻秷鎭� + var person vo.PersonObject + person.PersonID = videoLabel.VideoLabelID[0:41] + "01" + videoLabel.VideoLabelID[43:48] + person.InfoKind = "1" + person.DeviceID = videoLabel.IVADeviceID + person.SourceID = videoLabel.VideoImageID + person.LocationMarkTime = videoLabel.BehaviorAnalysisObject.BehaviorBeginTime + person.PersonAppearTime = videoLabel.BehaviorAnalysisObject.BehaviorBeginTime + person.PersonDisAppearTime = videoLabel.BehaviorAnalysisObject.BehaviorEndTime + person.IsDriver = 2 + person.IsCriminalInvolved = 2 var hasTargetImage bool var bgImageWith, bgImageHeight int @@ -104,8 +138,8 @@ bgImage = &videoLabel.SubImageList.SubImageInfoObject[idx] } - face.SubImageList.SubImageInfoObject = append( - face.SubImageList.SubImageInfoObject, + person.SubImageList.SubImageInfoObject = append( + person.SubImageList.SubImageInfoObject, videoLabel.SubImageList.SubImageInfoObject[idx], ) } @@ -129,8 +163,15 @@ return } + imageId := bgImage.ImageID[37:41] + imageNumber, err := strconv.Atoi(imageId) + if err != nil { + imageNumber = rand.Intn(90000) + 10000 + } else { + imageNumber++ + } var subImageInfo = vo.SubImageInfoObject{ - ImageID: bgImage.ImageID + "1", + ImageID: fmt.Sprintf("%s%d", bgImage.ImageID[0:37], imageNumber), EventSort: 10, DeviceID: bgImage.DeviceID, StoragePath: "", @@ -141,23 +182,23 @@ Height: subRect.Top - subRect.Bottom, Data: base64.StdEncoding.EncodeToString(subImage), } - face.SubImageList.SubImageInfoObject = append( - face.SubImageList.SubImageInfoObject, + person.SubImageList.SubImageInfoObject = append( + person.SubImageList.SubImageInfoObject, subImageInfo, ) } // 濡傛灉寮�鍚簡涓嬬骇, 韬唤搴旇鏄秷鎭唬鐞�, 涓嶅啀杞彂鍒版湇鍔″櫒 if config.ClientConf.Enable && config.ServeConf.Role == "agent" { - var faceObjList vo.RequestFaceList - faceObjList.FaceListObject.FaceObject = append(faceObjList.FaceListObject.FaceObject, face) - go a.Repository.VIIDMsgForward(&faceObjList) + var personList vo.RequestPersonList + personList.PersonListObject.PersonObject = append(personList.PersonListObject.PersonObject, person) + go a.Repository.VIIDPersonMsgForward(&personList) } else if config.ServeConf.Role == "cascade" { - go service.AddFaceNotification(&face) + go service.AddPersonNotification(&person) } if config.ForwardConf.SyncServer != "" { - go a.Repository.FaceForward([]vo.FaceObject{face}) + go a.Repository.PersonForward([]vo.PersonObject{person}) } rspMsg := vo.ResponseStatus{ @@ -170,3 +211,40 @@ c.JSON(http.StatusOK, gin.H{"ResponseStatusObject": rspMsg}) } + +func (a CaptureController) Persons(c *gin.Context) { + var req vo.RequestPersonList + if err := c.BindJSON(&req); err != nil { + c.AbortWithStatus(http.StatusBadRequest) + return + } + + if len(req.PersonListObject.PersonObject) == 0 { + c.AbortWithStatus(http.StatusBadRequest) + return + } + + person := req.PersonListObject.PersonObject[0] + logger.Debug("Receive new person message, ip:%s, device Id:%s personId:%s, appearTime:%s", c.RemoteIP(), person.DeviceID, person.PersonID, person.PersonAppearTime) + + // 濡傛灉寮�鍚簡涓嬬骇, 韬唤搴旇鏄秷鎭唬鐞�, 涓嶅啀杞彂鍒版湇鍔″櫒 + if config.ClientConf.Enable && config.ServeConf.Role == "agent" { + go a.Repository.VIIDPersonMsgForward(&req) + } else if config.ServeConf.Role == "cascade" { + go service.AddPersonNotification(&person) + } + + if config.ForwardConf.SyncServer != "" { + go a.Repository.PersonForward(req.PersonListObject.PersonObject) + } + + rspMsg := vo.ResponseStatus{ + RequestURL: c.FullPath(), + StatusCode: vo.StatusSuccess, + StatusString: vo.StatusString[vo.StatusSuccess], + Id: person.PersonID, + LocalTime: time.Now().Format("20060102150405"), + } + + c.JSON(http.StatusOK, gin.H{"ResponseStatusObject": rspMsg}) +} -- Gitblit v1.8.0