panlei
2019-07-13 43876595ecbbf6c41fafc8293713347e8ed4014d
insertdata/insertDataToEs.go
@@ -1,27 +1,30 @@
package insertdata
import (
   "ruleprocess/logger"
   "encoding/json"
   "errors"
   "fmt"
   "io/ioutil"
   "net"
   "ruleprocess/cache"
   "ruleprocess/logger"
   "strings"
   "time"
   "basic.com/pubsub/protomsg.git"
   "github.com/go-yaml/yaml"
   "github.com/golang/protobuf/proto"
   "github.com/satori/go.uuid"
   "ruleprocess/ruleserver"
   "ruleprocess/util"
   "github.com/go-yaml/yaml"
)
var weedfsUrl string
type conf struct {
   PhotoUrl string `yaml:"photoUrl"`
}
func init() {
   data, err := ioutil.ReadFile("./config/conf.yml")
   if err != nil {
@@ -105,7 +108,24 @@
      timeLabel = msg.RuleResult["timeLabel"].(string)
   }
   logger.Debug("插入数据前看看报警标志位:",timeLabel)
   if timeLabel == "10" {
   if timeLabel == "01" { // 无定时器状态要插入的报警数据
      InsertFace(msg)
      InsertYolo(msg)
   }
   if timeLabel == "10" { // 定时器状态要插入的首帧报警数据。连带着定时器开启时的那帧
      InsertFace(msg)
      InsertFace(msg.RuleResult["cacheData"].(ruleserver.ResultMsg))
      InsertYolo(msg)
      InsertYolo(msg.RuleResult["cacheData"].(ruleserver.ResultMsg))
   }
   if timeLabel == "12" { // 并非报警数据,只是状态改变的数据
      ChangeStatusFace(msg)
      ChangeStatusYolo(msg)
   }
}
// 往es中插入人脸数据
func InsertFace(msg ruleserver.ResultMsg) {
      if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]ruleserver.Arg)) > 0 {
         logger.Info("往ES插人脸数据")
         for _, face := range msg.RuleResult["face"].([]ruleserver.Arg) {
@@ -119,26 +139,18 @@
            err = proto.Unmarshal(bdata, &i)
            bigPhotoUrl := make(map[string]interface{})
            bigPhotoUrl, err = util.PostFormBufferData(weedfsUrl, i, uuid.NewV4().String())
            logger.Info(bigPhotoUrl)
            if len(face.Liker) == 0 {
         logger.Debug("========大图路径:", bigPhotoUrl)
               // 人脸检测,没有相似的底库人员
               localConfig, err := cache.GetServerInfo()
               if err != nil {
                  logger.Error("查询本机信息失败!")
               }
               serverIp, err := GetLocalIP()
               // 解压缩并上传图片
               bdata, err := util.UnCompress(msg.Data)
               if err != nil {
                  panic("解压缩图片时出现错误")
               }
               // 查询cameraName
               camera, err := cache.GetCameraById(msg.Cid)
               if err != nil {
                  logger.Error("查询摄像机信息失败")
               }
               i := protomsg.Image{}
               err = proto.Unmarshal(bdata, &i)
               bytes := util.SubImg(i, int(face.Location.X), int(face.Location.Y), int(face.Location.X+face.Location.Width), int(face.Location.Y+face.Location.Height))
               resp, err := util.PostFormBufferData1(weedfsUrl, bytes, uuid.NewV4().String())
               if err != nil {
@@ -183,55 +195,46 @@
                  0,
                  0,
                  0,
                  []*protomsg.Baseinfo{},
            face.Liker,
               }
               requstbody, err := json.Marshal(pervideo)
               if err != nil {
                  logger.Info("json parse error ", err)
                  return
               }
               err1 := EsReq("POST", "http://192.168.1.182:9200/videopersons/perVideoPicture", requstbody)
               if err1 != nil {
                  logger.Error("上传ES出错!---",err1)
               }
               //logger.Info(err.Error())
            } else {
               // 人脸比对
               logger.Warn("___________________________________________这是有baseinfo的")
               localConfig, err := cache.GetServerInfo()
               if err != nil {
                  logger.Info("查询本机信息失败!")
               }
               serverIp, err := GetLocalIP()
   }
}
func ChangeStatusFace(msg ruleserver.ResultMsg) {
   logger.Info("往ES插非报警但是状态转换数据")
      // 上传大图
               // 解压缩并上传图片
               bdata, err := util.UnCompress(msg.Data)
               if err != nil {
                  panic("解压缩图片时出现错误")
               }
      i := protomsg.Image{}
      err = proto.Unmarshal(bdata, &i)
      bigPhotoUrl := make(map[string]interface{})
      bigPhotoUrl, err = util.PostFormBufferData(weedfsUrl, i, uuid.NewV4().String())
      logger.Debug("========大图路径:", bigPhotoUrl)
      // 人脸检测,没有相似的底库人员
      localConfig, err := cache.GetServerInfo()
      if err != nil {
         logger.Error("查询本机信息失败!")
      }
      serverIp, err := GetLocalIP()
               // 查询cameraName
               camera, err := cache.GetCameraById(msg.Cid)
               if err != nil {
                  logger.Error("查询摄像机信息失败")
               }
               i := protomsg.Image{}
               err = proto.Unmarshal(bdata, &i)
               //logger.Info("-------------------------------------------看下宽和高", i.Width, i.Height)
               bytes := util.SubImg(i, int(face.Location.X), int(face.Location.Y), int(face.Location.X+face.Location.Width), int(face.Location.Y+face.Location.Height))
               resp, err := util.PostFormBufferData1(weedfsUrl, bytes, uuid.NewV4().String())
               if err != nil {
                  logger.Error("上传小图出错")
               }
               logger.Info("================小图地址:",resp["fileUrl"].(string))
               sex := ""
               if face.ThftRes.Gender == 1 {
                  sex = "男"
               } else {
                  sex = "女"
               }
               race := getRaceString(face.ThftRes.Race)
               ageDescription := getDescription(face.ThftRes.Age)
               pervideo := PerVideoPicture{
                  uuid.NewV4().String(),
                  msg.Cid,
@@ -241,41 +244,42 @@
                  msg.Tasklab.Taskid,
                  msg.Tasklab.Taskname,
                  "人脸",
                  "",
         "状态转换数据,非报警数据",
                  time.Now().Format("2006-01-02 15:04:05"), // 只检测,没有比对时间
                  sex,
                  face.ThftRes.Age,
                  ageDescription,
                  race,
                  face.ThftRes.Smile,
                  face.ThftRes.Beauty,
                  "",
                  []string{strings.Split(resp["fileUrl"].(string), "/")[1]},
         0,
         "",
         "",
         0,
         0,
         "",
         []string{""},
                  "暂无集群",
                  localConfig.ServerId,
                  localConfig.ServerName,
                  serverIp,
                  "",
                  face.Score,
         0,
                  1,
                  0,
                  0,
                  0,
                  face.Liker,
         []*protomsg.Baseinfo{},
               }
               requstbody, err := json.Marshal(pervideo)
               if err != nil {
                  logger.Error("json parse error ", err)
         logger.Info("json parse error ", err)
                  return
      }
      err1 := EsReq("POST", "http://192.168.1.182:9200/videopersons/perVideoPicture", requstbody)
      if err1 != nil {
         logger.Error("上传ES出错!---", err1)
      }
}
               }
               err = EsReq("POST", "http://192.168.1.182:9200/videopersons/perVideoPicture", requstbody)
               logger.Info("------------------------------------------哈哈哈哈,底库有人")
            }
         }
      }
