| | |
| | | } |
| | | } |
| | | |
| | | type CompareResult struct { |
| | | Id string `json:"id"` |
| | | CameraId string `json:"cameraId"` |
| | | CameraAddr string `json:"cameraAddr"` |
| | | PicDate string `json:"picDate"` |
| | | Content string `json:"content"` |
| | | IsAlarm int `json:"isAlarm"` |
| | | PicMaxUrl string `json:"picMaxUrl"` |
| | | PicSmUrl []string `json:"picSmUrl"` |
| | | Sex string `json:"sex"` |
| | | AgeDescription string `json:"ageDescription"` |
| | | Race string `json:"race"` |
| | | TaskName string `json:"taskName"` |
| | | BaseInfo []DbPersonVo `json:"baseInfo"` |
| | | VideoUrl string `json:"videoUrl"` |
| | | } |
| | | type DbPersonVo struct { |
| | | BwType string `json:"bwType"` |
| | | CompareScore float32 `json:"compareScore"` |
| | | IdCard string `json:"idCard"` |
| | | MonitorLevel string `json:"monitorLevel"` |
| | | PersonId string `json:"personId"` |
| | | PersonName string `json:"personName"` |
| | | PersonPicUrl string `json:"personPicUrl"` |
| | | PhoneNum string `json:"phoneNum"` |
| | | Sex string `json:"sex"` |
| | | TableId string `json:"tableId"` |
| | | TableName string `json:"tableName"` |
| | | } |
| | | |
| | | var captureTable = "capturetable" // 抓拍库 |
| | | type SearchCondition struct { |
| | | Url string `json:"url"` |
| | | TableIds []string `json:"tableIds"` |
| | | CompThreshold string `json:"compThreshold"` |
| | | } |
| | | // @Summary 以图搜图 |
| | | // @Description 以图搜图 |
| | | // @Accept json |
| | | // @Produce json |
| | | // @Tags 以图搜图 |
| | | // @Param url formData string true "url" |
| | | // @Param tableId formData string true "底库id" |
| | | // @Param compThreshold formData string true "比对阈值" |
| | | // @Param condition body controllers.SearchCondition 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") |
| | | tableId := c.Request.FormValue("tableId")//底库id |
| | | compThresholdStr := c.Request.FormValue("compThreshold")//比对阈值 |
| | | compThreshold, err := strconv.ParseFloat(compThresholdStr,32) |
| | | if photoUrl == "" || err != nil { |
| | | var condition SearchCondition |
| | | err := c.BindJSON(&condition) |
| | | if err !=nil || condition.Url == "" { |
| | | util.ResponseFormat(c, code.RequestParamError, "参数有误") |
| | | return |
| | | } |
| | | if face,ok := faceExtractedMap[photoUrl];!ok{ |
| | | compThreshold, err := strconv.ParseFloat(condition.CompThreshold,32) |
| | | if condition.Url == "" || err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, "参数有误") |
| | | return |
| | | } |
| | | if face,ok := faceExtractedMap[condition.Url];!ok{ |
| | | util.ResponseFormat(c, code.RequestParamError, "参数有误") |
| | | return |
| | | } else { |
| | | arg := protomsg.CompareArgs{ |
| | | TableIds:[]string{ captureTable }, |
| | | FaceFeature:face.FaceBytes, |
| | | CompareThreshold:float32(compThreshold), |
| | | } |
| | | if tableId !=""{ |
| | | arg.TableIds = []string{ tableId } |
| | | if condition.TableIds !=nil { |
| | | arg.TableIds = append(arg.TableIds, condition.TableIds...) |
| | | } |
| | | b, err := proto.Marshal(&arg) |
| | | if err !=nil{ |
| | |
| | | } |
| | | compServerList := config.CompServerInfo.Url |
| | | fmt.Println("compServerList:", compServerList) |
| | | resultList :=make([]protomsg.Dbperson,0) |
| | | resultList :=make([]CompareResult,0) |
| | | for _,str :=range compServerList{ |
| | | reqUrl := "tcp://"+str |
| | | reqClient := deliver.NewClient(deliver.ReqRep, reqUrl) |
| | |
| | | if err !=nil{ |
| | | continue |
| | | } |
| | | m :=make(map[string]float32,0) |
| | | err = json.Unmarshal(resultB, &m) |
| | | rList :=make([]protomsg.Esinfo,0) |
| | | err = json.Unmarshal(resultB, &rList) |
| | | if err !=nil{ |
| | | continue |
| | | } |
| | | personIds := make([]string,len(m)) |
| | | for k,_ :=range m{ |
| | | personIds = append(personIds,k) |
| | | |
| | | var dbPersonM map[string]*protomsg.Esinfo |
| | | var captureM map[string]*protomsg.Esinfo |
| | | var personIds []string |
| | | var captureIds []string |
| | | for _,v :=range rList{ |
| | | if v.Tableid == captureTable { |
| | | captureM[v.Id] = &v |
| | | personIds = append(personIds,v.Id) |
| | | } else { |
| | | dbPersonM[v.Id] = &v |
| | | captureIds = append(captureIds,v.Id) |
| | | } |
| | | } |
| | | esServerIp := config.EsInfo.Masterip |
| | | esServerPort := config.EsInfo.Httpport |
| | | index := config.EsInfo.EsIndex.Dbtablepersons.IndexName |
| | | dbpeople, e := esApi.Dbpersoninfosbyid(personIds, index, esServerIp, esServerPort) |
| | | if e ==nil{ |
| | | resultList = append(resultList,dbpeople...) |
| | | dbpersons, e := esApi.Dbpersoninfosbyid(personIds, index, esServerIp, esServerPort) |
| | | if e ==nil && dbpersons !=nil { |
| | | for _,p :=range dbpersons { |
| | | var dbP = DbPersonVo { |
| | | PersonId: p.Id, |
| | | IdCard: p.IdCard, |
| | | CompareScore: dbPersonM[p.Id].CompareScore, |
| | | MonitorLevel: p.MonitorLevel, |
| | | PersonName: p.PersonName, |
| | | PersonPicUrl: p.PersonPicUrl, |
| | | PhoneNum: p.PhoneNum, |
| | | Sex: p.Sex, |
| | | TableId: p.TableId, |
| | | } |
| | | dbTableInfos, _ := esApi.Dbtablefosbyid([]string{p.TableId}, config.EsInfo.EsIndex.DbTables.IndexName, esServerIp, esServerPort) |
| | | if dbTableInfos !=nil{ |
| | | dbP.BwType = dbTableInfos[0].BwType |
| | | dbP.TableName = dbTableInfos[0].TableName |
| | | } |
| | | var cr = CompareResult{ |
| | | BaseInfo:[]DbPersonVo{ dbP }, |
| | | } |
| | | resultList = append(resultList,cr) |
| | | } |
| | | } |
| | | } |
| | | util.ResponseFormat(c,code.Success,resultList) |