panlei
2019-12-05 4452794b46d66af2f83878855af7571857d946fa
ruleserver/readyDataForRule.go
@@ -3,12 +3,11 @@
import (
   "basic.com/dbapi.git"
   "basic.com/pubsub/protomsg.git"
   logger "github.com/alecthomas/log4go"
   "encoding/json"
   "errors"
   "fmt"
   logger "github.com/alecthomas/log4go"
   "github.com/golang/protobuf/proto"
   uuid "github.com/satori/go.uuid"
   "math"
   "nanomsg.org/go-mangos"
   "nanomsg.org/go-mangos/protocol/req"
@@ -229,48 +228,48 @@
}
// 计算区域内的目标数量以及将相似度、占比、尺寸等打包
func CountAreaObjs(a *structure.AreaMap,arg *structure.SdkData) {
   a.TargetNum = 0
   threshold := 80.0       // 相似度
   intersectionper := 20.0 // 占比
   size := 0.0            // 尺寸
   areaPoints := Json2points(a.AreaJson)
   logger.Info("看看图片的width和height:",arg.ImageWidth,arg.ImageHeight)
   widthScale := float64(arg.ImageWidth) / 960
   heigthScale := float64(arg.ImageHeight) / 540
   for _, obj := range arg.Photo {
      //logger.Info("------------------看看sdkData:", arg.SdkName, "的Photo数据----------------", obj, "----顺便看看占比-----:", PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale))
      if  obj.Score >= threshold && float64(obj.Rects.Width*obj.Rects.Height) >= size && PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale) >= intersectionper {
         // 这步要备齐表达式里所需要的所有参数
         a.TargetNum++
         uuid := uuid.NewV4().String()
         arg1 := structure.Arg{obj.Id,uuid,obj.Score, PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), a.AreaJson,obj.Type, obj.Rects, obj.Car,obj.Feature, obj.ThftRes, []*structure.BaseInfo{},"",structure.ResultMsg{}}
         //logger.Println("放进去的arg:-------", arg1)
         a.Args = append(a.Args, &arg1)
         a.FilterData = append(a.FilterData, &arg1)
      }
   }
   //logger.Info("区域是:",areaPoints,"区域内目标数量为:",a.TargetNum,"---",len(a.FilterData))
   a.Time = time.Unix(time.Now().Unix(), 0).String()[11:16]
   //logger.Println("--------------------看看区域数据:",*a)
}
// 把sdk从数据帧上提取的按照区域分类归置
func SdkDataFormat(cameraId string, arg *structure.SdkData, cameraPolygons []protomsg.CameraPolygon) {
   logger.Info("==================================本sdkData中解出来的目标数据=======================================")
   for _, photo := range arg.Photo {
      logger.Info("--------解析出来的数据---", cameraId, arg.IpcId, photo.Rects, photo.Score)
   }
   for _, polygon := range cameraPolygons {
      //logger.Println("++++++在这儿看一下区域啊:", polygon.Polygon)
      areaMap := structure.AreaMap{CameraId: cameraId, AreaId: polygon.Id, AreaJson: polygon.Polygon, TriggerLine: polygon.TriggerLine, DirectionLine: polygon.DirectionLine}
      // 为每个摄像机区域填充数据
      CountAreaObjs(&areaMap,arg)
      arg.AreaMapList = append(arg.AreaMapList, &areaMap)
   }
}
//func CountAreaObjs(a *structure.AreaMap,arg *structure.SdkData) {
//
//   a.TargetNum = 0
//   threshold := 80.0       // 相似度
//   intersectionper := 20.0 // 占比
//   size := 0.0            // 尺寸
//
//   areaPoints := Json2points(a.AreaJson)
//   logger.Info("看看图片的width和height:",arg.ImageWidth,arg.ImageHeight)
//   widthScale := float64(arg.ImageWidth) / 960
//   heigthScale := float64(arg.ImageHeight) / 540
//   for _, obj := range arg.Photo {
//      //logger.Info("------------------看看sdkData:", arg.SdkName, "的Photo数据----------------", obj, "----顺便看看占比-----:", PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale))
//      if  obj.Score >= threshold && float64(obj.Rects.Width*obj.Rects.Height) >= size && PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale) >= intersectionper {
//         // 这步要备齐表达式里所需要的所有参数
//         a.TargetNum++
//         uuid := uuid.NewV4().String()
//         arg1 := structure.Arg{obj.Id,uuid,obj.Score, PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), a.AreaJson,obj.Type, obj.Rects, obj.Car,obj.Feature, obj.ThftRes, []*structure.BaseInfo{},"",structure.ResultMsg{}}
//         //logger.Println("放进去的arg:-------", arg1)
//         a.Args = append(a.Args, &arg1)
//         a.FilterData = append(a.FilterData, &arg1)
//      }
//   }
//   //logger.Info("区域是:",areaPoints,"区域内目标数量为:",a.TargetNum,"---",len(a.FilterData))
//   a.Time = time.Unix(time.Now().Unix(), 0).String()[11:16]
//   //logger.Println("--------------------看看区域数据:",*a)
//}
//
//// 把sdk从数据帧上提取的按照区域分类归置
//func SdkDataFormat(cameraId string, arg *structure.SdkData, cameraPolygons []protomsg.CameraPolygon) {
//   logger.Info("==================================本sdkData中解出来的目标数据=======================================")
//   for _, photo := range arg.Photo {
//      logger.Info("--------解析出来的数据---", cameraId, arg.IpcId, photo.Rects, photo.Score)
//   }
//   for _, polygon := range cameraPolygons {
//      //logger.Println("++++++在这儿看一下区域啊:", polygon.Polygon)
//      areaMap := structure.AreaMap{CameraId: cameraId, AreaId: polygon.Id, AreaJson: polygon.Polygon, TriggerLine: polygon.TriggerLine, DirectionLine: polygon.DirectionLine}
//      // 为每个摄像机区域填充数据
//      CountAreaObjs(&areaMap,arg)
//      arg.AreaMapList = append(arg.AreaMapList, &areaMap)
//   }
//}
func Push(data *protomsg.CompareArgs,sock mangos.Socket) []byte{
   //var sock mangos.Socket
@@ -282,12 +281,12 @@
   //}
   errSize := sock.SetOption(mangos.OptionMaxRecvSize,5*1024*1024)
   if errSize != nil {
      logger.Error("Failed set MaxRecvSize: %v", err)
      _ = logger.Error("Failed set MaxRecvSize: %v", err)
      return nil
   }
   serverIP, _ := GetLocalIP()
   if err = sock.Dial("tcp://"+serverIP+":4010"); err != nil {
      logger.Error("请求socket拨号失败: %s", err.Error())
      _ = logger.Error("请求socket拨号失败: %s", err.Error())
   }
   //sock.AddTransport(ipc.NewTransport())
   sock.AddTransport(tcp.NewTransport())
@@ -301,11 +300,11 @@
   logger.Debug("推送数据")
   //bytes := []byte("ndfasojdfaidsos")
   if err = sock.Send(bytes); err != nil {
      logger.Error("推送socket发送数据失败: %s", err.Error())
      _ = logger.Error("推送socket发送数据失败: %s", err.Error())
      //os.Exit(1)
   }
   if msg, err = sock.Recv(); err != nil {
      logger.Error("接收响应失败: %s", err.Error())
      _ = logger.Error("接收响应失败: %s", err.Error())
      //os.Exit(1)
   }
   logger.Debug("数据推送成功!收到响应,数据长度为:",len(msg))
@@ -318,17 +317,17 @@
   var msg []byte
   if sock, err = req.NewSocket(); err != nil {
      logger.Error("创建请求socket失败: %s", err.Error())
      _ = logger.Error("创建请求socket失败: %s", err.Error())
   }
   errSize := sock.SetOption(mangos.OptionMaxRecvSize,5*1024*1024)
   if errSize != nil {
      logger.Error("Failed set MaxRecvSize: %v", err)
      _ = logger.Error("Failed set MaxRecvSize: %v", err)
   }
   //sock.AddTransport(ipc.NewTransport())
   sock.AddTransport(tcp.NewTransport())
   serverIP, _ := GetLocalIP()
   if err = sock.Dial("tcp://"+serverIP+":4010"); err != nil {
      logger.Error("请求socket拨号失败: %s", err.Error())
      _ = logger.Error("请求socket拨号失败: %s", err.Error())
   }
   logger.Info("序列化数据")
@@ -344,19 +343,16 @@
            logger.Info("序列化失败:",err1)
         }
         logger.Debug("推送数据")
         //bytes := []byte("ndfasojdfaidsos")
         if err = sock.Send(bytes); err != nil {
            logger.Error("推送socket发送数据失败: %s", err.Error())
            //os.Exit(1)
            _ = logger.Error("推送socket发送数据失败: %s", err.Error())
         }
         if msg, err = sock.Recv(); err != nil {
            logger.Error("接收响应失败: %s", err.Error())
            //os.Exit(1)
            _ = logger.Error("接收响应失败: %s", err.Error())
         }
         logger.Debug("数据推送成功!收到响应,数据长度为:",len(msg))
         receiver <- msg
      default:
         time.Sleep(time.Millisecond * 10)
      }
   }
}