zhangzengfei
2024-05-27 4c2afb8dcff9ed2438fcf71a95188d4e8bc60d07
controller/captureCtl.go
@@ -1,7 +1,9 @@
package controller
import (
   "encoding/base64"
   "gat1400Exchange/config"
   "gat1400Exchange/pkg"
   "gat1400Exchange/service"
   "net/http"
   "time"
@@ -52,9 +54,6 @@
      go a.Repository.FaceForward(req.FaceListObject.FaceObject)
   }
   // 设备保活
   service.KeepDeviceAlive(face.DeviceID)
   rspMsg := vo.ResponseStatus{
      RequestURL:   c.FullPath(),
      StatusCode:   vo.StatusSuccess,
@@ -65,6 +64,7 @@
   c.JSON(http.StatusOK, gin.H{"ResponseStatusObject": rspMsg})
}
func (a CaptureController) VideoLabels(c *gin.Context) {
   var req vo.RequestVideoLabelList
   if err := c.BindJSON(&req); err != nil {
@@ -78,27 +78,80 @@
   }
   videoLabel := req.VideoLabelListObject.VideoLabelObject[0]
   logger.Debug("Receive new message, Id:%s Ip:%s faceId:%s, LeftTopX:%d, appearTime:%s", c.RemoteIP(), videoLabel.VideoLabelID)
   logger.Debug("Receive new 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.SourceID = videoLabel.VideoImageID
   face.DeviceID = videoLabel.IVADeviceID
   face.LocationMarkTime = videoLabel.CreateTimeAbs
   face.FaceAppearTime = videoLabel.BehaviorAnalysisObject.BehaviorBeginTime
   face.FaceDisAppearTime = videoLabel.BehaviorAnalysisObject.BehaviorEndTime
   for idx, _ := range videoLabel.SubImageList.SubImageInfoObject {
   var hasTargetImage bool
   var bgImageWith, bgImageHeight int
   var bgImage *vo.SubImageInfoObject
   for idx, img := range videoLabel.SubImageList.SubImageInfoObject {
      videoLabel.SubImageList.SubImageInfoObject[idx].EventSort = 10
      // 判断是否有小图, 如果没有切一张
      if img.Type == "14" {
         bgImageWith, bgImageHeight = img.Width, img.Height
      } else {
         hasTargetImage = true
         bgImage = &videoLabel.SubImageList.SubImageInfoObject[idx]
      }
      face.SubImageList.SubImageInfoObject = append(
         face.SubImageList.SubImageInfoObject,
         videoLabel.SubImageList.SubImageInfoObject[idx],
      )
   }
   face.SubImageList.SubImageInfoObject = videoLabel.SubImageList.SubImageInfoObject
   if !hasTargetImage && bgImage != nil {
      imgData, err := base64.StdEncoding.DecodeString(bgImage.Data)
      if err != nil {
         c.AbortWithStatus(http.StatusBadRequest)
         return
      }
      var subRect pkg.Rect
      subRect.Left = bgImageWith / 3
      subRect.Top = bgImageHeight / 3
      subRect.Right = subRect.Left * 2
      subRect.Bottom = subRect.Top * 2
      subImage, err := pkg.SubCutImage(imgData, &subRect, 0)
      if err != nil {
         c.AbortWithStatus(http.StatusBadRequest)
         return
      }
      var subImageInfo = vo.SubImageInfoObject{
         ImageID:     bgImage.ImageID + "1",
         EventSort:   10,
         DeviceID:    bgImage.DeviceID,
         StoragePath: "",
         Type:        "11",
         FileFormat:  "Jpeg",
         ShotTime:    bgImage.ShotTime,
         Width:       subRect.Right - subRect.Left,
         Height:      subRect.Top - subRect.Bottom,
         Data:        base64.StdEncoding.EncodeToString(subImage),
      }
      face.SubImageList.SubImageInfoObject = append(
         face.SubImageList.SubImageInfoObject,
         subImageInfo,
      )
   }
   // 如果开启了下级, 身份应该是消息代理, 不再转发到服务器
   if config.ClientConf.Enable && config.ServeConf.Role == "agent" {
      //go a.Repository.VIIDMsgForward(&req)
      var faceObjList vo.RequestFaceList
      faceObjList.FaceListObject.FaceObject = append(faceObjList.FaceListObject.FaceObject, face)
      go a.Repository.VIIDMsgForward(&faceObjList)
   } else if config.ServeConf.Role == "cascade" {
      go service.AddFaceNotification(&face)
   }
@@ -106,9 +159,6 @@
   if config.ForwardConf.SyncServer != "" {
      go a.Repository.FaceForward([]vo.FaceObject{face})
   }
   // 设备保活
   service.KeepDeviceAlive(videoLabel.IVADeviceID)
   rspMsg := vo.ResponseStatus{
      RequestURL:   c.FullPath(),