liuxiaolong
2019-08-05 9aa970326080ba2f0d3da4f3d300c5b98d2df134
add search people by captureId
2个文件已修改
190 ■■■■■ 已修改文件
controllers/fileController.go 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/esSearch.go 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/fileController.go
@@ -324,21 +324,37 @@
        util.ResponseFormat(c, code.RequestParamError, "参数有误")
        return
    }
    if searchBody.CompareNum !="" {
        //二次搜索,不需要再比对了
        co := service.GetCompResultByNum(searchBody.CompareNum)
        if co != nil {
            //二次搜索和排序
            twiceM := GetCompareDataTwice(co,&searchBody)
            util.ResponseFormat(c,code.Success,twiceM)
        } else {
            m :=make(map[string]interface{},0)
            m["compareNum"] = searchBody.CompareNum
            m["total"] = 0
            m["totalList"] = []CompareResult{}
            util.ResponseFormat(c,code.CompareResultGone,m)
    var faceB []byte
    if searchBody.CaptureId != "" {//做查找此人
        searchPeople, err := esApi.Dbpersoninfosbyid([]string{searchBody.CaptureId}, config.EsInfo.EsIndex.VideoPersons.IndexName, config.EsInfo.Masterip, config.EsInfo.Httpport)
        if err !=nil {
            util.ResponseFormat(c, code.ComError, "抓拍数据不存在,请检查")
            return
        }
        if searchPeople !=nil && len(searchPeople) == 1{
            decodeF, err := base64.StdEncoding.DecodeString(searchPeople[0].FaceFeature)
            if err !=nil {
                util.ResponseFormat(c, code.ComError, "本条抓怕特征不是base64,请检查")
                return
            }
            faceB = decodeF
        }
    }
    //if searchBody.CompareNum !="" {
    //    //二次搜索,不需要再比对了
    //    co := service.GetCompResultByNum(searchBody.CompareNum)
    //    if co != nil {
    //        //二次搜索和排序
    //        twiceM := GetCompareDataTwice(co,&searchBody)
    //        util.ResponseFormat(c,code.Success,twiceM)
    //    } else {
    //        m :=make(map[string]interface{},0)
    //        m["compareNum"] = searchBody.CompareNum
    //        m["total"] = 0
    //        m["totalList"] = []CompareResult{}
    //        util.ResponseFormat(c,code.CompareResultGone,m)
    //    }
    //}
    var sysSetApi dbapi.SysSetApi
    analyServerId := ""
    flag, sysconf := sysSetApi.GetServerInfo()
@@ -348,79 +364,86 @@
        util.ResponseFormat(c, code.ComError, "analyServerId为空,配置有误")
        return
    }
    if face,ok := faceExtractedMap[searchBody.PicUrl];!ok{
    if searchBody.CaptureId == ""{
        if face,ok := faceExtractedMap[searchBody.PicUrl];!ok{
            util.ResponseFormat(c, code.RequestParamError, "请重新上传图片")
            return
        } else {
            faceB = face.FaceBytes
        }
    }
    if faceB == nil {
        util.ResponseFormat(c, code.RequestParamError, "请重新上传图片")
        return
    } else {
        arg := protomsg.CompareArgs{
            FaceFeature: face.FaceBytes,
            CompareThreshold: searchBody.Threshold,
        }
        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,service.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)
        timeStart := time.Now()
        compareService := service.NewFaceCompareService(arg)
        compareOnce := compareService.Compare()
        totalData := compareOnce.CompareData
        logger.Debug("comp 比对结束,用时:",time.Since(timeStart))
        m := make(map[string]interface{},3)
        if totalData != nil && totalData.Len() > 0{
            //按分值排序
            var scorePre []float32
            for _,f1 :=range *totalData {
                scorePre = append(scorePre, f1.CompareScore)
            }
            //logger.Debug("comp 排序前分值数组:",scorePre)
            sort.Sort(totalData)
            var scoreAf []float32
            for _,f2 :=range *totalData {
                scoreAf = append(scoreAf, f2.CompareScore)
            }
            //logger.Debug("comp 排序后分值数组:",scoreAf)
            total := totalData.Len()
            m["compareNum"] = compareOnce.CompareNum
            m["total"] = total
            var sCompResult protomsg.SdkCompareResult
            if total <= searchBody.Size {
                sCompResult.CompareResult = *totalData
            } else {
                sCompResult.CompareResult = (*totalData)[0:searchBody.Size]
            }
            resultList := FillDataToCompareResult(&sCompResult)
            m["totalList"] = resultList
            logger.Debug("comp 比对加排序返回用时:", time.Since(timeStart))
        } else {
            m["total"] = 0
            m["compareNum"] = searchBody.CompareNum
            m["totalList"] = []CompareResult{}
        }
        util.ResponseFormat(c,code.Success,m)
    }
    arg := protomsg.CompareArgs{
        FaceFeature: faceB,
        CompareThreshold: searchBody.Threshold,
    }
    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,service.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)
    timeStart := time.Now()
    compareService := service.NewFaceCompareService(arg)
    compareOnce := compareService.Compare()
    totalData := compareOnce.CompareData
    logger.Debug("comp 比对结束,用时:",time.Since(timeStart))
    m := make(map[string]interface{},3)
    if totalData != nil && totalData.Len() > 0{
        //按分值排序
        var scorePre []float32
        for _,f1 :=range *totalData {
            scorePre = append(scorePre, f1.CompareScore)
        }
        //logger.Debug("comp 排序前分值数组:",scorePre)
        sort.Sort(totalData)
        var scoreAf []float32
        for _,f2 :=range *totalData {
            scoreAf = append(scoreAf, f2.CompareScore)
        }
        //logger.Debug("comp 排序后分值数组:",scoreAf)
        total := totalData.Len()
        m["compareNum"] = compareOnce.CompareNum
        m["total"] = total
        var sCompResult protomsg.SdkCompareResult
        if total <= searchBody.Size {
            sCompResult.CompareResult = *totalData
        } else {
            sCompResult.CompareResult = (*totalData)[0:searchBody.Size]
        }
        resultList := FillDataToCompareResult(&sCompResult)
        m["totalList"] = resultList
        logger.Debug("comp 比对加排序返回用时:", time.Since(timeStart))
    } else {
        m["total"] = 0
        m["compareNum"] = searchBody.CompareNum
        m["totalList"] = []CompareResult{}
    }
    util.ResponseFormat(c,code.Success,m)
}
func GetCompareDataTwice(co *service.CompareOnce,arg *models.EsSearch) map[string]interface{} {
models/esSearch.go
@@ -16,4 +16,5 @@
    Collection string   `json:"collection"`//
    AlarmLevel []string `json:"alarmLevel"`//布防等级
    CompareNum string   `json:"compareNum"`//比对编号
    CaptureId string    `json:"captureId"`//抓拍id
}