liuxiaolong
2019-08-05 9aa970326080ba2f0d3da4f3d300c5b98d2df134
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{} {