panlei
2019-08-19 4749b32044bac02b7892de235d3d1d59334242a2
insertdata/insertDataToEs.go
@@ -9,6 +9,7 @@
   "net"
   "ruleprocess/cache"
   "ruleprocess/logger"
   "ruleprocess/structure"
   "strings"
   "time"
@@ -77,7 +78,7 @@
   IsAckAlarm      int                    `json:"isAckAlarm"`
   IsCollect       int                    `json:"isCollect"`
   IsDelete        int                    `json:"isDelete"`
   BaseInfo        []*ruleserver.BaseInfo `json:"baseInfo"`
   BaseInfo        []*structure.BaseInfo `json:"baseInfo"`
}
//  yolo行为的数据结构
@@ -110,12 +111,13 @@
   AlarmLevel   string `json:"alarmLevel"`
   RuleText     string `json:"ruleText"`
   DefenceState bool   `json:"defenceState"`
   IsLink       bool   `json:"isLink"`
}
// 一个face对多个规则组的归置人脸的结构体
type FaceAndRules struct {
   ruleserver.Arg
   rules []ruleserver.Result
   structure.Arg
   rules []structure.Result
}
// 往ES插数据
@@ -142,7 +144,7 @@
//   //   ChangeStatusYolo(msg)
//   //}
//}
func InsertToEs(msg ruleserver.ResultMsg) {
func InsertToEs(msg structure.ResultMsg) {
   InsertFace(msg, "")
   // 如果标签中含有持续时间首次报警的timeLabel的话则不需要过人体追踪,不然就没的插入了
   fk := ruleserver.TrackOrNot(msg.RuleResult)
@@ -161,8 +163,8 @@
}
// 往es中插入人脸数据
func InsertFace(msg ruleserver.ResultMsg, linkId string) {
   if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]ruleserver.FaceResult)) > 0 {
func InsertFace(msg structure.ResultMsg, linkId string) {
   if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]structure.FaceResult)) > 0 {
      logger.Info("往ES插人脸数据")
      faces := []*FaceAndRules{}
      faces = PutFace(faces,msg)
@@ -180,7 +182,7 @@
            //os.Exit(1)
            for _,faceResult := range face.rules {
               alarm := ChangeToString(faceResult.DefenceState, faceResult.AlarmLevel)
               alarmRules = append(alarmRules, AlarmRule{faceResult.RuleGroupId, alarm, faceResult.RuleText, faceResult.DefenceState})
               alarmRules = append(alarmRules, AlarmRule{faceResult.RuleGroupId, alarm, faceResult.RuleText, faceResult.DefenceState,faceResult.IsLink})
            }
            i := protomsg.Image{}
            err = proto.Unmarshal(bdata, &i)
@@ -270,9 +272,9 @@
}
// 归置人脸
func PutFace(faces []*FaceAndRules,msg ruleserver.ResultMsg)[]*FaceAndRules{
   if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]ruleserver.FaceResult)) > 0 {
      for _, faceResult := range msg.RuleResult["face"].([]ruleserver.FaceResult) {
func PutFace(faces []*FaceAndRules,msg structure.ResultMsg)[]*FaceAndRules{
   if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]structure.FaceResult)) > 0 {
      for _, faceResult := range msg.RuleResult["face"].([]structure.FaceResult) {
         faces = hebingFace(faces, faceResult)
      }
      return faces
@@ -280,33 +282,46 @@
      return nil
   }
}
func hebingFace(faces []*FaceAndRules, faceResult ruleserver.FaceResult) []*FaceAndRules{
func hebingFace(faces []*FaceAndRules, faceResult structure.FaceResult) []*FaceAndRules{
   for _, arg := range faceResult.Args {
      // 拿到每一张人脸
      logger.Info("归置人脸时相似者的数量:",len(arg.Liker))
      flag := false
      for _, face := range faces {
         logger.Info("归置人脸时相似者的数量:",len(face.Liker))
         for _,lik := range face.Liker {
            logger.Warn("--------合并人脸时相似者:",lik.PersonId,lik.TableName)
         }
         if arg.Id == face.Id {
            flag = true
            face.rules = append(face.rules,faceResult.Result)
            // 相似者去重归并
            for _,liker := range arg.Liker {
               flag1 := true
               for _,liker1 := range face.Liker {
                  if liker.PersonId == liker1.PersonId {
                     flag1 = false
                  }
               }
               if flag1 {
                  face.Liker = append(face.Liker,liker)
               }
            }
            //face.Liker = append(face.Liker,arg.Liker...)
         }
      }
      if !flag {
         faces = append(faces, &FaceAndRules{arg, []ruleserver.Result{faceResult.Result}})
         faces = append(faces, &FaceAndRules{arg, []structure.Result{faceResult.Result}})
      }
   }
   return faces
}
// 往es中插入yolo数据
func InsertYolo(msg ruleserver.ResultMsg, linkId string) {
   if msg.RuleResult["yolo"] != nil && len(msg.RuleResult["yolo"].([]ruleserver.Result)) > 0 {
func InsertYolo(msg structure.ResultMsg, linkId string) {
   if msg.RuleResult["yolo"] != nil && len(msg.RuleResult["yolo"].([]structure.Result)) > 0 {
      // 先判断一下数据带的规则标签是否有可以插入的
      flag := false
      for _, res := range msg.RuleResult["yolo"].([]ruleserver.Result) {
      for _, res := range msg.RuleResult["yolo"].([]structure.Result) {
         //logger.Info("定时器打的数字标签:",res.Others.TimeLabel)
         if res.Others.TimeLabel == "01" || res.Others.TimeLabel == "10" {
            flag = true
@@ -317,13 +332,13 @@
         var sdkNames string = ""
         alarmRules := []AlarmRule{}
         url := []string{}
         for _, yoloResult := range msg.RuleResult["yolo"].([]ruleserver.Result) {
         for _, yoloResult := range msg.RuleResult["yolo"].([]structure.Result) {
            if yoloResult.Others.TimeLabel == "01" || yoloResult.Others.TimeLabel == "10" {
               // 拼出sdkname
               //logger.Info("应该进来才对的")
               sdkNames = sdkNames + yoloResult.SdkName
               alarm := ChangeToString(yoloResult.DefenceState, yoloResult.AlarmLevel)
               alarmRules = append(alarmRules, AlarmRule{yoloResult.RuleGroupId, alarm, yoloResult.RuleText, yoloResult.DefenceState})
               alarmRules = append(alarmRules, AlarmRule{yoloResult.RuleGroupId, alarm, yoloResult.RuleText, yoloResult.DefenceState,yoloResult.IsLink})
               // 上传缓存数据的图片拿到url
               if yoloResult.Others.CacheData != nil {
                  //InsertYolo(msg.RuleResult["cacheData"].(ruleserver.ResultMsg))
@@ -337,7 +352,7 @@
                     }
                     i := protomsg.Image{}
                     err = proto.Unmarshal(bdata, &i)
                     resp1, err1 := util.DrawPolygonOnImage(msg1.Cid, i, msg1.RuleResult["yolo"].([]ruleserver.Result), weedfsUrl)
                     resp1, err1 := util.DrawPolygonOnImage(msg1.Cid, i, msg1.RuleResult["yolo"].([]structure.Result), weedfsUrl)
                     if err1 != nil {
                        logger.Error("缓存数据画框或上传图片服务器出错", err)
                     } else {
@@ -349,7 +364,7 @@
            }
         }
         linkFlag := false
         for _, yoloResult := range msg.RuleResult["yolo"].([]ruleserver.Result) {
         for _, yoloResult := range msg.RuleResult["yolo"].([]structure.Result) {
            if (yoloResult.Others.TimeLabel == "01" || yoloResult.Others.TimeLabel == "10") && yoloResult.Others.LinkCache != nil && len(yoloResult.Others.LinkCache) > 1 {
               linkId := uuid.NewV4().String()
               for _, msg2 := range yoloResult.Others.LinkCache {
@@ -378,7 +393,7 @@
         if len(alarmRules) > 0 {
            isAlarm = 1
            //resp, err = util.PostFormBufferData(weedfsUrl, i, uuid.NewV4().String())
            resp, err = util.DrawPolygonOnImage(msg.Cid, i, msg.RuleResult["yolo"].([]ruleserver.Result), weedfsUrl)
            resp, err = util.DrawPolygonOnImage(msg.Cid, i, msg.RuleResult["yolo"].([]structure.Result), weedfsUrl)
            if err != nil {
               logger.Error("画框或上传图片服务器出错", err)
            } else {
@@ -453,7 +468,7 @@
      }
   }
}
func ChangeStatusYolo(msg ruleserver.ResultMsg) {
func ChangeStatusYolo(msg structure.ResultMsg) {
   logger.Info("往ES插yolo非报警状态改变数据")
   var sdkNames string = ""
   alarmRules := []AlarmRule{}
@@ -464,7 +479,7 @@
   i := protomsg.Image{}
   err = proto.Unmarshal(bdata, &i)
   //resp, err = util.PostFormBufferData(weedfsUrl, i, uuid.NewV4().String())
   resp, err := util.DrawPolygonOnImage(msg.Cid, i, msg.RuleResult["yolo"].([]ruleserver.Result), weedfsUrl)
   resp, err := util.DrawPolygonOnImage(msg.Cid, i, msg.RuleResult["yolo"].([]structure.Result), weedfsUrl)
   if err != nil {
      logger.Error("画框或上传图片服务器出错", err)
   } else {
@@ -524,7 +539,7 @@
      //os.Exit(1)
   }
}
func ChangeStatusFace(msg ruleserver.ResultMsg) {
func ChangeStatusFace(msg structure.ResultMsg) {
   logger.Info("往ES插入人脸非报警但是状态转换数据")
   // 上传大图
   // 解压缩并上传图片
@@ -581,7 +596,7 @@
      0,
      0,
      0,
      []*ruleserver.BaseInfo{},
      []*structure.BaseInfo{},
   }
   requstbody, err := json.Marshal(pervideo)