// 往es中插入yolo数据
func InsertYolo(msg ruleserver.ResultMsg) {
      if msg.RuleResult["yolo"] != nil && len(msg.RuleResult["yolo"].([]ruleserver.Result)) > 0 {
         logger.Info("往ES插yolo数据")
         var sdkNames string = ""
@@ -358,8 +362,72 @@
         }
      }
   }
func ChangeStatusYolo(msg ruleserver.ResultMsg) {
   logger.Info("往ES插yolo非报警状态改变数据")
   var sdkNames string = ""
   alarmRules := []AlarmRule{}
   bdata, err := util.UnCompress(msg.Data)
   if err != nil {
      panic("解压缩图片时出现错误")
}
   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))
   if err != nil {
      logger.Error("画框或上传图片服务器出错", err)
   } else {
      logger.Info("上传的图片信息:", resp)
   }
   // logger.Println("图片上传返回值:", resp)
   // 查询本机信息
   localConfig, err := cache.GetServerInfo()
   if err != nil {
      logger.Error("查询本机信息失败!")
   }
   // 查询cameraName
   camera, err := cache.GetCameraById(msg.Cid)
   if err != nil {
      logger.Error("查询摄像机信息失败")
   }
   serverIp, err := GetLocalIP()
   peraction := Personaction{
      uuid.NewV4().String(),
      msg.Cid,
      camera.Name,
      camera.Addr,
      msg.Tasklab.Taskid,
      msg.Tasklab.Taskname,
      sdkNames,
      "yolo非报警状态改变数据",
      alarmRules,
      localConfig.ServerId,
      localConfig.ServerName,
      serverIp,
      "",
      []string{strings.Split(resp["fileUrl"].(string), "/")[1]},
      time.Now().Format("2006-01-02 15:04:05"),
      "",
      0,
      0,
      0,
      0,
   }
   requstbody, err := json.Marshal(peraction)
   if err != nil {
      logger.Info("json parse error ", err)
      return
   }
   err = EsReq("POST", "http://192.168.1.182:9200/personaction/perVideoAction", requstbody)
   if err != nil {
      logger.Error("往ES插入数据失败", err)
   } else {
      logger.Warn("__________________________________________往ES插入yolo数据成功")
      //os.Exit(1)
   }
}
// 获取本机ip
func GetLocalIP() (ipv4 string, err error) {
   var (