From 087af7f0bf2890887bd185a8e2e6879ee7c629d1 Mon Sep 17 00:00:00 2001 From: liuxiaolong <736321739@qq.com> Date: 星期三, 24 七月 2019 17:26:39 +0800 Subject: [PATCH] add faceExtract and searchByPhoto --- controllers/fileController.go | 83 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 83 insertions(+), 0 deletions(-) diff --git a/controllers/fileController.go b/controllers/fileController.go index 8aa82b6..fe3f7d5 100644 --- a/controllers/fileController.go +++ b/controllers/fileController.go @@ -3,11 +3,13 @@ import ( "basic.com/pubsub/protomsg.git" "basic.com/fileServer/WeedFSClient.git" + "basic.com/valib/deliver.git" "bytes" "encoding/base64" "errors" "fmt" "github.com/gin-gonic/gin" + "github.com/gogo/protobuf/proto" "github.com/satori/go.uuid" "image" "image/jpeg" @@ -94,6 +96,87 @@ } } + +type FaceExtract struct { + Url string `json:"url"` + FaceBytes []byte `json:"faceBytes"` +} +var faceExtractedMap = make(map[string]FaceExtract,0) + +// @Description 浜鸿劯鎻愬彇 +// @Router /data/api-v/dbperson/faceExtract [POST] +func (controller FileController) FaceExtract(c *gin.Context) { + file, _, err := c.Request.FormFile("file") //image杩欎釜鏄痷plaodify鍙傛暟瀹氫箟涓殑 'fileObjName':'image' + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎") + return + } + var weedfsUri = "http://"+config.WeedFs.Ip+":"+strconv.Itoa(config.WeedFs.UploadPort)+"/submit" + + //灏嗕笂浼犵殑鍥剧墖浜や汉鑴告娴嬪拰浜鸿劯鎻愬彇锛岃幏寰楃壒寰� + fileBytes, _ := ioutil.ReadAll(file) + faceArr, err, pI := service.GetFaceFeaFromSdk(fileBytes, time.Second*60) + if err ==nil && len(faceArr) >0 { + urlArr := make([]string,0) + for _,r := range faceArr { + rcFace := r.Pos.RcFace + cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom)) + weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, "FaceUrl", cutFaceImgData) + if e == nil{ + faceExtractedMap[weedFilePath] = FaceExtract{ + Url:weedFilePath, + FaceBytes:r.Feats, + } + urlArr = append(urlArr, weedFilePath) + } + } + if len(urlArr) == 0{ + util.ResponseFormat(c,code.ComError,"鏈彁鍙栧埌浜鸿劯") + } else { + util.ResponseFormat(c,code.Success,urlArr) + } + } else { + util.ResponseFormat(c,code.ComError,"鏈彁鍙栧埌浜鸿劯") + } +} + +// @Description 浠ュ浘鎼滃浘 +// @Router /data/api-v/dbperson/searchByPhoto [POST] +func (controller FileController) SearchByPhoto(c *gin.Context) { + photoUrl := c.Request.FormValue("url") + if photoUrl == "" { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎") + return + } + if face,ok := faceExtractedMap[photoUrl];!ok{ + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎") + return + } else { + reqUrl := "tcp://192.168.1.66:40010" + reqClient := deliver.NewClient(deliver.ReqRep, reqUrl) + arg := protomsg.CompareArgs{ + FaceFeature:face.FaceBytes, + CompareThreshold:0.2, + } + b, err := proto.Marshal(&arg) + if err !=nil{ + util.ResponseFormat(c, code.ComError, "璇锋眰marshal澶辫触") + return + } + err = reqClient.Send(b) + if err !=nil{ + util.ResponseFormat(c, code.ComError, "姣斿鏈嶅姟璇锋眰澶辫触") + return + } + msg, err := reqClient.Recv() + if err !=nil{ + util.ResponseFormat(c, code.ComError, "姣斿鏈嶅姟鍝嶅簲澶辫触") + return + } + fmt.Println("compareReuslt:",msg) + } +} + // @Description 浜哄憳鐓х墖涓婁紶骞惰幏鍙栫壒寰佸�� // @Router /data/api-v/dbperson/fileUploadTest [POST] func (controller FileController) UploadPersonTest(c *gin.Context) { -- Gitblit v1.8.0