| | |
| | | "basic.com/pubsub/protomsg.git" |
| | | "bytes" |
| | | "encoding/base64" |
| | | "encoding/json" |
| | | "errors" |
| | | "fmt" |
| | | "github.com/gin-gonic/gin" |
| | |
| | | |
| | | //var weedfsUri = "http://192.168.1.182:9500/submit" |
| | | |
| | | // @Security ApiKeyAuth |
| | | // @Summary 依据图片添加底库人员 |
| | | // @Description 依据图片添加底库返回数据人员 |
| | | // @Accept mpfd |
| | |
| | | } |
| | | var faceExtractedMap = make(map[string]FaceExtract,0) |
| | | |
| | | // @Security ApiKeyAuth |
| | | // @Summary 人脸提取 |
| | | // @Description 人脸提取 |
| | | // @Produce json |
| | |
| | | BaseInfo []DbPersonVo `json:"baseInfo"` |
| | | VideoUrl string `json:"videoUrl"` |
| | | SdkName string `json:"sdkName"` |
| | | AlarmRules []AlarmRuleVo `json:"alarmRules"` |
| | | } |
| | | type DbPersonVo struct { |
| | | BwType string `json:"bwType"` |
| | |
| | | type ScoreIndex struct { |
| | | CompareScore float32 |
| | | 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"` |
| | | } |
| | | |
| | | //填充向前端返回的数据 |
| | |
| | | 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 { |
| | |
| | | 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, |
| | | }) |
| | | } |
| | | } |
| | | vpE := CompareResult{ |
| | | Id: vp.Id, |
| | | CompareScore: util.ParseScore(captureM[vp.Id].CompareScore), |
| | |
| | | VideoUrl: vp.VideoUrl, |
| | | BaseInfo: bi, |
| | | SdkName: "人脸", |
| | | AlarmRules: alarmRules, |
| | | } |
| | | resultList[captureM[vp.Id].Index] = vpE |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | // @Security ApiKeyAuth |
| | | // @Summary 以图搜图 |
| | | // @Description 以图搜图 |
| | | // @Accept json |
| | |
| | | return |
| | | } |
| | | var faceB []byte |
| | | |
| | | logger.Debug("compTargetId:",searchBody.CompTargetId,",compTargetType:",searchBody.CompTargetType) |
| | | if searchBody.CompTargetId != "" {//做查找此人,按抓拍的人脸或者底库的人脸以图搜图 |
| | | if searchBody.CompTargetType == 0 {//本张人脸是底库人脸 |
| | | var dbpApi dbapi.DbPersonApi |
| | |
| | | util.ResponseFormat(c, code.ComError, "抓拍数据不存在,请检查") |
| | | return |
| | | } |
| | | |
| | | if searchBase64Fea !=""{ |
| | | decodeF, err := base64.StdEncoding.DecodeString(searchBase64Fea) |
| | | if err !=nil { |
| | |
| | | util.ResponseFormat(c,code.Success,m) |
| | | } |
| | | |
| | | func GetCompareDataTwice(co *service.CompareOnce,arg *models.EsSearch) map[string]interface{} { |
| | | //camIds := arg.TreeNodes |
| | | //tabIds := arg.Tabs |
| | | //taskIds := arg.Tasks |
| | | //alarmLevels := arg.AlarmLevel |
| | | //timeArr := arg.SearchTime |
| | | //input := arg.InputValue |
| | | //resultList := make([]CompareResult,0) |
| | | //for _,each :=range *co.CompareData { |
| | | // if each.Id !=""{ |
| | | // n :=0 |
| | | // if len(camIds) == 0 || isInArr(each.CameraId,camIds) { |
| | | // n++ |
| | | // } |
| | | // if len(tabIds) == 0 { |
| | | // n++ |
| | | // } |
| | | // if len(taskIds) == 0 || isInArr(each.TaskId, taskIds) { |
| | | // n++ |
| | | // } |
| | | // //判断报警等级 |
| | | // if len(alarmLevels) == 0 { |
| | | // |
| | | // } |
| | | // n++ |
| | | // //判断时间 |
| | | // if len(timeArr) == 0 { |
| | | // |
| | | // } |
| | | // n++ |
| | | // if input == ""{ |
| | | // |
| | | // } |
| | | // n++ |
| | | // if n == 6 { |
| | | // resultList = append(resultList,cr) |
| | | // } |
| | | // } else { |
| | | // resultList = append(resultList,cr) |
| | | // } |
| | | //} |
| | | type PersonId struct { |
| | | Id string `json:"id"` |
| | | } |
| | | |
| | | //logger.Debug("GetCompareDataTwice.data:",resultList) |
| | | //service.SortByScore(resultList) |
| | | from := (arg.Page-1)*arg.Size |
| | | to := from + arg.Size |
| | | var sCompResult protomsg.SdkCompareResult |
| | | total := len(*co.CompareData) |
| | | if total <= to { |
| | | sCompResult.CompareResult = (*co.CompareData)[from:total] |
| | | } else { |
| | | sCompResult.CompareResult = (*co.CompareData)[from:to] |
| | | } |
| | | resultList := FillDataToCompareResult(&sCompResult) |
| | | |
| | | func GetCompareDataTwice(co *service.CompareOnce,searchBody *models.EsSearch) map[string]interface{} { |
| | | m := make(map[string]interface{},0) |
| | | m["total"] = total |
| | | m["compareNum"] = arg.CompareNum |
| | | m["totalList"] = resultList |
| | | //if from < len(resultList) { |
| | | // if to <= len(resultList) { |
| | | // m["totalList"] = resultList[from:to] |
| | | // } else { |
| | | // lte := len(resultList) |
| | | // m["totalList"] = resultList[from:lte] |
| | | // } |
| | | |
| | | from := (searchBody.Page-1)*searchBody.Size |
| | | to := from + searchBody.Size |
| | | |
| | | var hasCompEsPerson = false |
| | | if searchBody.DataBases !=nil { |
| | | for idx,tableId :=range searchBody.DataBases { |
| | | if tableId == "esData" { |
| | | hasCompEsPerson = true |
| | | searchBody.DataBases = append(searchBody.DataBases[:idx], searchBody.DataBases[idx+1:]...) |
| | | break |
| | | } |
| | | } |
| | | } |
| | | if hasCompEsPerson {//二次检索ES比对结果 |
| | | arg := protomsg.CompareArgs{ |
| | | CompareThreshold: searchBody.Threshold, |
| | | } |
| | | localConf, err := cache.GetServerInfo() |
| | | if err ==nil && localConf.AlarmIp != "" && localConf.ServerId != "" { |
| | | 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 = localConf.ServerId |
| | | alarmLevelTypes := strings.Replace(strings.Trim(fmt.Sprint(getAlarmLevel(searchBody.AlarmLevel)), "[]"), " ", "\",\"", -1) |
| | | captureIds := esApi.GetAllLocalVideopersonsId(arg, config.EsInfo.EsIndex.VideoPersons.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, searchBody) |
| | | aTotal := aList.Len() |
| | | if aTotal <= to { |
| | | aResult.CompareResult = (*aList)[from:aTotal] |
| | | } else { |
| | | aResult.CompareResult = (*aList)[from:to] |
| | | } |
| | | out := FillDataToCompareResult(&aResult) |
| | | m["total"] = aTotal |
| | | m["compareNum"] = searchBody.CompareNum |
| | | m["totalList"] = out |
| | | return m |
| | | } else { |
| | | m["total"] = 0 |
| | | m["compareNum"] = searchBody.CompareNum |
| | | m["totalList"] = []interface{}{} |
| | | return m |
| | | } |
| | | } |
| | | } else {//底库数据的二次检索 |
| | | var dbpApi dbapi.DbPersonApi |
| | | personIds, _ := dbpApi.FindLikePersonIds(searchBody.DataBases, searchBody.InputValue) |
| | | logger.Debug("searchPhoto first Result.len:",len(*co.CompareData),"personIds:",personIds) |
| | | if personIds !=nil { |
| | | var pIds []PersonId |
| | | b, _ := json.Marshal(personIds) |
| | | json.Unmarshal(b, &pIds) |
| | | if len(pIds) >0 { |
| | | var personIdArr []string |
| | | for _,pid :=range pIds{ |
| | | personIdArr = append(personIdArr, pid.Id) |
| | | } |
| | | var aResult protomsg.SdkCompareResult |
| | | aList := getTwiceSearchResult(co, &personIdArr, searchBody) |
| | | aTotal := aList.Len() |
| | | if aTotal <= to { |
| | | aResult.CompareResult = (*aList)[from:aTotal] |
| | | } else { |
| | | aResult.CompareResult = (*aList)[from:to] |
| | | } |
| | | out := FillDataToCompareResult(&aResult) |
| | | m["total"] = aTotal |
| | | m["compareNum"] = searchBody.CompareNum |
| | | m["totalList"] = out |
| | | return m |
| | | } |
| | | |
| | | } else { |
| | | m["total"] = 0 |
| | | m["compareNum"] = searchBody.CompareNum |
| | | m["totalList"] = []interface{}{} |
| | | return m |
| | | } |
| | | } |
| | | |
| | | |
| | | //var sCompResult protomsg.SdkCompareResult |
| | | //total := len(*co.CompareData) |
| | | //if total <= to { |
| | | // sCompResult.CompareResult = (*co.CompareData)[from:total] |
| | | //} else { |
| | | // m["totalList"] = []CompareResult{} |
| | | // sCompResult.CompareResult = (*co.CompareData)[from:to] |
| | | //} |
| | | //resultList := FillDataToCompareResult(&sCompResult) |
| | | |
| | | |
| | | m["total"] = 0 |
| | | m["compareNum"] = searchBody.CompareNum |
| | | m["totalList"] = []interface{}{} |
| | | |
| | | return m |
| | | } |
| | | |
| | | 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 && each.CompareScore >= searchBody.Threshold { |
| | | totalData = append(totalData, each) |
| | | } |
| | | } |
| | | |
| | | if totalData != nil && totalData.Len() > 0{ |
| | | sort.Sort(totalData) |
| | | } |
| | | |
| | | return &totalData |
| | | } |
| | | |
| | | func isInArr(id string,arr []string) bool { |
| | |
| | | |
| | | /**上传方法**/ |
| | | |
| | | // @Security ApiKeyAuth |
| | | // @Summary 批量添加底库人员 |
| | | // @Description 依据图片批量添加底库人员 |
| | | // @Accept mpfd |
| | |
| | | IdCard string `json:"idCard"` |
| | | } |
| | | |
| | | // @Security ApiKeyAuth |
| | | // @Summary 上传图片 并切图 |
| | | // @Description 上传图片 并切图 |
| | | // @Accept mpfd |