zhangmeng
2019-12-17 7858ad214af2b27e165653ca5b9bd964b487d20d
work/sdk/plateIDdetect.go
@@ -4,7 +4,6 @@
   "analysis/logo"
   "analysis/work"
   "context"
   "time"
   "basic.com/valib/gosdk.git"
)
@@ -15,6 +14,7 @@
   cfgCloud   *gosdk.CPlateIDCloudCfg
   licSrvPath string
   modelPath  string
   list       *LockList
   fn         func(*gosdk.SDKImage, *gosdk.CRECT, int, int, *work.MsgRS, chan<- work.MsgRS)
}
@@ -31,6 +31,7 @@
      return &PlateIDDetector{
         licSrvPath: licSrv,
         modelPath:  model,
         list:       NewLockList(6),
         fn:         vehicle,
      }
   }
@@ -46,6 +47,7 @@
         cfgCloud:   nil,
         licSrvPath: licSrv,
         modelPath:  "",
         list:       NewLockList(6),
         fn:         eparking,
      }
@@ -60,10 +62,22 @@
         cfgCloud:   cfg,
         licSrvPath: licSrv,
         modelPath:  model,
         list:       NewLockList(6),
         fn:         cloud,
      }
   }
   return nil
}
// Free free
func (d *PlateIDDetector) Free() {
   if d.config != nil {
      gosdk.FreePlateIdDetector()
   } else if d.cfgCloud != nil {
      gosdk.FreePlateIDCloudSDKDetector()
   } else {
      gosdk.FreeVehicleITSDetector()
   }
}
// Init impl
@@ -89,26 +103,11 @@
   return true
}
// Run impl
func (d *PlateIDDetector) 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 (d *PlateIDDetector) detect(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)
@@ -126,22 +125,11 @@
            mW, mH = int(d.config.MaxImageWidth), int(d.config.MaxImageHeight)
         }
         d.fn(&img, &rcDetect, mW, mH, &rMsg, out)
         sc++
         if sc == 25 {
            logo.Infoln("PLATE ID DETECTOR RUN 25 FRAME USE TIME: ", time.Since(tm))
            sc = 0
            tm = time.Now()
         }
         if time.Since(tm) > time.Second {
            logo.Infof("PLATE ID DETECTOR RUN %d FRAME USE TIME: %v", sc, time.Since(tm))
            sc = 0
            tm = time.Now()
         }
      }
   }
// Run impl
func (d *PlateIDDetector) Run(ctx context.Context, in <-chan work.MsgRS, out chan<- work.MsgRS, typ string) {
   FlowSimple(ctx, in, out, typ, d.list.Push, d.list.Pop, d.detect, func() { d.Free() })
}
func eparking(img *gosdk.SDKImage, rc *gosdk.CRECT, mW, mH int, rMsg *work.MsgRS, out chan<- work.MsgRS) {