From 8ba736b00a482ab531f96b8047c23934e45f2d27 Mon Sep 17 00:00:00 2001 From: liuxiaolong <736321739@qq.com> Date: 星期三, 24 七月 2019 18:04:36 +0800 Subject: [PATCH] query db person list --- controllers/fileController.go | 163 ++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 128 insertions(+), 35 deletions(-) diff --git a/controllers/fileController.go b/controllers/fileController.go index 7dbc615..8f97e3e 100644 --- a/controllers/fileController.go +++ b/controllers/fileController.go @@ -2,11 +2,15 @@ import ( "basic.com/pubsub/protomsg.git" + "basic.com/fileServer/WeedFSClient.git" + "basic.com/valib/deliver.git" "bytes" "encoding/base64" + "encoding/json" "errors" "fmt" "github.com/gin-gonic/gin" + "github.com/gogo/protobuf/proto" "github.com/satori/go.uuid" "image" "image/jpeg" @@ -14,14 +18,17 @@ "log" "mime/multipart" "net/http" + "path" "strconv" "strings" + "time" "webserver/extend/code" "webserver/extend/config" "webserver/extend/esutil" "webserver/extend/util" "webserver/models" "webserver/service" + esApi "basic.com/pubsub/esutil.git" ) type FileController struct { @@ -71,7 +78,7 @@ // fastdfs 涓婁紶 鏆傚簾寮� //field := fdfsclient.UploadFileByBuffer(data, fileSuffix) } - field, result, err := uploadFileReturnAddr(file, filename, tableId) + fileNameOnly, result, err := uploadFileReturnAddr(file, filename, tableId) if err != nil { if err.Error() == "NotFeatureFindError" { util.ResponseFormat(c, code.NotFeatureFindError, filename) @@ -87,7 +94,103 @@ util.ResponseFormat(c, code.ServiceInsideError, result["data"]) } } else { - util.ResponseFormat(c, code.Success, field) + util.ResponseFormat(c, code.Success, fileNameOnly) + } +} + + +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 + } + resultB, err := reqClient.Recv() + if err !=nil{ + util.ResponseFormat(c, code.ComError, "姣斿鏈嶅姟鍝嶅簲澶辫触") + return + } + m :=make(map[string]float32,0) + err = json.Unmarshal(resultB, &m) + if err !=nil{ + util.ResponseFormat(c, code.ComError, "result Unmarshal err") + return + } + personIds := make([]string,len(m)) + for k,_ :=range m{ + personIds = append(personIds,k) + } + dbpeople, e := esApi.Dbpersoninfosbyid(personIds, "dbtablepersons", "192.168.1.182", "9200") + if e !=nil{ + util.ResponseFormat(c, code.ComError, "result es query err") + } else { + util.ResponseFormat(c,code.Success,dbpeople) + } } } @@ -103,10 +206,9 @@ //灏嗕笂浼犵殑鍥剧墖浜や汉鑴告娴嬪拰浜鸿劯鎻愬彇锛岃幏寰楃壒寰� fileBytes, _ := ioutil.ReadAll(file) - faceArr, err, pI := service.GetFaceFeaFromSdk(fileBytes) + faceArr, err, pI := service.GetFaceFeaFromSdk(fileBytes, time.Second*5) if err ==nil && len(faceArr) >0 { var faceBase64= "" - var field = "" var rcFace *protomsg.Rect for _,r := range faceArr { rcFace = r.Pos.RcFace @@ -115,19 +217,12 @@ } //鏍规嵁浜鸿劯鍧愭爣鎵e嚭浜鸿劯灏忓浘 cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom)) - fileInfo, e := esutil.PostFormData(weedfsUri, "娴嬭瘯浜鸿劯鍒囧浘", "file", cutFaceImgData) - if e != nil { - fmt.Println(e.Error()) - + weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, "testCutFace", cutFaceImgData) + if e !=nil{ + util.ResponseFormat(c,code.ComError,"鏂囦欢涓婁紶澶辫触") } else { - field = fileInfo[picUrlField].(string) // 鏂囦欢璺緞 + util.ResponseFormat(c,code.Success,weedFilePath + ";" + faceBase64) } - if strings.Contains(field,"/"){ - idx := strings.Index(field, "/") - field = field[idx+1:] - } - fmt.Println("field:",field) - util.ResponseFormat(c,code.Success,field + ";" + faceBase64) } else { util.ResponseFormat(c,code.ComError,"鏈彁鍙栧埌浜鸿劯") } @@ -150,7 +245,7 @@ //灏嗕笂浼犵殑鍥剧墖浜や汉鑴告娴嬪拰浜鸿劯鎻愬彇锛岃幏寰楃壒寰� var faceBase64="" - faceArr, err,pI := service.GetFaceFeaFromSdk(fileBytes) + faceArr, err, pI := service.GetFaceFeaFromSdk(fileBytes, time.Second*5) if faceArr ==nil { return "",nil,errors.New("NotFeatureFindError") } @@ -179,17 +274,19 @@ field = field[idx+1:] } fmt.Println("field:",field) + ext := path.Ext(filename) + fileNameOnly := strings.TrimSuffix(filename, ext) dbperson := new(models.Dbtablepersons) dbperson.PersonPicUrl = field // 鍥剧墖璺粡 dbperson.TableId = tableId // - dbperson.PersonName = filename // 鍥剧墖鍚� + dbperson.PersonName = fileNameOnly // 鍥剧墖鍚� // 婕旂ずbase64缂栫爜 dbperson.FaceFeature = faceBase64 // 鐗瑰緛鍊糱ase64 鐮� result := addDbPerson(dbperson) - return field, result, nil + return fileNameOnly, result, nil } @@ -237,9 +334,9 @@ return } extNames := make([]string, 0) - isAllFiald := true addResult := make(map[string]interface{}, 0) - details := make([]string, 0) + successList := make([]string, 0) + failList := make([]string,0) for _, head := range fileHeaders { //鏂囦欢鐨勫悕绉� filename := head.Filename @@ -248,26 +345,22 @@ if err != nil { log.Fatal(err) } - //data, _ := ioutil.ReadAll(file) - // weedfs 涓婁紶 + field, _, err1 := uploadFileReturnAddr(file, filename, tableId) - extNames = append(extNames, field) - if isAllFiald && err1 == nil { - isAllFiald = false - } - if err1 != nil { - if field == "" { - details = append(details, filename+"涓婁紶澶辫触,"+err1.Error()) - } else { - details = append(details, filename+"鍔犲叆搴曞簱澶辫触,"+err1.Error()) - } + //extNames = append(extNames, field) + + if err1 != nil || field == "" { + failList = append(failList, filename) + } else { + successList = append(successList, filename) } } - addResult["isAllFiald"] = isAllFiald + addResult["successList"] = successList + addResult["failList"] = failList addResult["fields"] = extNames - addResult["detail"] = details + //addResult["detail"] = details //fields := fdfsclient.UploadFileByBuffer100(bytess, extNames) // fastdfs 涓婁紶 - if !isAllFiald { + if len(successList)>0 { util.ResponseFormat(c, code.Success, addResult) } else { util.ResponseFormat(c, code.ServiceInsideError, err.Error()) -- Gitblit v1.8.0