sunty
2019-11-14 c4c73a384c1a02c26c81b0a76bb1d10062e64cb4
controllers/fileController.go
@@ -6,6 +6,7 @@
   "basic.com/pubsub/protomsg.git"
   "bytes"
   "encoding/base64"
   "encoding/json"
   "errors"
   "fmt"
   "github.com/gin-gonic/gin"
@@ -49,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 "底库人员图片"
@@ -109,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 "人员图片"
@@ -195,6 +199,7 @@
   BaseInfo []DbPersonVo `json:"baseInfo"`
   VideoUrl string `json:"videoUrl"`
   SdkName string `json:"sdkName"`
   AlarmRules []AlarmRuleVo `json:"alarmRules"`
}
type DbPersonVo struct {
   BwType string `json:"bwType"`
@@ -214,6 +219,15 @@
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"`
}
//填充向前端返回的数据
@@ -285,7 +299,7 @@
      logger.Debug("comp videoPersons.len:",len(videopersons))
      for _,vp :=range videopersons {
         isAlarmInt, _ := strconv.Atoi(vp.IsAlarm)
         bi := make([]DbPersonVo,0)
         var bi []DbPersonVo
         for _,p :=range vp.BaseInfo {
            bi = append(bi, DbPersonVo{
               PersonId: p.PersonId,
@@ -297,9 +311,22 @@
               PhoneNum: p.PhoneNum,
               Sex: p.Sex,
               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,
               })
            }
         }
         vpE := CompareResult{
            Id: vp.Id,
@@ -318,6 +345,7 @@
            VideoUrl: vp.VideoUrl,
            BaseInfo: bi,
            SdkName: "人脸",
            AlarmRules: alarmRules,
         }
         resultList[captureM[vp.Id].Index] = vpE
      }
@@ -368,6 +396,7 @@
   }
}
// @Security ApiKeyAuth
// @Summary 以图搜图
// @Description  以图搜图
// @Accept json
@@ -525,6 +554,10 @@
   util.ResponseFormat(c,code.Success,m)
}
type PersonId struct {
   Id string `json:"id"`
}
func GetCompareDataTwice(co *service.CompareOnce,searchBody *models.EsSearch) map[string]interface{} {
   m := make(map[string]interface{},0)
@@ -533,9 +566,10 @@
   var hasCompEsPerson = false
   if searchBody.DataBases !=nil {
      for _,tableId :=range searchBody.DataBases {
      for idx,tableId :=range searchBody.DataBases {
         if tableId == "esData" {
            hasCompEsPerson = true
            searchBody.DataBases = append(searchBody.DataBases[:idx], searchBody.DataBases[idx+1:]...)
            break
         }
      }
@@ -555,10 +589,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)))
         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)
            aList := getTwiceSearchResult(co, &captureIds, searchBody)
            aTotal := aList.Len()
            if aTotal <= to {
               aResult.CompareResult = (*aList)[from:aTotal]
@@ -577,34 +613,68 @@
            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 {
      sCompResult.CompareResult = (*co.CompareData)[from:to]
   }
   resultList := FillDataToCompareResult(&sCompResult)
   //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)
   m["total"] = total
   m["total"] = 0
   m["compareNum"] = searchBody.CompareNum
   m["totalList"] = resultList
   m["totalList"] = []interface{}{}
   return m
}
func getTwiceSearchResult(co *service.CompareOnce, captureIds *[]string) *service.CompareList{
func getTwiceSearchResult(co *service.CompareOnce, scopeIds *[]string, searchBody *models.EsSearch) *service.CompareList{
   m := make(map[string]string)
   for _,capId :=range *captureIds {
   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)
      }
   }
@@ -735,9 +805,10 @@
/**上传方法**/
// @Security ApiKeyAuth
// @Summary 批量添加底库人员
// @Description  依据图片批量添加底库人员
// @Accept  mpfd
// @Accept  multipart/form-data
// @Produce json
// @Tags dbperson 底库人员
// @Param files formData file[] true "多个底库人员图片"
@@ -757,8 +828,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
@@ -786,7 +859,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)
         }
@@ -798,13 +877,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 {
@@ -815,9 +896,10 @@
   IdCard string `json:"idCard"`
}
// @Security ApiKeyAuth
// @Summary 上传图片 并切图
// @Description  上传图片 并切图
// @Accept  mpfd
// @Accept  multipart/form-data
// @Produce json
// @Tags dbperson 底库人员
// @Param file formData file true "底库人员图片"