From eb19ddaebdf451cee76dc31082a3194a5f9b50ac Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期二, 10 十二月 2019 15:35:51 +0800 Subject: [PATCH] update --- goyolo.go | 107 ++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 73 insertions(+), 34 deletions(-) diff --git a/goyolo.go b/goyolo.go index bd12ca1..7ed2d15 100644 --- a/goyolo.go +++ b/goyolo.go @@ -68,8 +68,8 @@ // RatioInterTrack 璺熻釜鍒ゆ柇閲嶅彔闃堝�� const RatioInterTrack = 50 //璺熻釜鍒ゆ柇閲嶅彔闃堝�� -// NewSDKYolo init yolo sdk -func NewSDKYolo(fc, fw, fn string, gi int) interface{} { +// NewSDK init yolo sdk +func NewSDK(fc, fw, fn string, gi int) interface{} { c := C.CString(fc) defer C.free(unsafe.Pointer(c)) @@ -218,9 +218,77 @@ } // Run yolo detect (鍙瘑鍒汉) -func Run(i interface{}, id string, data []byte, w, h, c int, thrsh float32, umns int) ([]byte, []byte) { +func Run(i interface{}, id string, data []byte, w, h, c int, thrsh float32, umns int) ([]byte, int) { if data == nil || w <= 0 || h <= 0 { - return nil, nil + return nil, 0 + } + y := i.(*YoloHandle) + + channel := c + if channel == 0 { + channel = 3 + } + + v, ok := y.tracker[id] + if !ok { + i := &trackInfo{} + y.tracker[id] = i + v = i + } + whole, _ := YoloDetectTrack2(y, v.lastTrackObjs, &v.lastTrackID, data, w, h, channel, thrsh, umns) + y.tracker[id].lastTrackObjs = whole + y.tracker[id].lastTrackID = v.lastTrackID + + var dWhole []byte + var err error + if len(whole) > 0 { + + infos := convert2ProtoYoloTrack(whole, 1.0, 1.0) + p := protomsg.ParamYoloObj{Infos: infos} + + dWhole, err = proto.Marshal(&p) + if err != nil { + fmt.Println("ydetect track marshal proto yolo obj error", err) + dWhole = nil + } + } + + return dWhole, len(whole) +} + +func convert2ProtoYoloTrack(obj []CObjTrackInfo, fx, fy float64) []*protomsg.ObjInfo { + ret := []*protomsg.ObjInfo{} + + for _, v := range obj { + if fx < 1.0 || fy < 1.0 { + v.ObjInfo.RcObj.Left = (int32)((float64)(v.ObjInfo.RcObj.Left) / fx) + v.ObjInfo.RcObj.Right = (int32)((float64)(v.ObjInfo.RcObj.Right) / fx) + v.ObjInfo.RcObj.Top = (int32)((float64)(v.ObjInfo.RcObj.Top) / fy) + v.ObjInfo.RcObj.Bottom = (int32)((float64)(v.ObjInfo.RcObj.Bottom) / fy) + } + + rect := protomsg.Rect{ + Left: v.ObjInfo.RcObj.Left, + Right: v.ObjInfo.RcObj.Right, + Top: v.ObjInfo.RcObj.Top, + Bottom: v.ObjInfo.RcObj.Bottom, + } + obj := protomsg.ObjInfo{ + RcObj: &rect, + Typ: v.ObjInfo.Typ, + Prob: v.ObjInfo.Prob, + ObjID: v.ID, + } + + ret = append(ret, &obj) + } + return ret +} + +// Run2 yolo detect (鍙瘑鍒汉) +func Run2(i interface{}, id string, data []byte, w, h, c int, thrsh float32, umns int) ([]byte, int, []byte, int) { + if data == nil || w <= 0 || h <= 0 { + return nil, 0, nil, 0 } y := i.(*YoloHandle) @@ -255,34 +323,5 @@ if len(recent) > 0 { dRecent = nil } - return dWhole, dRecent -} - -func convert2ProtoYoloTrack(obj []CObjTrackInfo, fx, fy float64) []*protomsg.ObjInfo { - ret := []*protomsg.ObjInfo{} - - for _, v := range obj { - if fx < 1.0 || fy < 1.0 { - v.ObjInfo.RcObj.Left = (int32)((float64)(v.ObjInfo.RcObj.Left) / fx) - v.ObjInfo.RcObj.Right = (int32)((float64)(v.ObjInfo.RcObj.Right) / fx) - v.ObjInfo.RcObj.Top = (int32)((float64)(v.ObjInfo.RcObj.Top) / fy) - v.ObjInfo.RcObj.Bottom = (int32)((float64)(v.ObjInfo.RcObj.Bottom) / fy) - } - - rect := protomsg.Rect{ - Left: v.ObjInfo.RcObj.Left, - Right: v.ObjInfo.RcObj.Right, - Top: v.ObjInfo.RcObj.Top, - Bottom: v.ObjInfo.RcObj.Bottom, - } - obj := protomsg.ObjInfo{ - RcObj: &rect, - Typ: v.ObjInfo.Typ, - Prob: v.ObjInfo.Prob, - ObjID: v.ID, - } - - ret = append(ret, &obj) - } - return ret + return dWhole, len(whole), dRecent, len(recent) } -- Gitblit v1.8.0