From e70b62f740db3a723e768892284eb00a2e30f320 Mon Sep 17 00:00:00 2001 From: liuxiaolong <736321739@qq.com> Date: 星期三, 31 七月 2019 19:41:33 +0800 Subject: [PATCH] fix comp --- controllers/fileController.go | 292 ++++++++++++++++++++++++++++-------- service/FaceCompareService.go | 167 +------------------- controllers/es.go | 4 3 files changed, 240 insertions(+), 223 deletions(-) diff --git a/controllers/es.go b/controllers/es.go index 7e0cc8e..091c86b 100644 --- a/controllers/es.go +++ b/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) } diff --git a/controllers/fileController.go b/controllers/fileController.go index f0eb62f..d801abd 100644 --- a/controllers/fileController.go +++ b/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 } diff --git a/service/FaceCompareService.go b/service/FaceCompareService.go index addfce3..3882a86 100644 --- a/service/FaceCompareService.go +++ b/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.鍚戝悇涓猚ompare杩涚▼鍙戣捣璇锋眰鎷垮埌姣斿缁撴灉 - 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 } \ No newline at end of file -- Gitblit v1.8.0