zhangmeng
2019-12-20 b93fee2a0c8bb9e73d91b4cb064654f1ee628684
update
1个文件已修改
28 ■■■■■ 已修改文件
work/sdk/humantrack.go 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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)