From e3a7f12a6191a6b6bdeb08a2ce2052bf67449b1b Mon Sep 17 00:00:00 2001
From: liuxiaolong <736321739@qq.com>
Date: 星期五, 27 九月 2019 16:06:40 +0800
Subject: [PATCH] fix cameraadd
---
service/FaceSdkService.go | 104 +++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 83 insertions(+), 21 deletions(-)
diff --git a/service/FaceSdkService.go b/service/FaceSdkService.go
index d1bd50f..aacbc18 100644
--- a/service/FaceSdkService.go
+++ b/service/FaceSdkService.go
@@ -1,34 +1,96 @@
package service
import (
- "basic.com/valib/deliver.git"
- "github.com/gin-gonic/gin/internal/json"
+ "basic.com/pubsub/protomsg.git"
+ "github.com/gogo/protobuf/proto"
+ "github.com/pkg/errors"
+ "gocv.io/x/gocv"
+ "image"
+ "time"
+ "basic.com/valib/logger.git"
)
-type ImageSource struct {
- Id string `json:"id"`
- Data []byte `json:"data"`
+type FaceSdkService struct {
+ File []byte
+ Id int64
+ Result []*protomsg.ResultFaceDetect
+ DeadTime time.Duration
}
+
const (
- Url_Service_PUSH = "tcp:///tmp///webserver-2.ipc"
- Url_Service_PULL = "tcp:///tmp///webserver-1.ipc"
+ faceExtractWebCID = "virtual-face-extract-web-camera-id"
)
-var imgChan chan ImageSource
-func PushImgMsg(is ImageSource){
- imgChan <- is
+
+func GetFaceFeaFromSdk(fileBytes []byte,deadTime time.Duration) ([]*protomsg.ResultFaceDetect,error,*protomsg.Image){
+ t1 := time.Now()
+ s := newFaceSdkService(fileBytes, deadTime)
+ i, err := s.readFromUploadImg()
+ logger.Debug("ReadFromUploadImg鐢ㄦ椂:", time.Since(t1))
+ if err !=nil{
+ logger.Debug("readFromUploadImg err:",err)
+ return nil,err,i
+ }
+ imgBytes, err := proto.Marshal(i)
+ if err !=nil {
+ logger.Debug("i marshal err:",err)
+ return nil,err,i
+ }
+ detectResults, err := DoFDetectWithRpc(&protomsg.FaceDetectRequest{ReqParam: imgBytes}, deadTime)
+ logger.Debug("鎻愬彇face鍏辩敤鏃讹細", time.Since(t1))
+ if err !=nil {
+ logger.Debug("DoFDetectWithRpc err:",err)
+ return nil,err,i
+ } else {
+ return detectResults,nil,i
+ }
}
-func InitService(){
- imgChan = make(chan ImageSource)
- client := deliver.NewClient(deliver.PushPull, Url_Service_PUSH)
- for {
- select {
- case is := <- imgChan:
- b, _ := json.Marshal(is)
- client.Send(b)
+func newFaceSdkService(fileBytes []byte, deadTime time.Duration) *FaceSdkService{
+ return &FaceSdkService{
+ File:fileBytes,
+ Id:time.Now().UnixNano(),
+ DeadTime:deadTime,
+ }
+}
+
+func (s *FaceSdkService) readFromUploadImg() (*protomsg.Image,error){
+ picMat, err := gocv.IMDecode(s.File, gocv.IMReadColor)
+ if err !=nil {
+ logger.Debug("gocv.IMDecode err:",err)
+ return nil,err
+ }
+ logger.Debug("picMat.Data.len:", len(picMat.ToBytes()))
+ newMat := gocv.NewMat()
+ size := 1024
+ if picMat.Rows() > size || picMat.Cols() > size {
+ fx := float64(size)/float64(picMat.Rows())
+ fy := float64(size)/float64(picMat.Cols())
+ ff := fx
+ if fx > fy{
+ ff = fy
}
-
-
+ gocv.Resize(picMat,&newMat, image.Pt(0,0), ff, ff, gocv.InterpolationDefault)
+ picMat = newMat
}
-}
\ No newline at end of file
+ defer picMat.Close()
+
+ if picMat.Empty() {
+ logger.Debug("file not exist")
+ return nil,errors.New("picMat is empty")
+ }
+ height := int32(picMat.Rows())
+ width := int32(picMat.Cols())
+ data := picMat.ToBytes()
+ timeUnix := time.Now().Unix()
+ formatTimeStr := time.Unix(timeUnix, 0).Format("2006-01-02 15:04:05")
+
+ return &protomsg.Image{
+ Width: width,
+ Height: height,
+ Timestamp: formatTimeStr,
+ Data: data,
+ Id: s.Id,
+ Cid: faceExtractWebCID,
+ },nil
+}
--
Gitblit v1.8.0