| | |
| | | |
| | | //var weedfsUri = "http://192.168.1.182:9500/submit" |
| | | |
| | | // @Security ApiKeyAuth |
| | | // @Summary 依据图片添加底库人员 |
| | | // @Description 依据图片添加底库返回数据人员 |
| | | // @Accept mpfd |
| | | // @Accept multipart/form-data |
| | | // @Produce json |
| | | // @Tags dbperson 底库人员 |
| | | // @Param file formData file true "底库人员图片" |
| | |
| | | } |
| | | var faceExtractedMap = make(map[string]FaceExtract,0) |
| | | |
| | | // @Security ApiKeyAuth |
| | | // @Summary 人脸提取 |
| | | // @Description 人脸提取 |
| | | // @Accept multipart/form-data |
| | | // @Produce json |
| | | // @Tags 以图搜图 |
| | | // @Param file formData file true "人员图片" |
| | |
| | | |
| | | type CompareResult struct { |
| | | Id string `json:"id"` |
| | | CompareScore float32 `json:"compareScore"` |
| | | CompareScore float64 `json:"compareScore"` |
| | | CameraId string `json:"cameraId"` |
| | | CameraName string `json:"cameraName"` |
| | | 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"` |
| | | IsAlarm bool `json:"isAlarm"` |
| | | PicMaxUrl []string `json:"picMaxUrl"` |
| | | TargetInfo []TargetInfo `json:"targetInfo"` |
| | | TaskId string `json:"taskId"` |
| | | TaskName string `json:"taskName"` |
| | | BaseInfo []DbPersonVo `json:"baseInfo"` |
| | | VideoUrl string `json:"videoUrl"` |
| | | SdkName string `json:"sdkName"` |
| | | AlarmRules []AlarmRuleVo `json:"alarmRules"` |
| | | } |
| | | |
| | | type TargetInfo struct { |
| | | TargetId string `json:"targetId"` |
| | | TargetType string `json:"targetType"` |
| | | TargetScore float64 `json:"targetScore"` |
| | | Feature string `json:"feature"` |
| | | PicSmUrl string `json:"picSmUrl"` |
| | | TargetLocation TargetLocation `json:"targetLocation"` |
| | | } |
| | | |
| | | type TargetLocation struct { |
| | | TopLeft protomsg.Location `json:"topLeft"` |
| | | BottomRight protomsg.Location `json:"bottomRight"` |
| | | } |
| | | |
| | | 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"` |
| | | BwType string `json:"bwType"` |
| | | CompareScore float64 `json:"compareScore"` |
| | | TargetId string `json:"targetId"` |
| | | TargetName string `json:"targetName"` |
| | | TargetPicUrl string `json:"targetPicUrl"` |
| | | MonitorLevel string `json:"monitorLevel"` |
| | | Labels string `json:"labels"` |
| | | Content string `json:"content"` |
| | | Enable int32 `json:"enable"` |
| | | } |
| | | |
| | | type ScoreIndex struct { |
| | | CompareScore float32 |
| | | CompareScore float64 |
| | | Index int |
| | | } |
| | | |
| | | type AlarmRuleVo struct { |
| | | GroupId string `json:"groupId"` |
| | | AlarmLevel string `json:"alarmLevel"` |
| | | RuleText string `json:"ruleText"` |
| | | DefenceState bool `json:"defenceState"` |
| | | IsLink bool `json:"isLink"` |
| | | LinkInfo string `json:"linkInfo"` |
| | | } |
| | | |
| | | //填充向前端返回的数据 |
| | |
| | | if v.Tableid == service.CaptureTable { |
| | | captureM[v.Id] = ScoreIndex{ |
| | | Index: idx, |
| | | CompareScore: v.CompareScore, |
| | | CompareScore: util.ParseScore64(float64(v.CompareScore)), |
| | | } |
| | | captureIds = append(captureIds,v.Id) |
| | | } else { |
| | | dbPersonM[v.Id] = ScoreIndex{ |
| | | Index: idx, |
| | | CompareScore: v.CompareScore, |
| | | CompareScore: util.ParseScore64(float64(v.CompareScore)), |
| | | } |
| | | personIds = append(personIds,v.Id) |
| | | } |
| | |
| | | var dtApi dbapi.DbTableApi |
| | | for _,p :=range dbpersons { |
| | | var dbP = DbPersonVo { |
| | | PersonId: p.Id, |
| | | IdCard: p.IdCard, |
| | | CompareScore: util.ParseScore(dbPersonM[p.Id].CompareScore), |
| | | TargetId: p.Id, |
| | | CompareScore: dbPersonM[p.Id].CompareScore, |
| | | MonitorLevel: p.MonitorLevel, |
| | | PersonName: p.PersonName, |
| | | PersonPicUrl: p.PersonPicUrl, |
| | | PhoneNum: p.PhoneNum, |
| | | Sex: p.Sex, |
| | | TargetName: p.PersonName, |
| | | TargetPicUrl: p.PersonPicUrl, |
| | | Labels: p.PhoneNum+"/"+p.Sex+"/"+p.IdCard, |
| | | TableId: p.TableId, |
| | | Content: p.Reserved, |
| | | Enable: p.Enable, |
| | | } |
| | | dbTableInfos, _ := dtApi.DbtablesById([]string{ p.TableId }) |
| | |
| | | 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 { |
| | | isAlarmInt, _ := strconv.Atoi(vp.IsAlarm) |
| | | bi := make([]DbPersonVo,0) |
| | | aiTargets, _ := esApi.AIOceaninfosbyid(captureIds, config.EsInfo.EsIndex.AiOcean.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort))) |
| | | logger.Debug("comp aiTargets.len:",len(aiTargets)) |
| | | for _,vp :=range aiTargets { |
| | | var bi []DbPersonVo |
| | | for _,p :=range vp.BaseInfo { |
| | | bi = append(bi, DbPersonVo{ |
| | | PersonId: p.PersonId, |
| | | IdCard: p.IdCard, |
| | | CompareScore: util.ParseScore(p.CompareScore), |
| | | MonitorLevel: parseMonitorLevel(p.MonitorLevel), |
| | | PersonName: p.PersonName, |
| | | PersonPicUrl: p.PersonPicUrl, |
| | | PhoneNum: p.PhoneNum, |
| | | Sex: p.Sex, |
| | | TargetId: p.TargetId, |
| | | CompareScore: util.ParseScore64(p.CompareScore), |
| | | MonitorLevel: p.MonitorLevel, |
| | | TargetName: p.TargetName, |
| | | TargetPicUrl: p.TargetPicUrl, |
| | | Labels: p.Labels, |
| | | TableId: p.TableId, |
| | | BwType: strconv.Itoa(int(p.BwType)), |
| | | BwType: p.BwType, |
| | | TableName: p.TableName, |
| | | }) |
| | | } |
| | | var alarmRules []AlarmRuleVo |
| | | if vp.AlarmRules !=nil && len(vp.AlarmRules) >0 { |
| | | for _,ar :=range vp.AlarmRules { |
| | | alarmRules = append(alarmRules, AlarmRuleVo{ |
| | | GroupId: ar.GroupId, |
| | | AlarmLevel: ar.AlarmLevel, |
| | | RuleText: ar.RuleText, |
| | | DefenceState: ar.DefenceState, |
| | | IsLink: ar.IsLink, |
| | | LinkInfo: ar.LinkInfo, |
| | | }) |
| | | } |
| | | } |
| | | var ti = make([]TargetInfo,0) |
| | | if vp.TargetInfo !=nil { |
| | | for _,vti :=range vp.TargetInfo { |
| | | tl := protomsg.Location{ |
| | | X: vti.TargetLocation.TopLeft.X, |
| | | Y: vti.TargetLocation.TopLeft.Y, |
| | | } |
| | | br := protomsg.Location{ |
| | | X: vti.TargetLocation.BottomRight.X, |
| | | Y: vti.TargetLocation.BottomRight.Y, |
| | | } |
| | | tInfo := TargetInfo{ |
| | | TargetId: vti.TargetId, |
| | | TargetType: vti.TargetType, |
| | | TargetScore: vti.TargetScore, |
| | | Feature: vti.Feature, |
| | | PicSmUrl: vti.PicSmUrl, |
| | | TargetLocation: TargetLocation{ |
| | | TopLeft:tl, |
| | | BottomRight:br, |
| | | }, |
| | | } |
| | | ti = append(ti, tInfo) |
| | | } |
| | | } |
| | | vpE := CompareResult{ |
| | | Id: vp.Id, |
| | | CompareScore: util.ParseScore(captureM[vp.Id].CompareScore), |
| | | CompareScore: captureM[vp.Id].CompareScore, |
| | | CameraId: vp.CameraId, |
| | | CameraName: vp.CameraName, |
| | | CameraAddr: vp.CameraAddr, |
| | | PicDate: vp.PicDate, |
| | | PicMaxUrl: vp.PicMaxUrl, |
| | | PicSmUrl: vp.PicSmUrl, |
| | | IsAlarm: isAlarmInt, |
| | | Sex: vp.Sex, |
| | | AgeDescription: vp.AgeDescription, |
| | | Race: vp.Race, |
| | | TargetInfo: ti, |
| | | IsAlarm: vp.IsAlarm, |
| | | TaskName: vp.TaskName, |
| | | TaskId: vp.TaskId, |
| | | VideoUrl: vp.VideoUrl, |
| | | BaseInfo: bi, |
| | | SdkName: "人脸", |
| | | AlarmRules: alarmRules, |
| | | } |
| | | resultList[captureM[vp.Id].Index] = vpE |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | // @Security ApiKeyAuth |
| | | // @Summary 以图搜图 |
| | | // @Description 以图搜图 |
| | | // @Accept json |
| | |
| | | return |
| | | } |
| | | } else { |
| | | searchBase64Fea, err := esApi.GetVideoPersonFaceFeatureById(searchBody.CompTargetId, config.EsInfo.EsIndex.VideoPersons.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort))) |
| | | searchBase64Fea, err := esApi.GetVideoPersonFaceFeatureById(searchBody.CompTargetId, config.EsInfo.EsIndex.AiOcean.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort))) |
| | | if err !=nil { |
| | | util.ResponseFormat(c, code.ComError, "抓拍数据不存在,请检查") |
| | | return |
| | |
| | | } else { |
| | | arg.TableIds = []string{} |
| | | } |
| | | alarmLevelTypes := strings.Replace(strings.Trim(fmt.Sprint(getAlarmLevel(searchBody.AlarmLevel)), "[]"), " ", "\",\"", -1) |
| | | arg.Source = true // 标识来源是web |
| | | arg.AlarmLevel = searchBody.AlarmLevel |
| | | arg.AlarmLevel = alarmLevelTypes |
| | | arg.Tasks = searchBody.Tasks |
| | | arg.TreeNodes = searchBody.TreeNodes |
| | | arg.Tabs = searchBody.Tabs |
| | |
| | | } |
| | | localConf, err := cache.GetServerInfo() |
| | | if err ==nil && localConf.AlarmIp != "" && localConf.ServerId != "" { |
| | | alarmLevelTypes := strings.Replace(strings.Trim(fmt.Sprint(getAlarmLevel(searchBody.AlarmLevel)), "[]"), " ", "\",\"", -1) |
| | | arg.Source = true // 标识来源是web |
| | | arg.AlarmLevel = searchBody.AlarmLevel |
| | | arg.AlarmLevel = alarmLevelTypes |
| | | arg.Tasks = searchBody.Tasks |
| | | arg.TreeNodes = searchBody.TreeNodes |
| | | arg.Tabs = searchBody.Tabs |
| | |
| | | arg.InputValue = searchBody.InputValue |
| | | arg.Collection = searchBody.Collection |
| | | arg.AnalyServerId = localConf.ServerId |
| | | captureIds := esApi.GetAllLocalVideopersonsId(arg, config.EsInfo.EsIndex.VideoPersons.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort))) |
| | | |
| | | captureIds := esApi.GetAllLocalVideopersonsId(arg, config.EsInfo.EsIndex.AiOcean.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort)), alarmLevelTypes) |
| | | logger.Debug("searchPhoto first Result.len:",len(*co.CompareData),"twice len(captureIds):",len(captureIds)) |
| | | if captureIds !=nil { |
| | | var aResult protomsg.SdkCompareResult |
| | | aList := getTwiceSearchResult(co, &captureIds) |
| | | aList := getTwiceSearchResult(co, &captureIds, searchBody) |
| | | aTotal := aList.Len() |
| | | if aTotal <= to { |
| | | aResult.CompareResult = (*aList)[from:aTotal] |
| | |
| | | personIdArr = append(personIdArr, pid.Id) |
| | | } |
| | | var aResult protomsg.SdkCompareResult |
| | | aList := getTwiceSearchResult(co, &personIdArr) |
| | | aList := getTwiceSearchResult(co, &personIdArr, searchBody) |
| | | aTotal := aList.Len() |
| | | if aTotal <= to { |
| | | aResult.CompareResult = (*aList)[from:aTotal] |
| | |
| | | return m |
| | | } |
| | | |
| | | func getTwiceSearchResult(co *service.CompareOnce, scopeIds *[]string) *service.CompareList{ |
| | | func getTwiceSearchResult(co *service.CompareOnce, scopeIds *[]string, searchBody *models.EsSearch) *service.CompareList{ |
| | | m := make(map[string]string) |
| | | for _,capId :=range *scopeIds { |
| | | m[capId] = capId |
| | | } |
| | | var totalData service.CompareList |
| | | for _,each :=range *co.CompareData { |
| | | if _,ok :=m[each.Id];ok{ |
| | | if _,ok :=m[each.Id];ok && each.CompareScore >= searchBody.Threshold { |
| | | totalData = append(totalData, each) |
| | | } |
| | | } |
| | |
| | | |
| | | /**上传方法**/ |
| | | |
| | | // @Security ApiKeyAuth |
| | | // @Summary 批量添加底库人员 |
| | | // @Description 依据图片批量添加底库人员 |
| | | // @Accept mpfd |
| | | // @Accept multipart/form-data |
| | | // @Produce json |
| | | // @Tags dbperson 底库人员 |
| | | // @Param files formData file[] true "多个底库人员图片" |
| | |
| | | } |
| | | extNames := make([]string, 0) |
| | | addResult := make(map[string]interface{}, 0) |
| | | successList := make([]string, 0) |
| | | successList := make([]string,0) |
| | | failList := make([]string,0) |
| | | noFaceList := make([]string,0) |
| | | multiFaceList := make([]string,0) |
| | | tAllStart := time.Now() |
| | | var wg sync.WaitGroup |
| | | var lock sync.Mutex |
| | |
| | | field, _, err1 := uploadFileReturnAddr(file, filename, tableId) |
| | | lock.Lock() |
| | | if err1 != nil || field == "" { |
| | | failList = append(failList, filename) |
| | | if err1 !=nil && err1.Error() == "NotFeatureFindError" { |
| | | noFaceList = append(noFaceList, filename) |
| | | } else if err1 !=nil && err1.Error() == "TooManyFaces" { |
| | | multiFaceList = append(multiFaceList, filename) |
| | | } else { |
| | | failList = append(failList, filename) |
| | | } |
| | | } else { |
| | | successList = append(successList, filename) |
| | | } |
| | |
| | | logger.Debug("切",len(fileHeaders),"张人脸用时:", time.Since(tAllStart)) |
| | | addResult["successList"] = successList |
| | | addResult["failList"] = failList |
| | | addResult["noFaceList"] = noFaceList |
| | | addResult["multiFaceList"] = multiFaceList |
| | | addResult["fields"] = extNames |
| | | |
| | | //if len(successList)>0 { |
| | | if len(successList)>0 { |
| | | util.ResponseFormat(c, code.DbPersonUploadSuccess, addResult) |
| | | //} else { |
| | | // util.ResponseFormat(c, code.DbPersonUploadFail, addResult) |
| | | //} |
| | | } else { |
| | | util.ResponseFormat(c, code.DbPersonUploadFail, addResult) |
| | | } |
| | | } |
| | | |
| | | type EsPersonSave struct { |
| | |
| | | IdCard string `json:"idCard"` |
| | | } |
| | | |
| | | // @Security ApiKeyAuth |
| | | // @Summary 上传图片 并切图 |
| | | // @Description 上传图片 并切图 |
| | | // @Accept mpfd |
| | | // @Accept multipart/form-data |
| | | // @Produce json |
| | | // @Tags dbperson 底库人员 |
| | | // @Param file formData file true "底库人员图片" |