视频分析2.0 多进程拆分仓库
zhangmeng
2019-05-08 ce15b43db3e60acc65ddd25de253b8577c2693aa
analysis/demo/winYolo.go
@@ -3,8 +3,10 @@
import (
   "analysis/valib/gosdk"
   srv "analysis/work/service"
   "fmt"
   "image"
   "image/color"
   "math/rand"
   "strconv"
   "sync"
@@ -53,12 +55,25 @@
   }
}
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"
@@ -66,7 +81,10 @@
   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()
@@ -74,25 +92,25 @@
      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)