| | |
| | | "analysis/work" |
| | | "context" |
| | | "plugin" |
| | | "time" |
| | | |
| | | "github.com/gogo/protobuf/proto" |
| | | |
| | |
| | | gpu int |
| | | batchSize int |
| | | flag int |
| | | |
| | | list *LockList |
| | | |
| | | handle interface{} |
| | | fnInit func(int, int, int, func(...interface{})) interface{} |
| | |
| | | return true |
| | | } |
| | | |
| | | 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) |
| | | return |
| | | } |
| | | |
| | | imgW, imgH := int(i.Width), int(i.Height) |
| | | |
| | | // var images []sdkstruct.SDKImage |
| | | // img := sdkstruct.SDKImage{ |
| | | // Data: i.Data, |
| | | // Width: imgW, |
| | | // Height: imgH, |
| | | // Channel: 3, |
| | | // } |
| | | // images = append(images, img) |
| | | res := t.fnRun(t.handle, i.Data, imgW, imgH, 3) |
| | | if res != nil { |
| | | ejectResult(nil, rMsg, out) |
| | | return |
| | | } |
| | | |
| | | hr := convert2ProtoHumanTrackResult(res) |
| | | result := protomsg.HumanTrackResult{Result: hr[0]} |
| | | data, err := proto.Marshal(&result) |
| | | if err != nil { |
| | | logo.Errorln("HUMAN TRACKER MARSHAL PROTO PLATE IDS ERROR", err) |
| | | data = nil |
| | | } |
| | | ejectResult(data, rMsg, out) |
| | | var id, name string |
| | | if rMsg.Msg.Tasklab != nil { |
| | | id, name = rMsg.Msg.Tasklab.Taskid, rMsg.Msg.Tasklab.Taskname |
| | | } |
| | | |
| | | logo.Infoln("CAMERAID: ", rMsg.Msg.Cid, " TASKID: ", id, " TASKNAME: ", name, " DETECT YOLO COUNT: ", len(hr[0])) |
| | | |
| | | } |
| | | |
| | | // 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 |
| | | } |
| | | |
| | | i := unpackImage(rMsg, typ) |
| | | if i == nil || i.Data == nil || i.Width <= 0 || i.Height <= 0 { |
| | | ejectResult(nil, rMsg, out) |
| | | continue |
| | | } |
| | | |
| | | imgW, imgH := int(i.Width), int(i.Height) |
| | | |
| | | // var images []sdkstruct.SDKImage |
| | | // img := sdkstruct.SDKImage{ |
| | | // Data: i.Data, |
| | | // Width: imgW, |
| | | // Height: imgH, |
| | | // Channel: 3, |
| | | // } |
| | | // images = append(images, img) |
| | | res := t.fnRun(t.handle, i.Data, imgW, imgH, 3) |
| | | if res != nil { |
| | | ejectResult(nil, rMsg, out) |
| | | continue |
| | | } |
| | | |
| | | hr := convert2ProtoHumanTrackResult(res) |
| | | result := protomsg.HumanTrackResult{Result: hr[0]} |
| | | data, err := proto.Marshal(&result) |
| | | if err != nil { |
| | | logo.Errorln("HUMAN TRACKER MARSHAL PROTO PLATE IDS ERROR", err) |
| | | data = nil |
| | | } |
| | | ejectResult(data, rMsg, out) |
| | | |
| | | ///////////////////////////////////// |
| | | 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() |
| | | } |
| | | |
| | | } |
| | | } |
| | | FlowSimple(ctx, in, out, typ, t.list.Push, t.list.Pop, t.track, func() { t.fnFree(t.handle) }) |
| | | } |
| | | |
| | | // message HumanTrack { |