From c630094a48c8aad04e0af60d6b1e8c817fa926bf Mon Sep 17 00:00:00 2001 From: liuxiaolong <736321739@qq.com> Date: 星期四, 25 七月 2019 14:52:07 +0800 Subject: [PATCH] compareByPhoto --- controllers/fileController.go | 110 ++++++++++++++++++++++++++++++------ discovery/server.go | 57 +++++++++++++++++++ config/dev.yaml | 2 3 files changed, 148 insertions(+), 21 deletions(-) diff --git a/config/dev.yaml b/config/dev.yaml index 70f52c1..132cce9 100644 --- a/config/dev.yaml +++ b/config/dev.yaml @@ -7,7 +7,7 @@ networkAdapter: enp59s0f1 compare: url: - - 192.168.1.66:40010 + - 192.168.1.123:40010 weedfs: ip: 192.168.1.203 uploadport: 6333 diff --git a/controllers/fileController.go b/controllers/fileController.go index fd631e1..29839f6 100644 --- a/controllers/fileController.go +++ b/controllers/fileController.go @@ -149,35 +149,74 @@ } } +type CompareResult struct { + Id string `json:"id"` + 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"` + TaskName string `json:"taskName"` + BaseInfo []DbPersonVo `json:"baseInfo"` + VideoUrl string `json:"videoUrl"` +} +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"` +} + +var captureTable = "capturetable" // 鎶撴媿搴� +type SearchCondition struct { + Url string `json:"url"` + TableIds []string `json:"tableIds"` + CompThreshold string `json:"compThreshold"` +} // @Summary 浠ュ浘鎼滃浘 // @Description 浠ュ浘鎼滃浘 +// @Accept json // @Produce json // @Tags 浠ュ浘鎼滃浘 -// @Param url formData string true "url" -// @Param tableId formData string true "搴曞簱id" -// @Param compThreshold formData string true "姣斿闃堝��" +// @Param condition body controllers.SearchCondition true "鎼滅储鍙傛暟" // @Success 200 {string} json "{"code":200, msg:"", data:"", success:true}" // @Failure 500 {string} json "{"code":500, msg:"", data:"", success:false}" // @Router /data/api-v/dbperson/searchByPhoto [POST] func (controller FileController) SearchByPhoto(c *gin.Context) { - photoUrl := c.Request.FormValue("url") - tableId := c.Request.FormValue("tableId")//搴曞簱id - compThresholdStr := c.Request.FormValue("compThreshold")//姣斿闃堝�� - compThreshold, err := strconv.ParseFloat(compThresholdStr,32) - if photoUrl == "" || err != nil { + var condition SearchCondition + err := c.BindJSON(&condition) + if err !=nil || condition.Url == "" { util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎") return } - if face,ok := faceExtractedMap[photoUrl];!ok{ + compThreshold, err := strconv.ParseFloat(condition.CompThreshold,32) + if condition.Url == "" || err != nil { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎") + return + } + if face,ok := faceExtractedMap[condition.Url];!ok{ util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎") return } else { arg := protomsg.CompareArgs{ + TableIds:[]string{ captureTable }, FaceFeature:face.FaceBytes, CompareThreshold:float32(compThreshold), } - if tableId !=""{ - arg.TableIds = []string{ tableId } + if condition.TableIds !=nil { + arg.TableIds = append(arg.TableIds, condition.TableIds...) } b, err := proto.Marshal(&arg) if err !=nil{ @@ -186,7 +225,7 @@ } compServerList := config.CompServerInfo.Url fmt.Println("compServerList:", compServerList) - resultList :=make([]protomsg.Dbperson,0) + resultList :=make([]CompareResult,0) for _,str :=range compServerList{ reqUrl := "tcp://"+str reqClient := deliver.NewClient(deliver.ReqRep, reqUrl) @@ -198,21 +237,52 @@ if err !=nil{ continue } - m :=make(map[string]float32,0) - err = json.Unmarshal(resultB, &m) + rList :=make([]protomsg.Esinfo,0) + err = json.Unmarshal(resultB, &rList) if err !=nil{ continue } - personIds := make([]string,len(m)) - for k,_ :=range m{ - personIds = append(personIds,k) + + var dbPersonM map[string]*protomsg.Esinfo + var captureM map[string]*protomsg.Esinfo + var personIds []string + var captureIds []string + for _,v :=range rList{ + if v.Tableid == captureTable { + captureM[v.Id] = &v + personIds = append(personIds,v.Id) + } else { + dbPersonM[v.Id] = &v + captureIds = append(captureIds,v.Id) + } } esServerIp := config.EsInfo.Masterip esServerPort := config.EsInfo.Httpport index := config.EsInfo.EsIndex.Dbtablepersons.IndexName - dbpeople, e := esApi.Dbpersoninfosbyid(personIds, index, esServerIp, esServerPort) - if e ==nil{ - resultList = append(resultList,dbpeople...) + dbpersons, e := esApi.Dbpersoninfosbyid(personIds, index, esServerIp, esServerPort) + if e ==nil && dbpersons !=nil { + for _,p :=range dbpersons { + var dbP = DbPersonVo { + PersonId: p.Id, + IdCard: p.IdCard, + CompareScore: 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) + } } } util.ResponseFormat(c,code.Success,resultList) diff --git a/discovery/server.go b/discovery/server.go index 5844159..cedfc10 100644 --- a/discovery/server.go +++ b/discovery/server.go @@ -1 +1,58 @@ package discovery + +import ( + "basic.com/pubsub/protomsg.git" + "basic.com/valib/gopherdiscovery.git" + "fmt" + "time" + "webserver/extend/logger" + "github.com/gogo/protobuf/proto" +) + +const ( + Discovery_Server = "tcp://0.0.0.0:40008" + Discovery_UrlPubSub = "tcp://0.0.0.0:50008" +) + +//鍚姩discovery鐨剆erver +var discoveryServer *gopherdiscovery.DiscoveryServer +var dbChangeChan chan *protomsg.DbChangeMessage +func StartServer() { + var clients []string + var err error + var ( + defaultOpts = gopherdiscovery.Options{ + SurveyTime: 3 * time.Second, + //RecvDeadline: 3 * time.Second, + PollTime: 5 * time.Second, + } + ) + + discoveryServer, err = gopherdiscovery.Server(Discovery_Server, Discovery_UrlPubSub, defaultOpts) + + logger.Debug("server: ", discoveryServer) + logger.Debug("err:",err) + logger.Debug("clients: ",clients) + + dbChangeChan = make(chan *protomsg.DbChangeMessage) + + for { + select { + case dbMsg := <-dbChangeChan: + publishMessage(dbMsg) + } + } +} + +//骞挎挱鏁版嵁搴撴敼鍙樼殑msg +func publishMessage(msg *protomsg.DbChangeMessage) { + sendBytes,err := proto.Marshal(msg) + if err ==nil{ + discoveryServer.PublishMsg(string(sendBytes)) + } +} + +func AddDbMessage(msg *protomsg.DbChangeMessage) { + fmt.Println("MSG In") + dbChangeChan<-msg +} \ No newline at end of file -- Gitblit v1.8.0