From 4c2afb8dcff9ed2438fcf71a95188d4e8bc60d07 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期一, 27 五月 2024 02:15:10 +0800
Subject: [PATCH] 添加A2梯控的osd

---
 controller/captureCtl.go |  133 ++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 127 insertions(+), 6 deletions(-)

diff --git a/controller/captureCtl.go b/controller/captureCtl.go
index 6be11e0..a6fc5cb 100644
--- a/controller/captureCtl.go
+++ b/controller/captureCtl.go
@@ -1,6 +1,10 @@
 package controller
 
 import (
+	"encoding/base64"
+	"gat1400Exchange/config"
+	"gat1400Exchange/pkg"
+	"gat1400Exchange/service"
 	"net/http"
 	"time"
 
@@ -31,19 +35,136 @@
 		return
 	}
 
-	var faceId string
-	if len(req.FaceListObject.FaceObject) > 0 {
-		faceId = req.FaceListObject.FaceObject[0].FaceID
+	if len(req.FaceListObject.FaceObject) == 0 {
+		c.AbortWithStatus(http.StatusBadRequest)
+		return
 	}
-	logger.Debug("鎺ユ敹鍒颁汉鑴告暟鎹�, faceId:%s", faceId)
 
-	a.Repository.FaceForward(req.FaceListObject.FaceObject)
+	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)
+
+	// 濡傛灉寮�鍚簡涓嬬骇, 韬唤搴旇鏄秷鎭唬鐞�, 涓嶅啀杞彂鍒版湇鍔″櫒
+	if config.ClientConf.Enable && config.ServeConf.Role == "agent" {
+		go a.Repository.VIIDMsgForward(&req)
+	} else if config.ServeConf.Role == "cascade" {
+		go service.AddFaceNotification(&face)
+	}
+
+	if config.ForwardConf.SyncServer != "" {
+		go a.Repository.FaceForward(req.FaceListObject.FaceObject)
+	}
 
 	rspMsg := vo.ResponseStatus{
 		RequestURL:   c.FullPath(),
 		StatusCode:   vo.StatusSuccess,
 		StatusString: vo.StatusString[vo.StatusSuccess],
-		Id:           faceId,
+		Id:           face.FaceID,
+		LocalTime:    time.Now().Format("20060102150405"),
+	}
+
+	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 {
+		c.AbortWithStatus(http.StatusBadRequest)
+		return
+	}
+
+	if len(req.VideoLabelListObject.VideoLabelObject) == 0 {
+		c.AbortWithStatus(http.StatusBadRequest)
+		return
+	}
+
+	videoLabel := req.VideoLabelListObject.VideoLabelObject[0]
+	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.DeviceID = videoLabel.IVADeviceID
+	face.LocationMarkTime = videoLabel.CreateTimeAbs
+	face.FaceAppearTime = videoLabel.BehaviorAnalysisObject.BehaviorBeginTime
+	face.FaceDisAppearTime = videoLabel.BehaviorAnalysisObject.BehaviorEndTime
+
+	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],
+		)
+	}
+
+	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" {
+		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)
+	}
+
+	if config.ForwardConf.SyncServer != "" {
+		go a.Repository.FaceForward([]vo.FaceObject{face})
+	}
+
+	rspMsg := vo.ResponseStatus{
+		RequestURL:   c.FullPath(),
+		StatusCode:   vo.StatusSuccess,
+		StatusString: vo.StatusString[vo.StatusSuccess],
+		Id:           videoLabel.VideoLabelID,
 		LocalTime:    time.Now().Format("20060102150405"),
 	}
 

--
Gitblit v1.8.0