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