fix
liuxiaolong
2019-06-29 c09847ec074533e8dddf4c4e62ec370ec62c5a8a
service/FaceSdkService.go
@@ -10,14 +10,16 @@
   "github.com/pkg/errors"
   "github.com/satori/go.uuid"
   "gocv.io/x/gocv"
   "io/ioutil"
   "mime/multipart"
   "sync"
   "time"
)
type FaceSdkService struct {
   File multipart.File
   File *multipart.File
   Id string
   Result []*protomsg.ResultFaceExtCom
}
const (
@@ -32,7 +34,7 @@
func NewFaceSdkService(file multipart.File) FaceSdkService{
   return FaceSdkService{
      File:file,
      File:&file,
      Id:uuid.NewV4().String(),
   }
}
@@ -58,13 +60,18 @@
}
func (s *FaceSdkService) ReadFromUploadImg() (*protomsg.Image,error){
   defer s.File.Close()
   imgB := make([]byte,0)
   if _, err := s.File.Read(imgB);err !=nil{
   defer (*(s.File)).Close()
   imgB, err := ioutil.ReadAll(*(s.File))
   if err !=nil{
      fmt.Println("File.Read err:",err)
      return nil,err
   }
   fmt.Println("imgB.len:",len(imgB))
   picMat, err := gocv.IMDecode(imgB, gocv.IMReadColor)
   if err !=nil {
      fmt.Println("gocv.IMDecode err:",err)
      return nil,err
   }
   defer picMat.Close()
@@ -109,33 +116,27 @@
   }
}
func (s *FaceSdkService) GetFaceFea() (feas []*protomsg.ResultFaceExtCom,err error){
func (s *FaceSdkService) GetFaceFea(){
   var wg sync.WaitGroup
   wg.Add(1)
   ch := make(chan []*protomsg.ResultFaceExtCom,0)
   go func() {
   ticker := time.NewTicker(time.Second * 3)
   go func(ticker *time.Ticker, s *FaceSdkService) {
      defer ticker.Stop()
      defer wg.Done()
      for {
         select {
         case <-time.Tick(time.Second*10):
            ch <- nil
            wg.Done()
         case <-ticker.C:
            return
         default:
            if feas,ok := resultMap[s.Id];ok {
               fmt.Println("faceFea got!!!")
               ch <- feas
               s.Result = feas
               return
            }
         }
      }
   }()
   }(ticker, s)
   wg.Wait()
   msg := <- ch
   if msg != nil {
      return msg,nil
   } else {
      return msg,errors.New("no fea")
   }
}
func readTestImgFile() protomsg.Image{