From a298411166eb97edcce21ae42b1aeb763af8a8f0 Mon Sep 17 00:00:00 2001
From: sunty <1172534965@qq.com>
Date: 星期三, 17 七月 2019 18:28:19 +0800
Subject: [PATCH] Refactoring face alignment and caching

---
 dbpersoninfo.go |   81 ++++++++++++++++----------
 esutil/EsApi.go |   51 ++++++++++++-----
 2 files changed, 85 insertions(+), 47 deletions(-)

diff --git a/dbpersoninfo.go b/dbpersoninfo.go
index 5832070..1488601 100644
--- a/dbpersoninfo.go
+++ b/dbpersoninfo.go
@@ -25,7 +25,7 @@
 
 var Cmap *CmapItem
 
-func Init(){
+func Init(indexName string, serverIp string, serverPort string, analyServerId string){
     flag.Parse()
     gosdk.InitFaceExtractor(16, 0)
 
@@ -41,20 +41,29 @@
         wg.Add(1)
         go func(qs int){
             defer wg.Done()
-            escache, err := esutil.DbPersoninfos(qs, *querynum) 
+            escache, err := esutil.Personinfos(qs, *querynum, indexName, serverIp, serverPort, analyServerId)
             if err != nil {
                 fmt.Println(err)
                 return
             }
 
-            Cmap.Lock()           
+            Cmap.Lock()
 
+            var tableidstring string
         	for _, value := range escache{
-                if _, ok :=Cmap.Cam[value.Tableid]; !ok {
-                   Cmap.Cam[value.Tableid]=shardmap.New(uint8(*threadnum))        
+
+        	    // 濡傛灉娌℃湁tableid  鍒�  tableidstring = capturetable
+                if value.Tableid == nil{
+                    tableidstring="capturetable"
+                }else{
+                    tableidstring = value.Tableid
+                }
+
+                if _, ok :=Cmap.Cam[tableidstring]; !ok {
+                   Cmap.Cam[tableidstring]=shardmap.New(uint8(*threadnum))
                 }
                 
-                Cmap.Cam[value.Tableid].Set(value.Id,value.FaceFeature) 
+                Cmap.Cam[tableidstring].Set(value.Id,value.FaceFeature)
         	}
 
             Cmap.Unlock()
@@ -66,49 +75,57 @@
     fmt.Println()
 }
 
-func Getdbpersonmsg(tableid string, teststring []byte, IsCompare bool) ([]byte) {
+func GetComparePersonBaseInfo(tableid []string, faceFeature []byte, compareThreshold int) []byte {
 
     totalmap := make(map[string]float32)
 
-    if !IsCompare {
+    if faceFeature == nil {
         return nil
     }
 
-    if teststring == nil {
-        return nil 
-    }
-
-    if tableid == "" {
-        for id, val := range Cmap.Cam{
-            fmt.Println("the id is: ", id)
-            tmpmap := val.Walk(Printest, teststring)
+    if tableid == nil {
+        //瀵规瘮鍏ㄩ儴
+        for _, val := range cache.Cmap.Cam {
+            tmpmap := val.Walk(Printest, faceFeature)
             for key, sec := range tmpmap {
-                totalmap[key] = sec
+                if sec > 70*0.01 {
+                    totalmap[key] = sec
+                }
             }
         }
-    }else{
-       for id, value := range Cmap.Cam{
-            if id == tableid{
-                fmt.Println("the id is: ", id)
-                tmpmap :=value.Walk(Printest, teststring)
-                for key, sec := range tmpmap {
-                    totalmap[key]= sec
-                }
-                break
+    } else {
+        for _, tid := range tableid {
+            shardins, ok := cache.Cmap.Cam[tid]
+            fmt.Println(ok)
+            if !ok {
+                fmt.Println("get shad error by id", shardins)
+                continue
             }
-       }
+            tmpmap := shardins.Walk(Printest, faceFeature)
+            for key, sec := range tmpmap {
+                if compareThreshold > 70{
+                    if sec > compareThreshold {
+                        totalmap[key] = sec
+                    }
+                }else {
+                    if sec > 70*0.01 {
+                        totalmap[key] = sec
+                    }
+                }
+
+            }
+
+        }
     }
 
-
-    firsttime := time.Now()
-    fmt.Println(time.Since(firsttime))
+    fmt.Println(totalmap)
 
     buf, err := json.Marshal(totalmap)
     if err != nil {
         fmt.Println("map to json error!", err)
-         return nil  
+        return nil
     }
-    return  buf 
+    return buf
 }
 
 func Printest(ci []byte, co string ) (float32){
diff --git a/esutil/EsApi.go b/esutil/EsApi.go
index 7e7cbf1..17de9aa 100644
--- a/esutil/EsApi.go
+++ b/esutil/EsApi.go
@@ -10,12 +10,33 @@
         )
 
 // 鏌ヨ搴曞簱浜哄憳淇℃伅
-func DbPersoninfos( queryindex int, querynums int ) ([]*protomsg.Esinfo, error){
+func Personinfos( queryIndex int, queryNums int, indexName string, serverIp string, serverPort string, analyServerId string) ([]*protomsg.Esinfo, error){
             var dbinfos []*protomsg.Esinfo
-            point   := strconv.Itoa(queryindex)
-            number   := strconv.Itoa(querynums)
-
-            var dbinfoRequest =  `  {
+            point   := strconv.Itoa(queryIndex)
+            number   := strconv.Itoa(queryNums)
+            JsonDSL  := ""
+            if indexName == "videopersons" {
+                 JsonDSL =  `  {
+                    "from": ` + point +  `, 
+                    "query": {
+                        "bool": {
+                            "filter": [
+                                {
+                                    "term": {
+                                        "analyServerId": ` + analyServerId + `
+                                    }
+                                }
+                            ]
+                        }
+                    },
+                    "size":`+ number +`,
+                    "_source": [
+                        "id",
+                        "faceFeature"
+                    ]
+                }`
+            }else {
+                 JsonDSL =  `  {
                     "from": ` + point +  `,        
                     "query": {
                         "match_all": {}
@@ -27,8 +48,8 @@
                        "faceFeature"
                        ]
                     }`
-
-    buf, err := EsReq("POST", "http://192.168.1.182:9200/dbtablepersons/dbpersons/_search",[]byte(dbinfoRequest))
+            }
+    buf, err := EsReq("POST", "http://"+serverIp+":"+serverPort+"/"+indexName+"/_search",[]byte(JsonDSL))
     if err != nil {
         return dbinfos ,errors.New("http request dbtablename info is err!")
     }
@@ -45,7 +66,7 @@
 }
 
 // 鏍规嵁搴曞簱id鏌ヨ搴曞簱淇℃伅
-func Dbtablefosbyid (id []string) ([]protomsg.Dbtable, error) {
+func Dbtablefosbyid (id []string, indexName string, serverIp string, serverPort string) ([]protomsg.Dbtable, error) {
     var dbinfo []protomsg.Dbtable
     dbtableId := strings.Replace(strings.Trim(fmt.Sprint(id), "[]"), " ", "\",\"", -1)
         var dbinfoRequest = `
@@ -54,7 +75,7 @@
             		"bool": {
             			"filter": [{
             				"terms": {
-            					"_id": [
+            					"id": [
             						"`+ dbtableId +`"
             					]
             				}
@@ -63,7 +84,7 @@
             	}
             }
         `
-    buf, err := EsReq("POST", "http://192.168.1.182:9200/dbtables/_search",[]byte(dbinfoRequest))
+    buf, err := EsReq("POST", "http://"+serverIp+":"+serverPort+"/"+indexName+"/_search",[]byte(dbinfoRequest))
     if err != nil {
         return dbinfo,  err
     }
@@ -78,7 +99,7 @@
 }
 
 // 鏍规嵁搴曞簱浜哄憳id鏌ヨ搴曞簱浜哄憳淇℃伅
-func Dbpersoninfosbyid (id []string) ([]protomsg.Dbperson, error) {
+func Dbpersoninfosbyid (id []string, indexName string, serverIp string, serverPort string) ([]protomsg.Dbperson, error) {
     var dbinfo []protomsg.Dbperson
     dbtablePersonId := strings.Replace(strings.Trim(fmt.Sprint(id), "[]"), " ", "\",\"", -1)
     var dbinfoRequest = `
@@ -87,7 +108,7 @@
             		"bool": {
             			"filter": [{
             				"terms": {
-            					"_id": [
+            					"id": [
             						"`+ dbtablePersonId +`"
             					]
             				}
@@ -96,7 +117,7 @@
             	}
             }
         `
-    buf, err := EsReq("POST", "http://192.168.1.182:9200/dbtablepersons/_search",[]byte(dbinfoRequest))
+    buf, err := EsReq("POST", "http://"+serverIp+":"+serverPort+"/"+indexName+"/_search",[]byte(dbinfoRequest))
     if err != nil {
         return dbinfo,  err
     }
@@ -112,7 +133,7 @@
 }
 
 // 鏍规嵁tableid 鏌ヨtablename
-func Dbtablename(tableid string ) (tablename string, err error) {
+func Dbtablename(tableid string, indexName string, serverIp string, serverPort string) (tablename string, err error) {
     var dbinfotable =` {
         "query": {
             "bool": {
@@ -130,7 +151,7 @@
         ]
     }
     `
-    buf, err := EsReq("POST", "http://192.168.1.182:9200/dbtables/_search",[]byte(dbinfotable))
+    buf, err := EsReq("POST", "http://"+serverIp+":"+serverPort+"/"+indexName+"/_search",[]byte(dbinfotable))
     if err != nil {
         return "" ,errors.New("http request dbtablename info is err!")
     }

--
Gitblit v1.8.0