554325746@qq.com
2019-12-23 0222e79afe45d9fc55aed9a7e62ca239c228ab73
controllers/fileController.go
@@ -50,9 +50,10 @@
//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 "底库人员图片"
@@ -110,8 +111,10 @@
}
var faceExtractedMap = make(map[string]FaceExtract,0)
// @Security ApiKeyAuth
// @Summary 人脸提取
// @Description  人脸提取
// @Accept multipart/form-data
// @Produce json
// @Tags 以图搜图
// @Param file formData file true "人员图片"
@@ -180,41 +183,63 @@
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"`
}
//填充向前端返回的数据
@@ -229,13 +254,13 @@
      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)
      }
@@ -253,15 +278,14 @@
      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 })
@@ -282,43 +306,77 @@
         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
      }
@@ -369,6 +427,7 @@
   }
}
// @Security ApiKeyAuth
// @Summary 以图搜图
// @Description  以图搜图
// @Accept json
@@ -415,7 +474,7 @@
            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
@@ -466,8 +525,9 @@
   } 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
@@ -552,8 +612,9 @@
      }
      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
@@ -561,11 +622,12 @@
         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]
@@ -598,7 +660,7 @@
               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]
@@ -638,14 +700,14 @@
   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)
      }
   }
@@ -776,9 +838,10 @@
/**上传方法**/
// @Security ApiKeyAuth
// @Summary 批量添加底库人员
// @Description  依据图片批量添加底库人员
// @Accept  mpfd
// @Accept  multipart/form-data
// @Produce json
// @Tags dbperson 底库人员
// @Param files formData file[] true "多个底库人员图片"
@@ -798,8 +861,10 @@
   }
   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
@@ -827,7 +892,13 @@
         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)
         }
@@ -839,13 +910,15 @@
   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 {
@@ -856,9 +929,10 @@
   IdCard string `json:"idCard"`
}
// @Security ApiKeyAuth
// @Summary 上传图片 并切图
// @Description  上传图片 并切图
// @Accept  mpfd
// @Accept  multipart/form-data
// @Produce json
// @Tags dbperson 底库人员
// @Param file formData file true "底库人员图片"