zhangmeng
2019-12-20 b93fee2a0c8bb9e73d91b4cb064654f1ee628684
work/sdk/humantrack.go
@@ -30,7 +30,7 @@
   list      *LockList
   mapCameraImageIndex map[string]int
   recvImageCount      int
   wait2RunMoreThan    int
   index               int
   images              []*imageWithID
   msgs                []*work.MsgRS
@@ -44,7 +44,7 @@
      flag:      flag,
      list:      NewLockList(6),
      recvImageCount:      0,
      wait2RunMoreThan:    0,
      index:               0,
      mapCameraImageIndex: make(map[string]int),
      images:              make([]*imageWithID, batchSize),
@@ -140,15 +140,14 @@
      Channel: 3,
   }
   // mapCameraImageIndex map[string]int
   // images              []gohumantrack.ImageHumanTracker
   // 查找是否有这个摄像机图片的位置,有就替换成最新的,并且保存rMsg
   if i, ok := t.mapCameraImageIndex[rMsg.Msg.Cid]; ok {
      if i < t.batchSize {
         t.images[i] = &imageWithID{&img, fx, fy, rMsg.Msg.Cid}
         t.msgs[i] = &rMsg
      }
   } else {
      // 没有,如果index小于最大的batch,创建一个新的位置
      if t.index < t.batchSize {
         t.images[t.index] = &imageWithID{&img, fx, fy, rMsg.Msg.Cid}
         t.msgs[t.index] = &rMsg
@@ -156,9 +155,9 @@
      }
      t.index++
   }
   t.recvImageCount++
   if t.recvImageCount < t.batchSize+t.batchSize/2 {
   // 等收到次数大于?次后开始运行,因为不一定各自摄像机的图片都会到
   t.wait2RunMoreThan++
   if t.wait2RunMoreThan < t.batchSize+t.batchSize/2 {
      return
   }
@@ -177,8 +176,17 @@
   }
   res, err := t.tracker.ProcessImagePointer(pimg, rw, rh, 3)
   t.recvImageCount = 0
   // 从0开始计算收到了多少次图片
   t.wait2RunMoreThan = 0
   // 将images设置为nil,重新开始一个流程
   for i := 0; i < t.batchSize; i++ {
      t.images[i] = nil
      t.msgs[i] = nil
   }
   // 如果index大于最大batch,说明摄像机可能改变了,清空所有结构重新开始
   if t.index > t.batchSize {
      t.mapCameraImageIndex = make(map[string]int)
   }
   if err != nil {
      logo.Infoln("batch~~~~~~Track Image Count: ", t.index, " Failed: ", err)
      ejectResult(nil, rMsg, out)