From 712ef81c6b8813a498a66cf61ffcd37e5c502c8c Mon Sep 17 00:00:00 2001
From: sunty <1172534965@qq.com>
Date: 星期五, 01 十一月 2019 13:45:30 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
service/FaceSdkService.go | 228 +++++++++++++++++++-------------------------------------
1 files changed, 78 insertions(+), 150 deletions(-)
diff --git a/service/FaceSdkService.go b/service/FaceSdkService.go
index 2db7587..366ab3d 100644
--- a/service/FaceSdkService.go
+++ b/service/FaceSdkService.go
@@ -2,168 +2,96 @@
import (
"basic.com/pubsub/protomsg.git"
- "basic.com/valib/deliver.git"
- "encoding/base64"
- "fmt"
+ "basic.com/valib/logger.git"
"github.com/gogo/protobuf/proto"
- "github.com/pierrec/lz4"
- "github.com/satori/go.uuid"
- "image"
- "io/ioutil"
- "os"
+ "github.com/pkg/errors"
+ "gocv.io/x/gocv"
"time"
)
+type FaceSdkService struct {
+ File []byte
+ Id int64
+ Result []*protomsg.ResultFaceDetect
+ DeadTime time.Duration
+}
+
const (
- Ipc_Push_Ext = "_2.ipc"
- Ipc_Pull_Ext = "_1.ipc"
- Ipc_Url_Pre = "ipc:///tmp///"
- Virtual_FaceTaskId = "92496BDF-2BFA-98F2-62E8-96DD9866ABD2"
- Virtual_FaceSdkId = "virtual-faceextract-sdk-pull"
- Url_Service_PUSH = Ipc_Url_Pre + Virtual_FaceSdkId + Ipc_Push_Ext
- Url_Service_PULL = Ipc_Url_Pre + Virtual_FaceSdkId + Ipc_Pull_Ext
+ faceExtractWebCID = "virtual-face-extract-web-camera-id"
)
-var imgPushChan chan protomsg.Recvmsg
-var client_push deliver.Deliver
-var client_pull deliver.Deliver
-func TestPushImgMsg() {
- InitService()
- proImg := readImgFile()
-
- if b, err := proto.Marshal(&proImg);err !=nil{
- fmt.Println("protoImage marshal err")
- return
+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 {
- bc := make([]byte,len(b))
- ht := make([]int, 64<<10)
- n,err := lz4.CompressBlock(b,bc,ht)
- if err !=nil {
- fmt.Println(err)
- }
- if n >= len(b){
- fmt.Println("image is not compressible")
- }
- bc = bc[:n]
- for {
- PushImgMsg(protomsg.Recvmsg{
- Id:uuid.NewV4().String(),
- Addr:"",
- Picdata:bc,
- })
- fmt.Println("pushed img")
- time.Sleep(5*time.Second)
- }
-
+ return detectResults,nil,i
}
}
-func readImgFile() protomsg.Image{
- var i protomsg.Image
+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
+ //}
+
+ 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")
- filePath := "/home/user/workspace/timg.jpg"
- file, err := os.Open(filePath)
- defer file.Close()
- if err !=nil{
- fmt.Println("image not exist")
- return i
- } else {
- img, _, err := image.Decode(file)
- bytes, err := ioutil.ReadFile(filePath)
- if err !=nil {
- return i
- }
- b := img.Bounds()
- width := b.Max.X
- height := b.Max.Y
- i = protomsg.Image{
- Width:int32(width),
- Height:int32(height),
- Timestamp:formatTimeStr,
- Data:bytes,
- }
- return i
- }
+ return &protomsg.Image{
+ Width: width,
+ Height: height,
+ Timestamp: formatTimeStr,
+ Data: data,
+ Id: s.Id,
+ Cid: faceExtractWebCID,
+ },nil
}
-
-func PushImgMsg(is protomsg.Recvmsg){
- imgPushChan <- is
-}
-
-var resultMap map[string]protomsg.SdkMessage
-
-
-func InitService(){
- fmt.Println("service init!")
- imgPushChan = make(chan protomsg.Recvmsg)
- resultMap = make(map[string]protomsg.SdkMessage,0)
- client_push = deliver.NewClient(deliver.PushPull, Url_Service_PUSH)
- client_pull = deliver.NewClient(deliver.PushPull, Url_Service_PULL)
- defer func() {
- client_push.Close()
- client_pull.Close()
- }()
- go thSend()
-
- go thRecv()
-}
-
-func thSend(){
- for {
- select {
- case is := <- imgPushChan:
- fmt.Println("imgPushChan in")
- b, _ := proto.Marshal(&is)
- err := client_push.Send(b)
- if err !=nil {
- fmt.Println("img Send err:",err)
- }
- default:
- //fmt.Println("no img in")
- }
- }
-}
-
-func thRecv(){
- for {
- resultBytes, err := client_pull.Recv()
- if err !=nil{
- fmt.Println("pull err:",err)
- continue
- }
- rMsg := protomsg.SdkMessage{}
- if err := proto.Unmarshal(resultBytes, &rMsg);err ==nil{
- fmt.Println("received MSG:",rMsg.Cid)
- perId := rMsg.Cid //鏁版嵁id
- if rMsg.Tasklab !=nil && rMsg.Tasklab.Taskid == Virtual_FaceTaskId {
- sdkInfos := rMsg.Tasklab.Sdkinfos
- fmt.Println("Len(sdkInfos)=",len(sdkInfos))
- //绗竴涓猻dk鏄汉鑴告娴嬶紝绗簩涓猻dk鏄汉鑴告彁鍙�
- for _,swt :=range sdkInfos{
- if swt.Sdktype == "FaceExtract"{
- fmt.Println("sdkName:",swt.SdkName)
- var pff protomsg.ParamFaceFeature
- if err := proto.Unmarshal(swt.Sdkdata, &pff);err !=nil{
- fmt.Println("ParamFaceFeature unmarshal err:",err)
- } else {
- fmt.Println("鐩爣鏁帮細",len(pff.ExtComp))
- for _,fea :=range pff.ExtComp{
- base64Fea := base64.StdEncoding.EncodeToString(fea.Feats)
- fmt.Println("perId:",perId)
- fmt.Println("faceFeature:",base64Fea)
- }
- }
- break
- }
- }
-
- }
- //resultMap[rMsg.Cid] = rMsg
- } else {
- fmt.Println("recv msg Err:",err)
- }
-
- }
-}
\ No newline at end of file
--
Gitblit v1.8.0