panlei
2019-12-16 dc0e0daead178b80f569c7116e4524fee592f179
algorithm/personTrack/personTrack.go
@@ -1,4 +1,4 @@
package personTrack
package main
import (
   "encoding/json"
@@ -20,7 +20,7 @@
var sender chan []byte = make(chan []byte)
var receiver chan string = make(chan string)
var initFlag bool = false
var sock mangos.Socket
func Init() {
   go Push()
@@ -28,7 +28,8 @@
// 人体跟踪算法
func Entrance(rule *protomsg.Rule, am *structure.AreaMap, lable *structure.Others, args *structure.SdkDatas, message *protomsg.SdkMessage) structure.LittleRuleResult {
   if !initFlag {
   logger.Info("置位符号为:",structure.InitFlag)
   if !structure.InitFlag {
      Init()
   }
   if rule.PolygonId == am.AreaId { // 首先这条规则得是这个算法的规则,其次规则所对应的区域id要跟区域数据的id对的上
@@ -100,8 +101,9 @@
   trackArg["esId"] = esId
   trackArg["threshold"] = compareThreshold
   trackArg["cameraId"] = am.CameraId
   trackArg["bodyFeature"] = arg.Feature
   trackArg["bodyFeature"] = arg.BodyFeature
   trackArg["faceFeature"]   = arg.AttachArg.Feature
   logger.Info("请求张增飞比对数据参数:",trackArg)
   b,err := json.Marshal(trackArg)
   if err != nil {
      logger.Error("json序列化错误", err)
@@ -118,12 +120,13 @@
}
func track (rule *protomsg.Rule,am *structure.AreaMap) structure.LittleRuleResult{
   var threshold float32 = 70 // 默认阈值为70
   var threshold float32 = 60 // 默认阈值为70
   if th,err := strconv.ParseFloat(rule.SdkArgValue,32); err == nil {
      threshold = float32(th)
   }
   for _, arg := range am.FilterData {
      fillLiker(threshold,arg,am)
      logger.Info("比完之后的数据追踪数据是:",arg)
      //if len(arg.Liker) == 0 {
      //   // 如果没有相似者则删除本目标数据
      //   am.FilterData = append(am.FilterData[:i],am.FilterData[i+1:]...)
@@ -141,22 +144,23 @@
func Push(){
   var err error
   var msg []byte
   logger.Info("追踪请求通道建立")
   if sock, err = req.NewSocket(); err != nil {
      logger.Error("创建请求socket失败: %s", err.Error())
   }
   errSize := sock.SetOption(mangos.OptionMaxRecvSize,5*1024*1024)
   errSize := sock.SetOption(mangos.OptionMaxRecvSize,20*1024*1024)
   if errSize != nil {
      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 {
   if err = sock.Dial("tcp://"+serverIP+":4012"); err != nil {
      logger.Error("请求socket拨号失败: %s", err.Error())
   }
   logger.Info("序列化数据")
   initFlag = true
   //logger.Info("序列化数据")
   structure.InitFlag = true
   logger.Info("置位initFlag:",structure.InitFlag)
   for {
      select {
      case data := <- sender: