| | |
| | | "analysis/logo" |
| | | "analysis/work" |
| | | "context" |
| | | "time" |
| | | |
| | | "github.com/gogo/protobuf/proto" |
| | | |
| | |
| | | gpu int |
| | | batchSize int |
| | | flag int |
| | | list *LockList |
| | | } |
| | | |
| | | // NewHumanTracker new |
| | |
| | | gpu: gpu, |
| | | batchSize: batchSize, |
| | | flag: flag, |
| | | list: NewLockList(6), |
| | | } |
| | | } |
| | | |
| | | // Free free |
| | | func (t *HumanTracker) Free() { |
| | | if t.tracker != nil { |
| | | t.tracker.Free() |
| | | } |
| | | } |
| | | |
| | |
| | | return false |
| | | } |
| | | |
| | | // Run impl |
| | | func (t *HumanTracker) Run(ctx context.Context, in <-chan work.MsgRS, out chan<- work.MsgRS, typ string) { |
| | | tm := time.Now() |
| | | sc := 0 |
| | | |
| | | for { |
| | | select { |
| | | case <-ctx.Done(): |
| | | return |
| | | default: |
| | | rMsg := <-in |
| | | if !validRemoteMessage(rMsg, typ) { |
| | | ejectResult(nil, rMsg, out) |
| | | continue |
| | | } |
| | | |
| | | func (t *HumanTracker) track(rMsg work.MsgRS, out chan<- work.MsgRS, typ string) { |
| | | i := unpackImage(rMsg, typ) |
| | | if i == nil || i.Data == nil || i.Width <= 0 || i.Height <= 0 { |
| | | ejectResult(nil, rMsg, out) |
| | | continue |
| | | return |
| | | } |
| | | |
| | | imgW, imgH := int(i.Width), int(i.Height) |
| | |
| | | res, err := t.tracker.Process(images) |
| | | if err != nil { |
| | | ejectResult(nil, rMsg, out) |
| | | continue |
| | | return |
| | | } |
| | | |
| | | hr := convert2ProtoHumanTrackResult(res) |
| | |
| | | } |
| | | logo.Infoln("CAMERAID: ", rMsg.Msg.Cid, " TASKID: ", id, " TASKNAME: ", name, " Human Track COUNT: ", len(hr[0])) |
| | | |
| | | ///////////////////////////////////// |
| | | sc++ |
| | | if sc == 25 { |
| | | logo.Infoln("HUMAN TRACKER RUN 25 FRAME USE TIME: ", time.Since(tm)) |
| | | sc = 0 |
| | | tm = time.Now() |
| | | } |
| | | |
| | | if time.Since(tm) > time.Second { |
| | | logo.Infof("HUMAN TRACKER RUN %d FRAME USE TIME: %v", sc, time.Since(tm)) |
| | | sc = 0 |
| | | tm = time.Now() |
| | | } |
| | | |
| | | } |
| | | } |
| | | // Run impl |
| | | func (t *HumanTracker) Run(ctx context.Context, in <-chan work.MsgRS, out chan<- work.MsgRS, typ string) { |
| | | FlowSimple(ctx, in, out, typ, t.list.Push, t.list.Pop, t.track, t.Free) |
| | | } |
| | | |
| | | // message HumanTrack { |