| | |
| | | import ( |
| | | "analysis/valib/gosdk" |
| | | srv "analysis/work/service" |
| | | "fmt" |
| | | "image" |
| | | "image/color" |
| | | "math/rand" |
| | | "strconv" |
| | | "sync" |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | var yoloDetInfo []gosdk.CObjInfo |
| | | var startYolo bool |
| | | var m sync.Mutex |
| | | type Yolo struct { |
| | | yoloDetInfo []gosdk.CObjInfo |
| | | startYolo bool |
| | | m sync.Mutex |
| | | } |
| | | |
| | | func NewYolo() *Yolo { |
| | | return &Yolo{ |
| | | startYolo: false, |
| | | } |
| | | } |
| | | |
| | | // ShowYolo show yolo result |
| | | func ShowYolo(ch <-chan srv.ImageInfo) { |
| | | func (y *Yolo) ShowYolo(ch <-chan srv.ImageInfo) { |
| | | y.ShowYoloWithName(ch, "Yolo") |
| | | } |
| | | |
| | | // ShowYoloWithName show yolo result |
| | | func (y *Yolo) ShowYoloWithName(ch <-chan srv.ImageInfo, winName string) { |
| | | |
| | | cfg := "./data/yolo/cfg/yolov3.cfg" |
| | | weights := "./data/yolo/yolov3.weights" |
| | |
| | | |
| | | yolo := gosdk.InitYolo(cfg, weights, name, 0) |
| | | |
| | | window := gocv.NewWindow("Yolo") |
| | | winName = winName + strconv.Itoa(rand.Intn(10)) |
| | | window := gocv.NewWindow(winName) |
| | | |
| | | fmt.Println("create window : ", winName) |
| | | |
| | | pic := gocv.NewMat() |
| | | |
| | |
| | | |
| | | i := <-ch |
| | | |
| | | if !startYolo { |
| | | if !y.startYolo { |
| | | go func(yolo *gosdk.YoloHandle, i srv.ImageInfo) { |
| | | startYolo = true |
| | | y.startYolo = true |
| | | img := gosdk.SDKImage{Data: i.Data, Width: i.Width, Height: i.Height} |
| | | obj := gosdk.YoloDetect(yolo, img, 0.4, 0) |
| | | |
| | | m.Lock() |
| | | yoloDetInfo = obj |
| | | m.Unlock() |
| | | startYolo = false |
| | | y.m.Lock() |
| | | y.yoloDetInfo = obj |
| | | y.m.Unlock() |
| | | y.startYolo = false |
| | | }(yolo, i) |
| | | } |
| | | |
| | | img, _ := gocv.NewMatFromBytes(i.Height, i.Width, gocv.MatTypeCV8UC3, i.Data) |
| | | |
| | | var obj []gosdk.CObjInfo |
| | | m.Lock() |
| | | obj = yoloDetInfo |
| | | m.Unlock() |
| | | y.m.Lock() |
| | | obj = y.yoloDetInfo |
| | | y.m.Unlock() |
| | | cvDrawObject(&img, obj) |
| | | // show obj |
| | | gocv.Resize(img, &pic, image.Pt(0, 0), 0.5, 0.5, gocv.InterpolationDefault) |