| | |
| | | } |
| | | |
| | | func (c CaptureRepository) FaceForward(faceList []vo.FaceObject) { |
| | | var err error |
| | | |
| | | if faceList == nil || len(faceList) == 0 { |
| | | logger.Warn("FaceList is nil") |
| | | return |
| | |
| | | |
| | | var deviceId = face.DeviceID |
| | | var faceId = face.FaceID |
| | | var faceImageStr string |
| | | var bgImageStr, imageType string |
| | | var bgImageBytes, faceImageBytes []byte = nil, nil |
| | | |
| | | // 获取大图, 目前海康的小图分辨率太低 |
| | | for _, image := range face.SubImageList.SubImageInfoObject { |
| | | if len(image.Data) > len(faceImageStr) { |
| | | faceImageStr = image.Data |
| | | if len(image.Data) > len(bgImageStr) { |
| | | bgImageStr = image.Data |
| | | imageType = image.Type |
| | | } |
| | | } |
| | | |
| | | bgImageBytes, err = base64.StdEncoding.DecodeString(bgImageStr) |
| | | if err != nil { |
| | | logger.Warn("Decode Image Base64 String failure, %s", err.Error()) |
| | | continue |
| | | } |
| | | |
| | | // 判断图片类型是否为场景图, 根据人脸坐标切小图. |
| | | if imageType == "14" { |
| | | faceRect := &vo.Rect{ |
| | | Left: face.LeftTopX, |
| | | Top: face.LeftTopY, |
| | | Right: face.RightBtmX, |
| | | Bottom: face.RightBtmY, |
| | | } |
| | | |
| | | faceImageBytes, err = util.SubCutImg(bgImageBytes, faceRect, 90) |
| | | if err != nil { |
| | | logger.Warn("Cut face image failure, %s", err.Error()) |
| | | } |
| | | } |
| | | |
| | | // 转发图像 |
| | | logger.Debug("Prepare forward image, deviceId:%s, image len:%d, server:%s", deviceId, len(faceImageStr), config.ForwardConf.SyncServer) |
| | | if deviceId != "" && faceImageStr != "" && config.ForwardConf.SyncServer != "" { |
| | | pd := c.PackPushDataV2(deviceId, faceId, faceImageStr, face.FaceAppearTime) |
| | | logger.Debug("Prepare forward image, deviceId:%s, image len:%d, server:%s", deviceId, len(bgImageStr), config.ForwardConf.SyncServer) |
| | | if deviceId != "" && bgImageStr != "" && config.ForwardConf.SyncServer != "" { |
| | | pd := c.PackPushDataV2(deviceId, faceId, face.FaceAppearTime, bgImageBytes, faceImageBytes) |
| | | if pd == nil { |
| | | return |
| | | } |
| | |
| | | return pd |
| | | } |
| | | |
| | | func (c CaptureRepository) PackPushDataV2(deviceId, faceId, faceImage, appearTime string) *vo.PushDataInfoV2 { |
| | | func (c CaptureRepository) PackPushDataV2(deviceId, faceId, appearTime string, bgImgBytes, faceImgBytes []byte) *vo.PushDataInfoV2 { |
| | | var pd = new(vo.PushDataInfoV2) |
| | | var device models.Device |
| | | |
| | |
| | | devPos.Pos = device.Pos |
| | | } |
| | | |
| | | 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, bgImgBytes) |
| | | |
| | | if faceImgBytes != nil { |
| | | pd.PicSmImages = append(pd.PicSmImages, faceImgBytes) |
| | | } |
| | | |
| | | pd.PicMaxImages = append(pd.PicMaxImages, imageBytes) |
| | | pd.PicId = faceId |
| | | pd.PicDate = faceAppearTime.Format("2006-01-02 15:04:05") |
| | | pd.DataSource = "camera" |