| | |
| | | list *LockList |
| | | |
| | | mapCameraImageIndex map[string]int |
| | | recvImageCount int |
| | | wait2RunMoreThan int |
| | | index int |
| | | images []*imageWithID |
| | | msgs []*work.MsgRS |
| | |
| | | flag: flag, |
| | | list: NewLockList(6), |
| | | |
| | | recvImageCount: 0, |
| | | wait2RunMoreThan: 0, |
| | | index: 0, |
| | | mapCameraImageIndex: make(map[string]int), |
| | | images: make([]*imageWithID, batchSize), |
| | |
| | | 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 |
| | |
| | | } |
| | | t.index++ |
| | | } |
| | | t.recvImageCount++ |
| | | |
| | | if t.recvImageCount < t.batchSize+t.batchSize/2 { |
| | | // 等收到次数大于?次后开始运行,因为不一定各自摄像机的图片都会到 |
| | | t.wait2RunMoreThan++ |
| | | if t.wait2RunMoreThan < t.batchSize+t.batchSize/2 { |
| | | return |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | 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) |