From 5bf9f5cc0ad2689de4e34d628d8ac3168df5142a Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期五, 23 八月 2024 17:41:41 +0800
Subject: [PATCH] 修复编译bug
---
controller/captureCtl.go | 200 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 198 insertions(+), 2 deletions(-)
diff --git a/controller/captureCtl.go b/controller/captureCtl.go
index c17b618..79efc0f 100644
--- a/controller/captureCtl.go
+++ b/controller/captureCtl.go
@@ -1,11 +1,20 @@
package controller
import (
+ "encoding/base64"
+ "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"
@@ -37,10 +46,45 @@
}
face := req.FaceListObject.FaceObject[0]
+ 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)
- 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.UploadType == "url" {
+ for idx, img := range face.SubImageList.SubImageInfoObject {
+ if img.Type != "14" {
+ continue
+ }
- a.Repository.FaceForward(req.FaceListObject.FaceObject)
+ 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.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{
RequestURL: c.FullPath(),
@@ -52,3 +96,155 @@
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 videoLabel message, Id:%s Ip:%s ", videoLabel.VideoLabelID, c.RemoteIP())
+
+ // 杞汉鍛樻秷鎭�
+ 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
+ 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]
+ }
+
+ person.SubImageList.SubImageInfoObject = append(
+ person.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
+ }
+
+ 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: fmt.Sprintf("%s%d", bgImage.ImageID[0:37], imageNumber),
+ 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),
+ }
+ person.SubImageList.SubImageInfoObject = append(
+ person.SubImageList.SubImageInfoObject,
+ subImageInfo,
+ )
+ }
+
+ // 濡傛灉寮�鍚簡涓嬬骇, 韬唤搴旇鏄秷鎭唬鐞�, 涓嶅啀杞彂鍒版湇鍔″櫒
+ if config.ClientConf.Enable && config.ServeConf.Role == "agent" {
+ 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.AddPersonNotification(&person)
+ }
+
+ if config.ForwardConf.SyncServer != "" {
+ go a.Repository.PersonForward([]vo.PersonObject{person})
+ }
+
+ rspMsg := vo.ResponseStatus{
+ RequestURL: c.FullPath(),
+ StatusCode: vo.StatusSuccess,
+ StatusString: vo.StatusString[vo.StatusSuccess],
+ Id: videoLabel.VideoLabelID,
+ LocalTime: time.Now().Format("20060102150405"),
+ }
+
+ 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