From 5d78b36e851a5862302f2e40c99a4477020c79bc Mon Sep 17 00:00:00 2001 From: liuxiaolong <736321739@qq.com> Date: 星期五, 20 九月 2019 13:46:52 +0800 Subject: [PATCH] 查找此人时先切图 --- controllers/fileController.go | 115 ++++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 81 insertions(+), 34 deletions(-) diff --git a/controllers/fileController.go b/controllers/fileController.go index e1fb740..99cce1b 100644 --- a/controllers/fileController.go +++ b/controllers/fileController.go @@ -337,6 +337,36 @@ return level } +func GetFeaFromOneFaceImg(fileBytes []byte) (faceB []byte,oriImg string,smImgs []string, err error){ + localConf, err2 := cache.GetServerInfo() + if err2 !=nil || localConf.WebPicIp == "" { + logger.Debug("localConfig is wrong!!!") + return nil,"",nil,errors.New("localConf err") + } + var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit" + logger.Debug("weedfsUri:",weedfsUri) + faceArr, err, pI := service.GetFaceFeaFromSdk(fileBytes, time.Second*60) + if err ==nil && len(faceArr) ==1 { + rcFace := faceArr[0].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:faceArr[0].Feats, + } + smImgs = append(smImgs, weedFilePath) + } + //2.澶у浘鐢绘,鏍囪瘑浜鸿劯浣嶇疆 + drawedB, _ := drawPolygonOnImg(pI, &faceArr) + + originFilePath, _ := WeedFSClient.UploadFile(weedfsUri, "FaceUrl", *drawedB) + return faceArr[0].Feats,originFilePath,smImgs,nil + } else { + return nil,"",nil,errors.New("no face") + } +} + // @Summary 浠ュ浘鎼滃浘 // @Description 浠ュ浘鎼滃浘 // @Accept json @@ -346,55 +376,70 @@ // @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) { +func (fc FileController) SearchByPhoto(c *gin.Context) { var searchBody models.EsSearch err := c.BindJSON(&searchBody) if err !=nil{ util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎") return } + localConf, err2 := cache.GetServerInfo() + if err2 !=nil || localConf.AlarmIp == "" || localConf.ServerId == "" { + logger.Debug("localConfig is wrong!!!") + util.ResponseFormat(c,code.ComError,"localConf wrong") + return + } var faceB []byte - if searchBody.CaptureId != "" {//鍋氭煡鎵炬浜�,鎼滄墍鏈夋姄鎷嶅拰搴曞簱 - localConf, err2 := cache.GetServerInfo() - if err2 !=nil || localConf.AlarmIp == "" || localConf.ServerId == "" { - logger.Debug("localConfig is wrong!!!") - util.ResponseFormat(c,code.ComError,"localConf wrong") + var uploadImage string + var smImages []string + //if searchBody.CaptureId != "" {//鍋氭煡鎵炬浜�,鎼滄墍鏈夋姄鎷嶅拰搴曞簱 + // searchBase64Fea, err := esApi.GetVideoPersonFaceFeatureById(searchBody.CaptureId, config.EsInfo.EsIndex.VideoPersons.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort))) + // if err !=nil { + // util.ResponseFormat(c, code.ComError, "鎶撴媿鏁版嵁涓嶅瓨鍦紝璇锋鏌�") + // return + // } + // if searchBase64Fea !=""{ + // decodeF, err := base64.StdEncoding.DecodeString(searchBase64Fea) + // if err !=nil { + // util.ResponseFormat(c, code.ComError, "鏈潯鎶撴�曠壒寰佷笉鏄痓ase64锛岃妫�鏌�") + // return + // } + // faceB = decodeF + // } + //} else {//鍋氫互鍥炬悳鍥� + // + //} + + if searchBody.PicUrl == "" || len(searchBody.DataBases) == 0 { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎") + return + } + if face,ok := faceExtractedMap[searchBody.PicUrl];!ok{ + httpPicUrl := "" + idx := strings.LastIndex(searchBody.PicUrl, ":") + if idx>-1 { + httpPicUrl = "http://"+localConf.WebPicIp+searchBody.PicUrl[idx:] + } else { + util.ResponseFormat(c, code.RequestParamError, "璇烽噸鏂颁笂浼犲浘鐗�") return } - searchBase64Fea, err := esApi.GetVideoPersonFaceFeatureById(searchBody.CaptureId, config.EsInfo.EsIndex.VideoPersons.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort))) + logger.Debug("httpPicUrl:",httpPicUrl) + rb,err := util.ReadImgData(httpPicUrl) if err !=nil { - util.ResponseFormat(c, code.ComError, "鎶撴媿鏁版嵁涓嶅瓨鍦紝璇锋鏌�") + util.ResponseFormat(c, code.RequestParamError, "璇烽噸鏂颁笂浼犲浘鐗�") return } - if searchBase64Fea !=""{ - decodeF, err := base64.StdEncoding.DecodeString(searchBase64Fea) - if err !=nil { - util.ResponseFormat(c, code.ComError, "鏈潯鎶撴�曠壒寰佷笉鏄痓ase64锛岃妫�鏌�") - return - } - faceB = decodeF - } - } else {//鍋氫互鍥炬悳鍥� - if searchBody.PicUrl == "" || len(searchBody.DataBases) == 0 { - util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎") - return - } - if face,ok := faceExtractedMap[searchBody.PicUrl];!ok{ + feaB, oriImg, smImgs, e := GetFeaFromOneFaceImg(rb) + if e !=nil { util.ResponseFormat(c, code.RequestParamError, "璇烽噸鏂颁笂浼犲浘鐗�") return } else { - faceB = face.FaceBytes + uploadImage = oriImg + smImages = smImgs + faceB = feaB } - } - - var sysSetApi dbapi.SysSetApi - analyServerId := "" - flag, sysconf := sysSetApi.GetServerInfo() - if flag { - analyServerId = sysconf.ServerId } else { - util.ResponseFormat(c, code.ComError, "analyServerId涓虹┖锛岄厤缃湁璇�") - return + faceB = face.FaceBytes } if faceB == nil { @@ -427,7 +472,7 @@ arg.SearchTime = searchBody.SearchTime arg.InputValue = searchBody.InputValue arg.Collection = searchBody.Collection - arg.AnalyServerId = analyServerId + arg.AnalyServerId = localConf.ServerId logger.Debug("arg.TableIds:", arg.TableIds, ",alarmLevel:",arg.AlarmLevel,",treeNodes:",arg.TreeNodes,",searchTime:",arg.SearchTime, ",inputValue:",arg.InputValue,",tasks:",arg.Tasks,",compThreshold:",arg.CompareThreshold) @@ -454,7 +499,9 @@ CompareData: &totalData, }) - m := make(map[string]interface{},3) + m := make(map[string]interface{},5) + m["uploadImage"] = uploadImage + m["smImage"] = smImages if totalData != nil && totalData.Len() > 0{ sort.Sort(totalData) total := totalData.Len() -- Gitblit v1.8.0