From 9aa970326080ba2f0d3da4f3d300c5b98d2df134 Mon Sep 17 00:00:00 2001 From: liuxiaolong <736321739@qq.com> Date: 星期一, 05 八月 2019 20:51:03 +0800 Subject: [PATCH] add search people by captureId --- controllers/fileController.go | 189 ++++++++++++++++++++++++++-------------------- 1 files changed, 106 insertions(+), 83 deletions(-) diff --git a/controllers/fileController.go b/controllers/fileController.go index 9f05f67..febd9cc 100644 --- a/controllers/fileController.go +++ b/controllers/fileController.go @@ -324,21 +324,37 @@ util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎") return } - if searchBody.CompareNum !="" { - //浜屾鎼滅储锛屼笉闇�瑕佸啀姣斿浜� - co := service.GetCompResultByNum(searchBody.CompareNum) - if co != nil { - //浜屾鎼滅储鍜屾帓搴� - twiceM := GetCompareDataTwice(co,&searchBody) - util.ResponseFormat(c,code.Success,twiceM) - } else { - m :=make(map[string]interface{},0) - m["compareNum"] = searchBody.CompareNum - m["total"] = 0 - m["totalList"] = []CompareResult{} - util.ResponseFormat(c,code.CompareResultGone,m) + var faceB []byte + if searchBody.CaptureId != "" {//鍋氭煡鎵炬浜� + searchPeople, err := esApi.Dbpersoninfosbyid([]string{searchBody.CaptureId}, config.EsInfo.EsIndex.VideoPersons.IndexName, config.EsInfo.Masterip, config.EsInfo.Httpport) + if err !=nil { + util.ResponseFormat(c, code.ComError, "鎶撴媿鏁版嵁涓嶅瓨鍦紝璇锋鏌�") + return + } + if searchPeople !=nil && len(searchPeople) == 1{ + decodeF, err := base64.StdEncoding.DecodeString(searchPeople[0].FaceFeature) + if err !=nil { + util.ResponseFormat(c, code.ComError, "鏈潯鎶撴�曠壒寰佷笉鏄痓ase64锛岃妫�鏌�") + return + } + faceB = decodeF } } + //if searchBody.CompareNum !="" { + // //浜屾鎼滅储锛屼笉闇�瑕佸啀姣斿浜� + // co := service.GetCompResultByNum(searchBody.CompareNum) + // if co != nil { + // //浜屾鎼滅储鍜屾帓搴� + // twiceM := GetCompareDataTwice(co,&searchBody) + // util.ResponseFormat(c,code.Success,twiceM) + // } else { + // m :=make(map[string]interface{},0) + // m["compareNum"] = searchBody.CompareNum + // m["total"] = 0 + // m["totalList"] = []CompareResult{} + // util.ResponseFormat(c,code.CompareResultGone,m) + // } + //} var sysSetApi dbapi.SysSetApi analyServerId := "" flag, sysconf := sysSetApi.GetServerInfo() @@ -348,79 +364,86 @@ util.ResponseFormat(c, code.ComError, "analyServerId涓虹┖锛岄厤缃湁璇�") return } - if face,ok := faceExtractedMap[searchBody.PicUrl];!ok{ + if searchBody.CaptureId == ""{ + if face,ok := faceExtractedMap[searchBody.PicUrl];!ok{ + util.ResponseFormat(c, code.RequestParamError, "璇烽噸鏂颁笂浼犲浘鐗�") + return + } else { + faceB = face.FaceBytes + } + } + if faceB == nil { util.ResponseFormat(c, code.RequestParamError, "璇烽噸鏂颁笂浼犲浘鐗�") return - } else { - arg := protomsg.CompareArgs{ - FaceFeature: face.FaceBytes, - CompareThreshold: searchBody.Threshold, - } - - if searchBody.DataBases !=nil { - for idx,tableId :=range searchBody.DataBases { - if tableId == "esData" { - searchBody.DataBases = append(searchBody.DataBases[:idx], searchBody.DataBases[idx+1:]...) - searchBody.DataBases = append(searchBody.DataBases,service.CaptureTable) - break - } - } - arg.TableIds = searchBody.DataBases - } - arg.Source = true // 鏍囪瘑鏉ユ簮鏄痺eb - arg.AlarmLevel = searchBody.AlarmLevel - arg.Tasks = searchBody.Tasks - arg.TreeNodes = searchBody.TreeNodes - arg.Tabs = searchBody.Tabs - arg.SearchTime = searchBody.SearchTime - arg.InputValue = searchBody.InputValue - arg.Collection = searchBody.Collection - arg.AnalyServerId = analyServerId - - logger.Debug("arg.TableIds:", arg.TableIds, ",alarmLevel:",arg.AlarmLevel,",treeNodes:",arg.TreeNodes,",searchTime:",arg.SearchTime, - ",inputValue:",arg.InputValue,",tasks:",arg.Tasks,",compThreshold:",arg.CompareThreshold) - timeStart := time.Now() - - compareService := service.NewFaceCompareService(arg) - compareOnce := compareService.Compare() - totalData := compareOnce.CompareData - - logger.Debug("comp 姣斿缁撴潫锛岀敤鏃讹細",time.Since(timeStart)) - m := make(map[string]interface{},3) - if totalData != nil && totalData.Len() > 0{ - //鎸夊垎鍊兼帓搴� - var scorePre []float32 - for _,f1 :=range *totalData { - scorePre = append(scorePre, f1.CompareScore) - } - //logger.Debug("comp 鎺掑簭鍓嶅垎鍊兼暟缁勶細",scorePre) - sort.Sort(totalData) - var scoreAf []float32 - for _,f2 :=range *totalData { - scoreAf = append(scoreAf, f2.CompareScore) - } - //logger.Debug("comp 鎺掑簭鍚庡垎鍊兼暟缁勶細",scoreAf) - total := totalData.Len() - - 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["total"] = 0 - m["compareNum"] = searchBody.CompareNum - m["totalList"] = []CompareResult{} - } - util.ResponseFormat(c,code.Success,m) } + arg := protomsg.CompareArgs{ + FaceFeature: faceB, + CompareThreshold: searchBody.Threshold, + } + + if searchBody.DataBases !=nil { + for idx,tableId :=range searchBody.DataBases { + if tableId == "esData" { + searchBody.DataBases = append(searchBody.DataBases[:idx], searchBody.DataBases[idx+1:]...) + searchBody.DataBases = append(searchBody.DataBases,service.CaptureTable) + break + } + } + arg.TableIds = searchBody.DataBases + } + arg.Source = true // 鏍囪瘑鏉ユ簮鏄痺eb + arg.AlarmLevel = searchBody.AlarmLevel + arg.Tasks = searchBody.Tasks + arg.TreeNodes = searchBody.TreeNodes + arg.Tabs = searchBody.Tabs + arg.SearchTime = searchBody.SearchTime + arg.InputValue = searchBody.InputValue + arg.Collection = searchBody.Collection + arg.AnalyServerId = analyServerId + + logger.Debug("arg.TableIds:", arg.TableIds, ",alarmLevel:",arg.AlarmLevel,",treeNodes:",arg.TreeNodes,",searchTime:",arg.SearchTime, + ",inputValue:",arg.InputValue,",tasks:",arg.Tasks,",compThreshold:",arg.CompareThreshold) + timeStart := time.Now() + + compareService := service.NewFaceCompareService(arg) + compareOnce := compareService.Compare() + totalData := compareOnce.CompareData + + logger.Debug("comp 姣斿缁撴潫锛岀敤鏃讹細",time.Since(timeStart)) + m := make(map[string]interface{},3) + if totalData != nil && totalData.Len() > 0{ + //鎸夊垎鍊兼帓搴� + var scorePre []float32 + for _,f1 :=range *totalData { + scorePre = append(scorePre, f1.CompareScore) + } + //logger.Debug("comp 鎺掑簭鍓嶅垎鍊兼暟缁勶細",scorePre) + sort.Sort(totalData) + var scoreAf []float32 + for _,f2 :=range *totalData { + scoreAf = append(scoreAf, f2.CompareScore) + } + //logger.Debug("comp 鎺掑簭鍚庡垎鍊兼暟缁勶細",scoreAf) + total := totalData.Len() + + 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["total"] = 0 + m["compareNum"] = searchBody.CompareNum + m["totalList"] = []CompareResult{} + } + util.ResponseFormat(c,code.Success,m) } func GetCompareDataTwice(co *service.CompareOnce,arg *models.EsSearch) map[string]interface{} { -- Gitblit v1.8.0