liuxiaolong
2020-06-05 7c811247ecf143e08c576986a884bedadc57dd66
service/FaceCompareService.go
@@ -8,10 +8,10 @@
   "nanomsg.org/go-mangos/protocol/req"
   "nanomsg.org/go-mangos/transport/ipc"
   "nanomsg.org/go-mangos/transport/tcp"
   "sort"
   "strconv"
   "sync"
   "webserver/extend/config"
   "webserver/extend/logger"
   "basic.com/valib/logger.git"
)
type FaceCompareService struct {
@@ -28,28 +28,19 @@
type CompareOnce struct {
   CompareNum string `json:"compareOnce"`
   CompareData *[]*protomsg.SdkCompareEach `json:"compareData"`
   CompareData *CompareList `json:"compareData"`
}
type CompareResultWrapper struct {
   CompareData *[]*protomsg.SdkCompareEach
   By func(p,q *protomsg.SdkCompareEach) bool
}
type CompareList []*protomsg.SdkCompareEach
func (crw CompareResultWrapper) Len()int {
   return len(*crw.CompareData)
func (s CompareList) Len()int {
   return len(s)
}
func (crw CompareResultWrapper) Swap(i,j int) {
   (*crw.CompareData)[i],(*crw.CompareData)[j] = (*crw.CompareData)[j],(*crw.CompareData)[i]
func (s CompareList) Swap(i,j int) {
   s[i],s[j] = s[j],s[i]
}
func (crw CompareResultWrapper) Less(i,j int) bool{
   return crw.By((*crw.CompareData)[i],(*crw.CompareData)[j])
}
func SortByScore(list *[]*protomsg.SdkCompareEach) {
   sort.Sort(CompareResultWrapper{list, func(p, q *protomsg.SdkCompareEach) bool {
      return q.CompareScore < p.CompareScore //递减排序
   }})
func (s CompareList) Less(i,j int) bool{//降序排序
   return s[i].CompareScore > s[j].CompareScore
}
var compResultHisM = make(map[string]*CompareOnce,0)
@@ -73,20 +64,22 @@
var CaptureTable = "capturetable" // 抓拍库
func (sv *FaceCompareService) Compare() *CompareOnce{
func (sv *FaceCompareService) CompareVideoPersons() *CompareList{
   sv.CompareArgs.TableIds = []string { CaptureTable }
   b, err := proto.Marshal(&sv.CompareArgs)
   compServerList := config.CompServerInfo.Url
   logger.Debug("compServerList:", compServerList)
   //1.向各个compare进程发起请求拿到比对结果
   resultList :=make([]*protomsg.SdkCompareEach,0)
   for _,str :=range compServerList{
      reqUrl := "tcp://"+str
   esCompServerList := config.EsCompServerInfo.Ips
   logger.Debug("compServerList:", esCompServerList)
   //1.向各个Es compare进程发起请求拿到比对结果
   var resultList CompareList
   for _,str :=range esCompServerList{
      reqUrl := "tcp://"+str + ":"+strconv.Itoa(config.EsCompServerInfo.Port)
      resultB := doCompareRequest(reqUrl,b)
      if resultB == nil || len(*resultB) ==0 {
         continue
      }
      var sdkCompResult protomsg.SdkCompareResult
      //rList :=make([]protomsg.Esinfo,0)
      err = proto.Unmarshal(*resultB, &sdkCompResult)
      if err !=nil {
         logger.Debug("comp sdkCompareResult unmarshal err:", err)
@@ -96,19 +89,41 @@
      logger.Debug("comp len(rList):", len(sdkCompResult.CompareResult))
      if len(sdkCompResult.CompareResult) >0 {
         resultList = append(resultList, sdkCompResult.CompareResult...)
         //resultList = append(resultList, FillDataToCompareResult(&sdkCompResult)...)
      }
   }
   logger.Debug("comp totalList.len:", len(resultList))
   //2.缓存比对结果
   co := &CompareOnce{
      CompareNum: sv.CompareNum,
      CompareData: &resultList,
   }
   SetCompResultByNum(co)
   return &resultList
}
   return co
//比对底库
func (sv *FaceCompareService) CompareDbPersons() *CompareList{
   b, err := proto.Marshal(&sv.CompareArgs)
   dbPersonCompServerUrl := config.DbPersonCompInfo.Ip
   logger.Debug("comp Server url:", dbPersonCompServerUrl)
   var resultList CompareList
   reqUrl := "tcp://"+dbPersonCompServerUrl+":"+strconv.Itoa(config.DbPersonCompInfo.Port)
   resultB := doCompareRequest(reqUrl,b)
   if resultB == nil || len(*resultB) ==0 {
      return nil
   }
   var sdkCompResult protomsg.SdkCompareResult
   err = proto.Unmarshal(*resultB, &sdkCompResult)
   if err !=nil {
      logger.Debug("comp sdkCompareResult unmarshal err:", err)
      return nil
   }
   logger.Debug("comp len(rList):", len(sdkCompResult.CompareResult))
   if len(sdkCompResult.CompareResult) >0 {
      resultList = append(resultList, sdkCompResult.CompareResult...)
   }
   logger.Debug("comp totalList.len:", len(resultList))
   return &resultList
}
func doCompareRequest(url string,args []byte) *[]byte{