liuxiaolong
2019-07-31 e70b62f740db3a723e768892284eb00a2e30f320
fix comp
3个文件已修改
463 ■■■■ 已修改文件
controllers/es.go 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/fileController.go 292 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/FaceCompareService.go 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/es.go
@@ -45,7 +45,7 @@
            m :=make(map[string]interface{},0)
            m["compareNum"] = searchBody.CompareNum
            m["total"] = 0
            m["totalList"] = []service.CompareResult{}
            m["totalList"] = []CompareResult{}
            util.ResponseFormat(c,code.CompareResultGone,m)
            return
        }
@@ -53,7 +53,7 @@
    m :=make(map[string]interface{},0)
    m["compareNum"] = searchBody.CompareNum
    m["total"] = 0
    m["totalList"] = []service.CompareResult{}
    m["totalList"] = []CompareResult{}
    util.ResponseFormat(c,code.CompareResultGone,m)
}
controllers/fileController.go
@@ -27,6 +27,7 @@
    "webserver/extend/util"
    "webserver/models"
    "webserver/service"
    esApi "basic.com/pubsub/esutil.git"
)
type FileController struct {
@@ -147,6 +148,147 @@
    }
}
type CompareResult struct {
    Id string `json:"id"`
    CompareScore float32 `json:"compareScore"`
    CameraId string `json:"cameraId"`
    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"`
    TaskId string `json:"taskId"`
    TaskName string `json:"taskName"`
    BaseInfo []DbPersonVo `json:"baseInfo"`
    VideoUrl string `json:"videoUrl"`
    SdkName string `json:"sdkName"`
}
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"`
}
//填充向前端返回的数据
func FillDataToCompareResult(compResult *protomsg.SdkCompareResult) []CompareResult {
    resultList :=make([]CompareResult,0)
    dbPersonM := make(map[string]*protomsg.SdkCompareEach, 0)
    captureM := make(map[string]*protomsg.SdkCompareEach, 0)
    personIds :=make([]string,0)
    captureIds := make([]string,0)
    for _,v :=range compResult.CompareResult{
        if v.Tableid == service.CaptureTable {
            captureM[v.Id] = v
            captureIds = append(captureIds,v.Id)
        } else {
            dbPersonM[v.Id] = v
            personIds = append(personIds,v.Id)
        }
    }
    logger.Debug("comp len(personIds):", len(personIds))
    logger.Debug("comp len(captureIds):", len(captureIds))
    esServerIp := config.EsInfo.Masterip
    esServerPort := config.EsInfo.Httpport
    index := config.EsInfo.EsIndex.Dbtablepersons.IndexName
    var dbpersons []protomsg.Dbperson
    if len(personIds) >0 {
        dbpersons, _ = esApi.Dbpersoninfosbyid(personIds, index, esServerIp, esServerPort)
    }
    logger.Debug("comp dbpersons.len:", len(dbpersons))
    if dbpersons !=nil {
        for _,p :=range dbpersons {
            var dbP = DbPersonVo {
                PersonId: p.Id,
                IdCard: p.IdCard,
                CompareScore: util.ParseScore(dbPersonM[p.Id].CompareScore),
                MonitorLevel: p.MonitorLevel,
                PersonName: p.PersonName,
                PersonPicUrl: p.PersonPicUrl,
                PhoneNum: p.PhoneNum,
                Sex: p.Sex,
                TableId: p.TableId,
            }
            dbTableInfos, _ := esApi.Dbtablefosbyid([]string{p.TableId}, config.EsInfo.EsIndex.DbTables.IndexName, esServerIp, esServerPort)
            if dbTableInfos !=nil{
                dbP.BwType = dbTableInfos[0].BwType
                dbP.TableName = dbTableInfos[0].TableName
            }
            var cr = CompareResult{
                BaseInfo:[]DbPersonVo{ dbP },
            }
            resultList = append(resultList,cr)
        }
    }
    if len(captureIds) >0 {
        videopersons, _ := esApi.Videopersonsinfosbyid(captureIds, config.EsInfo.EsIndex.VideoPersons.IndexName, config.EsInfo.Masterip, config.EsInfo.Httpport)
        logger.Debug("comp videoPersons.len:",len(videopersons))
        for _,vp :=range videopersons {
            isAlarmInt, _ := strconv.Atoi(vp.IsAlarm)
            bi := make([]DbPersonVo,0)
            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,
                    TableId: p.TableId,
                })
            }
            vpE := CompareResult{
                Id: vp.Id,
                CompareScore: util.ParseScore(captureM[vp.Id].CompareScore),
                CameraId: vp.CameraId,
                CameraAddr: vp.CameraAddr,
                PicDate: vp.PicDate,
                PicMaxUrl: vp.PicMaxUrl,
                PicSmUrl: vp.PicSmUrl,
                IsAlarm: isAlarmInt,
                Sex: vp.Sex,
                AgeDescription: vp.AgeDescription,
                Race: vp.Race,
                TaskName: vp.TaskName,
                TaskId: vp.TaskId,
                VideoUrl: vp.VideoUrl,
                BaseInfo: bi,
                SdkName: "人脸",
            }
            resultList = append(resultList,vpE)
        }
    }
    return  resultList
}
func parseMonitorLevel(level string) string {
    if level == "1" {
        return "一级"
    }
    if level == "2" {
        return "二级"
    }
    if level == "3" {
        return "三级"
    }
    return level
}
// @Summary 以图搜图
// @Description  以图搜图
// @Accept json
@@ -174,7 +316,7 @@
            m :=make(map[string]interface{},0)
            m["compareNum"] = searchBody.CompareNum
            m["total"] = 0
            m["totalList"] = []service.CompareResult{}
            m["totalList"] = []CompareResult{}
            util.ResponseFormat(c,code.CompareResultGone,m)
        }
    }
