| | |
| | | return |
| | | } |
| | | var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit" |
| | | logger.Debug("weedfsUri:",weedfsUri) |
| | | resultMap :=make(map[string]interface{},0) |
| | | //将上传的图片交人脸检测和人脸提取,获得特征 |
| | | fileBytes, _ := ioutil.ReadAll(file) |
| | |
| | | logger.Debug("localConfig is wrong!!!") |
| | | return nil |
| | | } |
| | | logger.Debug("captureIds:",strings.Join(captureIds,",")) |
| | | videopersons, _ := esApi.Videopersonsinfosbyid(captureIds, config.EsInfo.EsIndex.VideoPersons.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort))) |
| | | logger.Debug("comp videoPersons.len:",len(videopersons)) |
| | | for _,vp :=range videopersons { |
| | |
| | | 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 |
| | |
| | | // @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") |
| | | return |
| | | } |
| | | 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, "本条抓怕特征不是base64,请检查") |
| | | |
| | | if searchBody.CompTargetId != "" {//做查找此人,按抓拍的人脸或者底库的人脸以图搜图 |
| | | if searchBody.CompTargetType == 0 {//本张人脸是底库人脸 |
| | | var dbpApi dbapi.DbPersonApi |
| | | dbPersons, e := dbpApi.Dbpersoninfosbyid([]string{searchBody.CompTargetId}) |
| | | if e ==nil && dbPersons !=nil && len(dbPersons) ==1 { |
| | | searchBase64Fea := dbPersons[0].FaceFeature |
| | | if searchBase64Fea != "" { |
| | | decodeF, err := base64.StdEncoding.DecodeString(dbPersons[0].FaceFeature) |
| | | if err !=nil { |
| | | util.ResponseFormat(c, code.ComError, "本条底库人员特征不是base64,请检查") |
| | | return |
| | | } |
| | | faceB = decodeF |
| | | } else { |
| | | util.ResponseFormat(c, code.ComError, "本条底库人员特征为空,请检查") |
| | | return |
| | | } |
| | | } else { |
| | | util.ResponseFormat(c, code.ComError, "底库人员查询失败,请检查") |
| | | return |
| | | } |
| | | faceB = decodeF |
| | | } else { |
| | | searchBase64Fea, err := esApi.GetVideoPersonFaceFeatureById(searchBody.CompTargetId, 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, "本条抓怕特征不是base64,请检查") |
| | | return |
| | | } |
| | | faceB = decodeF |
| | | } |
| | | } |
| | | |
| | | } else {//做以图搜图 |
| | | if searchBody.PicUrl == "" || len(searchBody.DataBases) == 0 { |
| | | util.ResponseFormat(c, code.RequestParamError, "参数有误") |
| | | util.ResponseFormat(c, code.RequestParamError, "以图搜图PicUrl不能为空") |
| | | return |
| | | } |
| | | if face,ok := faceExtractedMap[searchBody.PicUrl];!ok{ |
| | | util.ResponseFormat(c, code.RequestParamError, "请重新上传图片") |
| | | util.ResponseFormat(c, code.RequestParamError, "人脸特征未检测,请重新上传图片") |
| | | return |
| | | } else { |
| | | faceB = face.FaceBytes |
| | | } |
| | | } |
| | | |
| | | var sysSetApi dbapi.SysSetApi |
| | | analyServerId := "" |
| | | flag, sysconf := sysSetApi.GetServerInfo() |
| | | if flag { |
| | | analyServerId = sysconf.ServerId |
| | | } else { |
| | | util.ResponseFormat(c, code.ComError, "analyServerId为空,配置有误") |
| | | return |
| | | } |
| | | |
| | | if faceB == nil { |
| | |
| | | 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) |