panlei
2019-12-05 cbe73e3706a6494b506febd0e4a51ce1096aae1f
insertdata/insertDataToEs.go
@@ -1,19 +1,20 @@
package insertdata
import (
   "basic.com/valib/logger.git"
   "encoding/base64"
   "encoding/json"
   "errors"
   "net"
   "ruleprocess/cache"
   "ruleprocess/structure"
   "strconv"
   "time"
   "basic.com/pubsub/protomsg.git"
   "github.com/golang/protobuf/proto"
   "github.com/satori/go.uuid"
   logger "github.com/alecthomas/log4go"
   "ruleprocess/cache"
   "ruleprocess/structure"
   "basic.com/pubsub/protomsg.git"
   "ruleprocess/ruleserver"
   "ruleprocess/util"
)
@@ -27,43 +28,6 @@
   ServerIp       string `yaml:"serverIp"`
   ServerPort     string `yaml:"serverPort"`
   DbTablePersons string `yaml:"dbTablePersons"`
}
//func InitInsertEs() {
//   weedfsUrl = "http://"+WeedFs.Ip+":"+strconv.Itoa(WeedFs.UploadPort)+"/submit"
//   videoPersonUrl = "http://"+EsInfo.Masterip+":"+EsInfo.Httpport+"/"+EsInfo.EsIndex.VideoPersons.IndexName+"/"+EsInfo.EsIndex.VideoPersons.IndexType
//   personAction = "http://"+EsInfo.Masterip+":"+EsInfo.Httpport+"/"+EsInfo.EsIndex.Personaction.IndexName+"/"+EsInfo.EsIndex.Personaction.IndexType
//}
// 人脸的数据结构
type PerVideoPicture struct {
   Id              string                `json:"id"`
   CameraId        string                `json:"cameraId"`
   CameraAddr      string                `json:"cameraAddr"`
   CameraName      string                `json:"cameraName"`
   PicDate         string                `json:"picDate"`
   PicMaxUrl       []string              `json:"picMaxUrl"`
   TaskId          string                `json:"taskId"`
   TaskName        string                `json:"taskName"`
   SdkName         string                `json:"sdkName"`
   Content         string                `json:"content"`
   AlarmRules      []AlarmRule           `json:"alarmRules"`
   LikeDate        string                `json:"likeDate"`
   ShowLabels      string                `json:"showLabels"`
   OtherLabels     string                `json:"otherLabels"`
   VideoUrl        string                `json:"videoUrl"`
   AnalyServerId   string                `json:"analyServerId"`
   AnalyServerName string                `json:"analyServerName"`
   AnalyServerIp   string                `json:"analyServerIp"`
   ClusterId       string                `json:"clusterId"`
   IsAlarm         bool                  `json:"isAlarm"`
   IsAckAlarm      bool                  `json:"isAckAlarm"`
   IsCollect       bool                  `json:"isCollect"`
   IsDelete        bool                  `json:"isDelete"`
   BaseInfo        []*structure.BaseInfo `json:"baseInfo"`
   TargetInfo      []Target              `json:"targetInfo"`
   LinkTag         string                `json:"linkTag"`
   LinkTagInfo     []*LinkInfo           `json:"linkTagInfo"`
}
type LinkInfo struct {
@@ -94,13 +58,24 @@
   TargetInfo      []Target              `json:"targetInfo"`
}
type Target struct {
//  统一的数据结构
type PerVideoPicture struct {
   LinkInfo
   LinkTag         string                `json:"linkTag"`
   LinkTagInfo     []*LinkInfo           `json:"linkTagInfo"`
}
type SourceTarget struct {
   TargetId       string  `json:"targetId"`
   TargetScore    float64 `json:"targetScore"`
   TargetType     string  `json:"targetType"`
   Feature        string  `json:"feature"`
   PicSmUrl       string  `json:"picSmUrl"`
   TargetLocation Points  `json:"targetLocation"`
}
type Target struct {
   SourceTarget
   AttachTarget SourceTarget
}
type Points struct {
@@ -138,7 +113,7 @@
      panic("配置文件不合法")
   }
   weedfsUrl = "http://" + localConfig1.WebPicIp + ":" + strconv.Itoa(int(localConfig1.WebPicPort)) + "/submit"
   videoPersonUrl = "http://" + localConfig1.AlarmIp + ":" + strconv.Itoa(int(localConfig1.AlarmPort)) + "/" + EsInfo.EsIndex.AIOcean.IndexName + "/" + EsInfo.EsIndex.AIOcean.IndexType
   videoPersonUrl = "http://" + localConfig1.AlarmIp + ":" + strconv.Itoa(int(localConfig1.AlarmPort)) + "/" + EsInfo.EsIndex.AIOcean.IndexName + "/" + EsInfo.EsIndex.AIOcean.IndexType+"?refresh=true"
   InsertFace(msg)
   InsertYolo(msg)
   InsertTarget(msg)
@@ -146,14 +121,15 @@
// 往es中插入人脸类型数据
func InsertFace(msg structure.ResultMsg) {
   if (msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]structure.Result)) > 0) || (msg.RuleResult["plate"] != nil && len(msg.RuleResult["plate"].([]structure.Result)) > 0) {
   if (msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]structure.Result)) > 0) || (msg.RuleResult["plate"] != nil && len(msg.RuleResult["plate"].([]structure.Result)) > 0) || (msg.RuleResult["track"] != nil && len(msg.RuleResult["track"].([]structure.Result)) > 0) {
      for key, results := range msg.RuleResult {
         if key == "face" || key == "plate" {
         if key == "face" || key == "plate" || key == "track"{
            logger.Info("往ES插人脸数据(或车牌数据)")
            faces := []*ObjAndRules{}
            faces = PutFace(faces, results.([]structure.Result))
            //logger.Info("整理后的数据:",faces)
            if faces != nil {
               logger.Warn("face不为nil")
               var imgMaxUrl []string = []string{}
               var picTime string = ""
               for _, face := range faces {
@@ -164,6 +140,7 @@
                     panic("解压缩图片时出现错误")
                  }
                  alarmRules := []AlarmRule{}
                  //logger.Info("循环每一个目标")
                  for _, faceResult := range face.rules {
                     alarm := ChangeToString(faceResult.DefenceState, faceResult.AlarmLevel)
                     alarmRules = append(alarmRules, AlarmRule{faceResult.RuleGroupId, alarm, faceResult.RuleText, faceResult.DefenceState, ""})
@@ -192,6 +169,7 @@
                  target.Feature = base64.StdEncoding.EncodeToString(face.Feature)
                  target.PicSmUrl = resp["fileUrl"].(string)
                  target.TargetLocation = Points{TopLeft: Point{face.Location.X, face.Location.Y}, BottomRight: Point{face.Location.X + face.Location.Width, face.Location.Y + face.Location.Height}}
                  target.AttachTarget = SourceTarget{face.AttachArg.Id,face.AttachArg.Score,face.AttachArg.Type,base64.StdEncoding.EncodeToString(face.AttachArg.Feature),"",Points{TopLeft: Point{face.AttachArg.Location.X, face.AttachArg.Location.Y}, BottomRight: Point{face.AttachArg.Location.X + face.AttachArg.Location.Width, face.AttachArg.Location.Y + face.AttachArg.Location.Height}}}
                  var targetInfos []Target
                  targetInfos = append(targetInfos, *target)
@@ -202,8 +180,8 @@
                  case "plate":
                     sdkname = "车牌识别"
                  }
                  logger.Info("人脸目标target:",targetInfos)
                  pervideo := PerVideoPicture{
                  //logger.Info("人脸目标target:",targetInfos)
                  pervideo := PerVideoPicture{LinkInfo{
                     face.Uuid,
                     msg.Cid,
                     msg.Push.Cam.Addr,
@@ -229,6 +207,7 @@
                     false,
                     face.Liker,
                     targetInfos,
                  },
                     "",
                     []*LinkInfo{},
                  }
@@ -322,7 +301,7 @@
                  linkInfo = "联动任务"
               }
               alarmRules = append(alarmRules, AlarmRule{yoloResult.RuleGroupId, alarm, yoloResult.RuleText, yoloResult.DefenceState, linkInfo})
               logger.Info("打印任务名称:", )
               //logger.Info("打印任务名称:", )
               // 上传缓存数据的图片拿到url
               if yoloResult.Others.CacheData != nil {
                  //InsertYolo(msg.RuleResult["cacheData"].(ruleserver.ResultMsg))
@@ -361,7 +340,7 @@
                     var target1 = new(Target)
                     target1.TargetId = target.Id
                     target1.TargetScore = target.Score
                     target1.TargetType = target.Type
                     target1.TargetType = "action"
                     target1.TargetLocation = Points{TopLeft: Point{target.Location.X, target.Location.Y}, BottomRight: Point{target.Location.X + target.Location.Width, target.Location.Y + target.Location.Height}}
                     targetInfos = append(targetInfos, *target1)
                  }
@@ -411,7 +390,7 @@
         if resp["fileUrl"] != nil {
            url = append(url, resp["fileUrl"].(string))
            //esDataId := uuid.NewV4().String()
            peraction := PerVideoPicture{
            peraction := PerVideoPicture{LinkInfo{
               msg.Push.PushId,
               msg.Cid,
               msg.Push.Cam.Addr,
@@ -437,6 +416,7 @@
               false,
               nil,
               targetInfos,
            },
               linkTag,
               linkTagInfos,
            }
@@ -562,7 +542,7 @@
                  var target1 = new(Target)
                  target1.TargetId = target.Id
                  target1.TargetScore = target.Score
                  target1.TargetType = target.Type
                  target1.TargetType = "action"
                  target1.TargetLocation = Points{TopLeft: Point{target.Location.X, target.Location.Y}, BottomRight: Point{target.Location.X + target.Location.Width, target.Location.Y + target.Location.Height}}
                  targetInfos = append(targetInfos, *target1)
               }
@@ -573,7 +553,7 @@
                  return
               }
               //esDataId := uuid.NewV4().String()
               peraction := PerVideoPicture{
               peraction := PerVideoPicture{LinkInfo{
                  msg.Push.PushId,
                  msg.Cid,
                  msg.Push.Cam.Addr,
@@ -599,6 +579,7 @@
                  false,
                  nil,
                  targetInfos,
               },
                  linkTag,
                  linkTagInfos,
               }