@@ -222,86 +364,104 @@
        compareService := service.NewFaceCompareService(arg)
        compareOnce := compareService.Compare()
        //logger.Debug("compareResult.len:",*compareOnce)
        dataList := compareOnce.CompareData
        totalData := compareOnce.CompareData
        logger.Debug("comp 比对结束,用时:",time.Since(timeStart))
        service.SortByScore(dataList)
        totalList := len(dataList)
        m := make(map[string]interface{},3)
        m["compareNum"] = compareOnce.CompareNum
        m["total"] = totalList
        if totalList <= searchBody.Size {
            m["totalList"] = dataList
        if totalData!=nil && len(*totalData)>0{
            //按分值排序
            service.SortByScore(totalData)
            total := len(*totalData)
            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["totalList"] = dataList[0:searchBody.Size]
            m["total"] = 0
            m["compareNum"] = searchBody.CompareNum
            m["totalList"] = []CompareResult{}
        }
        logger.Debug("comp 比对加排序返回用时:", time.Since(timeStart))
        util.ResponseFormat(c,code.Success,m)
    }
}
func GetCompareDataTwice(co *service.CompareOnce,arg *models.EsSearch) map[string]interface{} {
    camIds := arg.TreeNodes
    tabIds := arg.Tabs
    taskIds := arg.Tasks
    alarmLevels := arg.AlarmLevel
    timeArr := arg.SearchTime
    input := arg.InputValue
    resultList := make([]service.CompareResult,0)
    for _,cr :=range co.CompareData {
        if cr.Id !=""{
            n :=0
            if len(camIds) == 0 || isInArr(cr.CameraId,camIds) {
                n++
            }
            if len(tabIds) == 0 {
                n++
            }
            if len(taskIds) == 0 || isInArr(cr.TaskId, taskIds) {
                n++
            }
            //判断报警等级
            if len(alarmLevels) == 0 {
    //camIds := arg.TreeNodes
    //tabIds := arg.Tabs
    //taskIds := arg.Tasks
    //alarmLevels := arg.AlarmLevel
    //timeArr := arg.SearchTime
    //input := arg.InputValue
    //resultList := make([]CompareResult,0)
    //for _,each :=range *co.CompareData {
    //    if each.Id !=""{
    //        n :=0
    //        if len(camIds) == 0 || isInArr(each.CameraId,camIds) {
    //            n++
    //        }
    //        if len(tabIds) == 0 {
    //            n++
    //        }
    //        if len(taskIds) == 0 || isInArr(each.TaskId, taskIds) {
    //            n++
    //        }
    //        //判断报警等级
    //        if len(alarmLevels) == 0 {
    //
    //        }
    //        n++
    //        //判断时间
    //        if len(timeArr) == 0 {
    //
    //        }
    //        n++
    //        if input == ""{
    //
    //        }
    //        n++
    //        if n == 6 {
    //            resultList = append(resultList,cr)
    //        }
    //    } else {
    //        resultList = append(resultList,cr)
    //    }
    //}
            }
            n++
            //判断时间
            if len(timeArr) == 0 {
            }
            n++
            if input == ""{
            }
            n++
            if n == 6 {
                resultList = append(resultList,cr)
            }
        } else {
            resultList = append(resultList,cr)
        }
    }
    //logger.Debug("GetCompareDataTwice.data:",resultList)
    service.SortByScore(resultList)
    //service.SortByScore(resultList)
    from := (arg.Page-1)*arg.Size
    to := from + arg.Size
    lenth := len(resultList)
    m := make(map[string]interface{},0)
    m["total"] = lenth
    m["compareNum"] = arg.CompareNum
    if from < len(resultList) {
        if to <= len(resultList) {
            m["totalList"] = resultList[from:to]
        } else {
            lte := len(resultList)
            m["totalList"] = resultList[from:lte]
        }
    var sCompResult protomsg.SdkCompareResult
    total := len(*co.CompareData)
    if total <= to {
        sCompResult.CompareResult = (*co.CompareData)[from:total]
    } else {
        m["totalList"] = []service.CompareResult{}
        sCompResult.CompareResult = (*co.CompareData)[from:to]
    }
    resultList := FillDataToCompareResult(&sCompResult)
    m := make(map[string]interface{},0)
    m["total"] = total
    m["compareNum"] = arg.CompareNum
    m["totalList"] = resultList
    //if from < len(resultList) {
    //    if to <= len(resultList) {
    //        m["totalList"] = resultList[from:to]
    //    } else {
    //        lte := len(resultList)
    //        m["totalList"] = resultList[from:lte]
    //    }
    //} else {
    //    m["totalList"] = []CompareResult{}
    //}
    return m
}
service/FaceCompareService.go
@@ -1,7 +1,6 @@
package service
import (
    esApi "basic.com/pubsub/esutil.git"
    "basic.com/pubsub/protomsg.git"
    "github.com/gogo/protobuf/proto"
    "github.com/satori/go.uuid"
@@ -10,11 +9,9 @@
    "nanomsg.org/go-mangos/transport/ipc"
    "nanomsg.org/go-mangos/transport/tcp"
    "sort"
    "strconv"
    "sync"
    "webserver/extend/config"
    "webserver/extend/logger"
    "webserver/extend/util"
)
type FaceCompareService struct {
@@ -31,26 +28,26 @@
type CompareOnce struct {
    CompareNum string `json:"compareOnce"`
    CompareData []CompareResult `json:"compareData"`
    CompareData *[]*protomsg.SdkCompareEach `json:"compareData"`
}
type CompareResultWrapper struct {
    CompareData []CompareResult
    By func(p,q *CompareResult) bool
    CompareData *[]*protomsg.SdkCompareEach
    By func(p,q *protomsg.SdkCompareEach) bool
}
func (crw CompareResultWrapper) Len()int {
    return len(crw.CompareData)
    return len(*crw.CompareData)
}
func (crw CompareResultWrapper) Swap(i,j int) {
    crw.CompareData[i],crw.CompareData[j] = crw.CompareData[j],crw.CompareData[i]
    (*crw.CompareData)[i],(*crw.CompareData)[j] = (*crw.CompareData)[j],(*crw.CompareData)[i]
}
func (crw CompareResultWrapper) Less(i,j int) bool{
    return crw.By(&crw.CompareData[i],&crw.CompareData[j])
    return crw.By((*crw.CompareData)[i],(*crw.CompareData)[j])
}
func SortByScore(list []CompareResult) {
    sort.Sort(CompareResultWrapper{list, func(p, q *CompareResult) bool {
func SortByScore(list *[]*protomsg.SdkCompareEach) {
    sort.Sort(CompareResultWrapper{list, func(p, q *protomsg.SdkCompareEach) bool {
        return q.CompareScore < p.CompareScore //递减排序
    }})
}
@@ -76,45 +73,12 @@
var CaptureTable = "capturetable" // 抓拍库
type CompareResult struct {
    Id string `json:"id"`
    CompareScore float32 `json:"compareScore"`
    CameraId string `json:"cameraId"`
    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"`
    TaskId string `json:"taskId"`
    TaskName string `json:"taskName"`
    BaseInfo []DbPersonVo `json:"baseInfo"`
    VideoUrl string `json:"videoUrl"`
    SdkName string `json:"sdkName"`
}
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"`
}
func (sv *FaceCompareService) Compare() *CompareOnce{
    b, err := proto.Marshal(&sv.CompareArgs)
    compServerList := config.CompServerInfo.Url
    logger.Debug("compServerList:", compServerList)
    //1.向各个compare进程发起请求拿到比对结果
    resultList :=make([]CompareResult,0)
    resultList :=make([]*protomsg.SdkCompareEach,0)
    for _,str :=range compServerList{
        reqUrl := "tcp://"+str
        resultB := doCompareRequest(reqUrl,b)
@@ -131,7 +95,8 @@
        logger.Debug("comp len(rList):", len(sdkCompResult.CompareResult))
        if len(sdkCompResult.CompareResult) >0 {
            resultList = append(resultList, FillDataToCompareResult(&sdkCompResult)...)
            resultList = append(resultList, sdkCompResult.CompareResult...)
            //resultList = append(resultList, FillDataToCompareResult(&sdkCompResult)...)
        }
    }
    logger.Debug("comp totalList.len:", len(resultList))
@@ -139,7 +104,7 @@
    //2.缓存比对结果
    co := &CompareOnce{
        CompareNum: sv.CompareNum,
        CompareData: resultList,
        CompareData: &resultList,
    }
    SetCompResultByNum(co)
@@ -174,112 +139,4 @@
    }
    sock.Close()
    return &msg
}
//填充向前端返回的数据
func FillDataToCompareResult(compResult *protomsg.SdkCompareResult) []CompareResult {
    resultList :=make([]CompareResult,0)
    dbPersonM := make(map[string]*protomsg.SdkCompareEach, 0)
    captureM := make(map[string]*protomsg.SdkCompareEach, 0)
    personIds :=make([]string,0)
    captureIds := make([]string,0)
    for _,v :=range compResult.CompareResult{
        if v.Tableid == CaptureTable {
            captureM[v.Id] = v
            captureIds = append(captureIds,v.Id)
        } else {
            dbPersonM[v.Id] = v
            personIds = append(personIds,v.Id)
        }
    }
    logger.Debug("comp len(personIds):", len(personIds))
    logger.Debug("comp len(captureIds):", len(captureIds))
    esServerIp := config.EsInfo.Masterip
    esServerPort := config.EsInfo.Httpport
    index := config.EsInfo.EsIndex.Dbtablepersons.IndexName
    var dbpersons []protomsg.Dbperson
    if len(personIds) >0 {
        dbpersons, _ = esApi.Dbpersoninfosbyid(personIds, index, esServerIp, esServerPort)
    }
    logger.Debug("comp dbpersons.len:", len(dbpersons))
    if dbpersons !=nil {
        for _,p :=range dbpersons {
            var dbP = DbPersonVo {
                PersonId: p.Id,
                IdCard: p.IdCard,
                CompareScore: util.ParseScore(dbPersonM[p.Id].CompareScore),
                MonitorLevel: p.MonitorLevel,
                PersonName: p.PersonName,
                PersonPicUrl: p.PersonPicUrl,
                PhoneNum: p.PhoneNum,
                Sex: p.Sex,
                TableId: p.TableId,
            }
            dbTableInfos, _ := esApi.Dbtablefosbyid([]string{p.TableId}, config.EsInfo.EsIndex.DbTables.IndexName, esServerIp, esServerPort)
            if dbTableInfos !=nil{
                dbP.BwType = dbTableInfos[0].BwType
                dbP.TableName = dbTableInfos[0].TableName
            }
            var cr = CompareResult{
                BaseInfo:[]DbPersonVo{ dbP },
            }
            resultList = append(resultList,cr)
        }
    }
    if len(captureIds) >0 {
        videopersons, _ := esApi.Videopersonsinfosbyid(captureIds, config.EsInfo.EsIndex.VideoPersons.IndexName, config.EsInfo.Masterip, config.EsInfo.Httpport)
        logger.Debug("comp videoPersons.len:",len(videopersons))
        for _,vp :=range videopersons {
            isAlarmInt, _ := strconv.Atoi(vp.IsAlarm)
            bi := make([]DbPersonVo,0)
            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,
                    TableId: p.TableId,
                })
            }
            vpE := CompareResult{
                Id: vp.Id,
                CompareScore: util.ParseScore(captureM[vp.Id].CompareScore),
                CameraId: vp.CameraId,
                CameraAddr: vp.CameraAddr,
                PicDate: vp.PicDate,
                PicMaxUrl: vp.PicMaxUrl,
                PicSmUrl: vp.PicSmUrl,
                IsAlarm: isAlarmInt,
                Sex: vp.Sex,
                AgeDescription: vp.AgeDescription,
                Race: vp.Race,
                TaskName: vp.TaskName,
                TaskId: vp.TaskId,
                VideoUrl: vp.VideoUrl,
                BaseInfo: bi,
                SdkName: "人脸",
            }
            resultList = append(resultList,vpE)
        }
    }
    return  resultList
}
func parseMonitorLevel(level string) string {
    if level == "1" {
        return "一级"
    }
    if level == "2" {
        return "二级"
    }
    if level == "3" {
        return "三级"
    }
    return level
}