| | |
| | | import ( |
| | | "encoding/base64" |
| | | "encoding/json" |
| | | "gat1400Exchange/pkg" |
| | | "time" |
| | | |
| | | "gat1400Exchange/client" |
| | |
| | | "gat1400Exchange/pkg/logger" |
| | | "gat1400Exchange/util" |
| | | "gat1400Exchange/vo" |
| | | |
| | | uuid "github.com/satori/go.uuid" |
| | | ) |
| | | |
| | | type CaptureRepository struct { |
| | |
| | | logger.Warn("SubImageInfoObject is nil") |
| | | continue |
| | | } |
| | | |
| | | var deviceId = face.DeviceID |
| | | var faceId = face.FaceID |
| | | var bgImageStr, imageType string |
| | |
| | | |
| | | // 获取大图, 目前海康的小图分辨率太低 |
| | | for _, image := range face.SubImageList.SubImageInfoObject { |
| | | if imageType != "14" { |
| | | if image.Type != "14" { |
| | | continue |
| | | } |
| | | |
| | |
| | | pd.CameraFloor = face.OtherFeature |
| | | } |
| | | |
| | | // 尝试从faceId提取楼层 |
| | | if pd.CameraFloor == "" { |
| | | pd.CameraFloor, _ = pkg.ParseFloorFromId(face.FaceID) |
| | | } |
| | | //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 |
| | | } |
| | | |
| | | func (c CaptureRepository) PackPushData(deviceId, faceId, faceImage, appearTime string) *vo.PushDataInfo { |
| | | var pd = new(vo.PushDataInfo) |
| | | var device models.Device |
| | | |
| | | if err := device.FindById(deviceId); err != nil { |
| | | logger.Warn("Can't find device in database, device:%s, %s", deviceId, err.Error()) |
| | | return pd |
| | | } |
| | | |
| | | // 匹配楼层 |
| | | faceAppearTime, err := time.ParseInLocation("20060102150405", appearTime, time.Local) |
| | | if err != nil { |
| | | logger.Warn("Parse face appear time error, %s", err.Error()) |
| | | faceAppearTime = time.Now() |
| | | } |
| | | |
| | | // 电梯停止的时间 |
| | | devStopTime := time.Now().Format("2006-01-02 15:04:05") |
| | | var devPos models.Positions |
| | | _ = devPos.FindDevicePosition(deviceId, faceAppearTime.Unix()+5) // 加5秒电梯关门的时间 |
| | | if devPos.TimeString != "" { |
| | | devStopTime = devPos.TimeString |
| | | } |
| | | |
| | | imageBytes, err := base64.StdEncoding.DecodeString(faceImage) |
| | | if err != nil { |
| | | logger.Warn("Decode Image Base64 String failure, %s", err.Error()) |
| | | return pd |
| | | } |
| | | |
| | | pd.PicMaxImages = append(pd.PicMaxImages, imageBytes) |
| | | |
| | | tr := vo.TaskResultInfo{ |
| | | Id: uuid.NewV4().String(), |
| | | CameraId: deviceId, |
| | | CameraAddr: device.Addr + devPos.Pos, |
| | | CameraName: device.Name, |
| | | PicMaxUrl: []string{""}, |
| | | PicDate: faceAppearTime.Format("2006-01-02 15:04:05"), |
| | | LikeDate: devStopTime, |
| | | AnalyServerId: deviceId, |
| | | DataSource: "camera", |
| | | TargetInfo: []vo.TargetInfo{{TargetId: faceId}}, |
| | | } |
| | | |
| | | pd.SourceData = vo.ESInfo{ |
| | | TaskResultInfo: tr, |
| | | Version: "3.3", |
| | | UpdateTime: time.Now().Format("2006-01-02 15:04:05"), |
| | | } |
| | | |
| | | return pd |
| | | } |
| | | |
| | | func (c CaptureRepository) PackPushDataV2(deviceId, faceId, appearTime string, bgImgBytes, faceImgBytes []byte) *vo.PushDataInfoV2 { |
| | | var pd = new(vo.PushDataInfoV2) |
| | | var floor string |
| | |
| | | } |
| | | |
| | | if config.ServeConf.Role == "server" { |
| | | var device models.Device |
| | | |
| | | if err := device.FindById(deviceId); err != nil { |
| | | logger.Warn("Can't find device in database, device:%s, %s", deviceId, err.Error()) |
| | | return pd |
| | | } |
| | | |
| | | // 匹配楼层 |
| | | var devPos models.Positions |
| | | _ = devPos.FindDevicePosition(deviceId, faceAppearTime.Unix()+5) // 加5秒电梯关门的时间 |
| | | if devPos.Pos == "" { |
| | | devPos.Pos = device.Floor |
| | | } |
| | | |
| | | floor = devPos.Pos |
| | | } |
| | |
| | | devPos.Pos = "1F" |
| | | } |
| | | |
| | | for idx, _ := range msg.FaceListObject.FaceObject { |
| | | for idx, face := range msg.FaceListObject.FaceObject { |
| | | msg.FaceListObject.FaceObject[idx].OtherFeature = devPos.Pos |
| | | msg.FaceListObject.FaceObject[idx].FaceID = pkg.GenerateFaceIdContainFloor(face.FaceID, devPos.Pos) |
| | | } |
| | | |
| | | b, _ := json.Marshal(msg) |