| | |
| | | package controllers |
| | | |
| | | import ( |
| | | "basic.com/dbapi.git" |
| | | "basic.com/pubsub/protomsg.git" |
| | | "basic.com/fileServer/WeedFSClient.git" |
| | | "basic.com/valib/deliver.git" |
| | |
| | | } |
| | | |
| | | var captureTable = "capturetable" // 抓拍库 |
| | | type SearchCondition struct { |
| | | PicUrl string `json:"picUrl"` |
| | | Databases []string `json:"databases"` |
| | | Threshold string `json:"threshold"` |
| | | } |
| | | // @Summary 以图搜图 |
| | | // @Description 以图搜图 |
| | | // @Accept json |
| | | // @Produce json |
| | | // @Tags 以图搜图 |
| | | // @Param condition body controllers.SearchCondition true "搜索参数" |
| | | // @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) { |
| | | var condition SearchCondition |
| | | err := c.BindJSON(&condition) |
| | | if err !=nil || condition.PicUrl == "" { |
| | | var searchBody models.EsSearch |
| | | err := c.BindJSON(&searchBody) |
| | | if err !=nil || searchBody.PicUrl == "" || len(searchBody.DataBases) == 0 { |
| | | util.ResponseFormat(c, code.RequestParamError, "参数有误") |
| | | return |
| | | } |
| | | compThreshold, err := strconv.ParseFloat(condition.Threshold,32) |
| | | if condition.PicUrl == "" || err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, "参数有误") |
| | | 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[condition.PicUrl];!ok{ |
| | | util.ResponseFormat(c, code.RequestParamError, "参数有误") |
| | | if face,ok := faceExtractedMap[searchBody.PicUrl];!ok{ |
| | | util.ResponseFormat(c, code.RequestParamError, "请重新上传图片") |
| | | return |
| | | } else { |
| | | arg := protomsg.CompareArgs{ |
| | | TableIds:[]string{ captureTable }, |
| | | FaceFeature:face.FaceBytes, |
| | | CompareThreshold:float32(compThreshold), |
| | | FaceFeature: face.FaceBytes, |
| | | CompareThreshold: searchBody.Threshold, |
| | | } |
| | | if condition.Databases !=nil { |
| | | arg.TableIds = append(arg.TableIds, condition.Databases...) |
| | | |
| | | 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,captureTable) |
| | | break |
| | | } |
| | | } |
| | | arg.TableIds = searchBody.DataBases |
| | | } |
| | | arg.Source = true // 标识来源是web |
| | | 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) |
| | | b, err := proto.Marshal(&arg) |
| | | if err !=nil{ |
| | | util.ResponseFormat(c, code.ComError, "请求marshal失败") |
| | |
| | | |
| | | dbPersonM := make(map[string]*protomsg.Esinfo,0) |
| | | captureM := make(map[string]*protomsg.Esinfo,0) |
| | | var personIds []string |
| | | var captureIds []string |
| | | personIds :=make([]string,0) |
| | | captureIds := make([]string,0) |
| | | for _,v :=range rList{ |
| | | if v.Tableid == captureTable { |
| | | captureM[v.Id] = &v |
| | | personIds = append(personIds,v.Id) |
| | | captureIds = append(captureIds,v.Id) |
| | | } else { |
| | | dbPersonM[v.Id] = &v |
| | | captureIds = append(captureIds,v.Id) |
| | | personIds = append(personIds,v.Id) |
| | | } |
| | | } |
| | | logger.Debug("personIds:", personIds) |
| | | logger.Debug("captureIds:",captureIds) |
| | | esServerIp := config.EsInfo.Masterip |
| | | esServerPort := config.EsInfo.Httpport |
| | | index := config.EsInfo.EsIndex.Dbtablepersons.IndexName |
| | | dbpersons, e := esApi.Dbpersoninfosbyid(personIds, index, esServerIp, esServerPort) |
| | | if e !=nil { |
| | | logger.Debug("Dbpersoninfosbyid.err:",e) |
| | | } |
| | | logger.Debug("dbpersons:", dbpersons) |
| | | if e ==nil && dbpersons !=nil { |
| | | for _,p :=range dbpersons { |
| | | var dbP = DbPersonVo { |
| | | PersonId: p.Id, |
| | | IdCard: p.IdCard, |
| | | CompareScore: dbPersonM[p.Id].CompareScore, |
| | | CompareScore: util.ParseScore(dbPersonM[p.Id].CompareScore), |
| | | MonitorLevel: p.MonitorLevel, |
| | | PersonName: p.PersonName, |
| | | PersonPicUrl: p.PersonPicUrl, |
| | |
| | | resultList = append(resultList,cr) |
| | | } |
| | | } |
| | | |
| | | logger.Debug("resultList:",resultList) |
| | | } |
| | | util.ResponseFormat(c,code.Success,resultList) |
| | |
| | | dbperson.PersonPicUrl = field // 图片路经 |
| | | dbperson.TableId = tableId // |
| | | dbperson.PersonName = fileNameOnly // 图片名 |
| | | dbperson.Enable = 1 //默认有效 |
| | | // 演示base64编码 |
| | | |
| | | dbperson.FaceFeature = faceBase64 // 特征值base64 码 |
| | |
| | | //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()) |
| | | } |