From 05f96119b4d2e73316f221b08554a7de543fb0d5 Mon Sep 17 00:00:00 2001 From: liuxiaolong <736321739@qq.com> Date: 星期六, 27 七月 2019 16:15:51 +0800 Subject: [PATCH] fix compare sdkName=人脸 --- controllers/fileController.go | 215 +++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 165 insertions(+), 50 deletions(-) diff --git a/controllers/fileController.go b/controllers/fileController.go index 8f97e3e..a82d000 100644 --- a/controllers/fileController.go +++ b/controllers/fileController.go @@ -1,16 +1,14 @@ package controllers import ( - "basic.com/pubsub/protomsg.git" + "basic.com/dbapi.git" "basic.com/fileServer/WeedFSClient.git" - "basic.com/valib/deliver.git" + "basic.com/pubsub/protomsg.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" @@ -25,10 +23,10 @@ "webserver/extend/code" "webserver/extend/config" "webserver/extend/esutil" + "webserver/extend/logger" "webserver/extend/util" "webserver/models" "webserver/service" - esApi "basic.com/pubsub/esutil.git" ) type FileController struct { @@ -105,7 +103,13 @@ } var faceExtractedMap = make(map[string]FaceExtract,0) -// @Description 浜鸿劯鎻愬彇 +// @Summary 浜鸿劯鎻愬彇 +// @Description 浜鸿劯鎻愬彇 +// @Produce json +// @Tags 浠ュ浘鎼滃浘 +// @Param file formData file true "浜哄憳鍥剧墖" +// @Success 200 {string} json "{"code":200, msg:"", data:"", success:true}" +// @Failure 500 {string} json "{"code":500, msg:"", data:"", success:false}" // @Router /data/api-v/dbperson/faceExtract [POST] func (controller FileController) FaceExtract(c *gin.Context) { file, _, err := c.Request.FormFile("file") //image杩欎釜鏄痷plaodify鍙傛暟瀹氫箟涓殑 'fileObjName':'image' @@ -114,11 +118,12 @@ return } var weedfsUri = "http://"+config.WeedFs.Ip+":"+strconv.Itoa(config.WeedFs.UploadPort)+"/submit" - + resultMap :=make(map[string]interface{},0) //灏嗕笂浼犵殑鍥剧墖浜や汉鑴告娴嬪拰浜鸿劯鎻愬彇锛岃幏寰楃壒寰� fileBytes, _ := ioutil.ReadAll(file) faceArr, err, pI := service.GetFaceFeaFromSdk(fileBytes, time.Second*60) if err ==nil && len(faceArr) >0 { + //1.鎻愬彇姣忎竴寮犱汉鑴稿皬鍥� urlArr := make([]string,0) for _,r := range faceArr { rcFace := r.Pos.RcFace @@ -132,67 +137,176 @@ urlArr = append(urlArr, weedFilePath) } } - if len(urlArr) == 0{ - util.ResponseFormat(c,code.ComError,"鏈彁鍙栧埌浜鸿劯") - } else { - util.ResponseFormat(c,code.Success,urlArr) - } + //2.澶у浘鐢绘,鏍囪瘑浜鸿劯浣嶇疆 + originFilePath, _ := WeedFSClient.UploadFile(weedfsUri, "FaceUrl", fileBytes) + resultMap["uploadImage"] = originFilePath + resultMap["smImage"] = urlArr + util.ResponseFormat(c,code.Success, resultMap) } else { util.ResponseFormat(c,code.ComError,"鏈彁鍙栧埌浜鸿劯") } } -// @Description 浠ュ浘鎼滃浘 +// @Summary 浠ュ浘鎼滃浘 +// @Description 浠ュ浘鎼滃浘 +// @Accept json +// @Produce json +// @Tags 浠ュ浘鎼滃浘 +// @Param condition body models.EsSearch true "鎼滅储鍙傛暟" +// @Success 200 {string} json "{"code":200, msg:"", data:"", success:true}" +// @Failure 500 {string} json "{"code":500, msg:"", data:"", success:false}" // @Router /data/api-v/dbperson/searchByPhoto [POST] func (controller FileController) SearchByPhoto(c *gin.Context) { - photoUrl := c.Request.FormValue("url") - if photoUrl == "" { + var searchBody models.EsSearch + err := c.BindJSON(&searchBody) + if err !=nil || searchBody.PicUrl == "" || len(searchBody.DataBases) == 0 { util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎") return } - if face,ok := faceExtractedMap[photoUrl];!ok{ - util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎") + if searchBody.CompareNum !="" { + //浜屾鎼滅储锛屼笉闇�瑕佸啀姣斿浜� + co := service.GetCompResultByNum(searchBody.CompareNum) + if co != nil { + //浜屾鎼滅储鍜屾帓搴� + twiceM := GetCompareDataTwice(co,&searchBody) + util.ResponseFormat(c,code.Success,twiceM) + } else { + m :=make(map[string]interface{},0) + m["compareNum"] = searchBody.CompareNum + m["total"] = 0 + m["totalList"] = []service.CompareResult{} + util.ResponseFormat(c,code.CompareResultGone,m) + } + } + var sysSetApi dbapi.SysSetApi + analyServerId := "" + flag, sysconf := sysSetApi.GetServerInfo() + if flag { + analyServerId = sysconf.ServerId + } else { + util.ResponseFormat(c, code.ComError, "analyServerId涓虹┖锛岄厤缃湁璇�") + return + } + if face,ok := faceExtractedMap[searchBody.PicUrl];!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, + FaceFeature: face.FaceBytes, + CompareThreshold: searchBody.Threshold, } - b, err := proto.Marshal(&arg) - if err !=nil{ - util.ResponseFormat(c, code.ComError, "璇锋眰marshal澶辫触") - return + + if searchBody.DataBases !=nil { + for idx,tableId :=range searchBody.DataBases { + if tableId == "esData" { + searchBody.DataBases = append(searchBody.DataBases[:idx], searchBody.DataBases[idx+1:]...) + searchBody.DataBases = append(searchBody.DataBases,service.CaptureTable) + break + } + } + arg.TableIds = searchBody.DataBases } - 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") + arg.Source = true // 鏍囪瘑鏉ユ簮鏄痺eb + arg.AlarmLevel = searchBody.AlarmLevel + arg.Tasks = searchBody.Tasks + arg.TreeNodes = searchBody.TreeNodes + arg.Tabs = searchBody.Tabs + arg.SearchTime = searchBody.SearchTime + arg.InputValue = searchBody.InputValue + arg.Collection = searchBody.Collection + arg.AnalyServerId = analyServerId + + logger.Debug("arg.TableIds:", arg.TableIds, ",alarmLevel:",arg.AlarmLevel,",treeNodes:",arg.TreeNodes,",searchTime:",arg.SearchTime, + ",inputValue:",arg.InputValue,",tasks:",arg.Tasks,",compThreshold:",arg.CompareThreshold) + compareService := service.NewFaceCompareService(arg) + compareOnce := compareService.Compare() + logger.Debug("compareResult:",*compareOnce) + dataList := compareOnce.CompareData + service.SortByScore(dataList) + totalList := len(dataList) + m := make(map[string]interface{},3) + m["compareNum"] = compareOnce.CompareNum + m["total"] = totalList + if totalList <= searchBody.Size { + m["totalList"] = dataList } else { - util.ResponseFormat(c,code.Success,dbpeople) + m["totalList"] = dataList[0:searchBody.Size] } + util.ResponseFormat(c,code.Success,m) } } + +func GetCompareDataTwice(co *service.CompareOnce,arg *models.EsSearch) map[string]interface{} { + camIds := arg.TreeNodes + tabIds := arg.Tabs + taskIds := arg.Tasks + alarmLevels := arg.AlarmLevel + timeArr := arg.SearchTime + input := arg.InputValue + resultList := make([]service.CompareResult,0) + for _,cr :=range co.CompareData { + if cr.Id !=""{ + n :=0 + if len(camIds) == 0 || isInArr(cr.CameraId,camIds) { + n++ + } + if len(tabIds) == 0 { + n++ + } + if len(taskIds) == 0 || isInArr(cr.TaskId, taskIds) { + n++ + } + //鍒ゆ柇鎶ヨ绛夌骇 + if len(alarmLevels) == 0 { + + } + n++ + //鍒ゆ柇鏃堕棿 + if len(timeArr) == 0 { + + } + n++ + if input == ""{ + + } + n++ + if n == 6 { + resultList = append(resultList,cr) + } + } else { + resultList = append(resultList,cr) + } + } + logger.Debug("GetCompareDataTwice.data:",resultList) + service.SortByScore(resultList) + from := (arg.Page-1)*arg.Size + to := from + arg.Size + lenth := len(resultList) + m := make(map[string]interface{},0) + m["total"] = lenth + m["compareNum"] = arg.CompareNum + + if from < len(resultList) { + if to <= len(resultList) { + m["totalList"] = resultList[from:to] + } else { + m["totalList"] = resultList[from:len(resultList)] + } + } else { + m["totalList"] = []service.CompareResult{} + } + return m +} + +func isInArr(id string,arr []string) bool { + for _,v :=range arr { + if v == id { + return true + } + } + return false +} + // @Description 浜哄憳鐓х墖涓婁紶骞惰幏鍙栫壒寰佸�� // @Router /data/api-v/dbperson/fileUploadTest [POST] @@ -281,6 +395,7 @@ dbperson.PersonPicUrl = field // 鍥剧墖璺粡 dbperson.TableId = tableId // dbperson.PersonName = fileNameOnly // 鍥剧墖鍚� + dbperson.Enable = 1 //榛樿鏈夋晥 // 婕旂ずbase64缂栫爜 dbperson.FaceFeature = faceBase64 // 鐗瑰緛鍊糱ase64 鐮� @@ -361,7 +476,7 @@ //addResult["detail"] = details //fields := fdfsclient.UploadFileByBuffer100(bytess, extNames) // fastdfs 涓婁紶 if len(successList)>0 { - util.ResponseFormat(c, code.Success, addResult) + util.ResponseFormat(c, code.DbPersonUploadSuccess, addResult) } else { util.ResponseFormat(c, code.ServiceInsideError, err.Error()) } -- Gitblit v1.8.0