554325746@qq.com
2019-07-10 f878fbee191e27c790e3cf1948494615dec788a3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package cache
 
import (
    "flag"
    "fmt"
    "time"
    "sync"
    "encoding/base64"
 
    "basic.com/pubsub/cache.git/esutil"
    "basic.com/pubsub/cache.git/shardmap"
 
    "basic.com/valib/gosdk.git"
)
 
var querynum = flag.Int("querynum", 10, "the query number from database")
var threadnum = flag.Int("threadnum",32, "the number of thread to deal data.")
 
type CmapItem struct {
    sync.Mutex
    cam map[string]*shardmap.ShardMap
}
 
var Cmap *CmapItem
 
func Init(){
    flag.Parse()
    gosdk.InitFaceExtractor(16, 0)
 
    Cmap = &CmapItem{
        cam: make(map[string]*shardmap.ShardMap),
    }
 
    temptime := time.Now()
    var wg sync.WaitGroup
 
    for i:=0; i<*threadnum; i++ {
        j := i*(*querynum)
        wg.Add(1)
        go func(qs int){
            defer wg.Done()
            escache, err := esutil.DbPersoninfos(qs, *querynum) 
            if err != nil {
                fmt.Println(err)
                return
            }
 
            Cmap.Lock()           
 
            for _, value := range escache{
                if _, ok :=Cmap.cam[value.Tableid]; !ok {
                   Cmap.cam[value.Tableid]=shardmap.New(uint8(*threadnum))        
                }
                
                Cmap.cam[value.Tableid].Set(value.Id,value.FaceFeature) 
            }
 
            Cmap.Unlock()
 
        }(j)
    }
    wg.Wait()
    fmt.Println("time of get data from es.", time.Since(temptime))
    fmt.Println()
}
 
//func main(){
//    Init()
//    Getdbpersonmsg("")
//}
 
func Getdbpersonmsg(tableid string, teststring []byte, IsCompare bool) ([]byte) {
 
    var buf []byte
 
    if !IsCompare {
        return nil
    }
 
    if teststring == nil {
        return nil 
    }
 
    if tableid == "" {
        for _, val := range Cmap.cam{
            tmpbuf := val.Walk(Printest, teststring)
            buf =append(buf, tmpbuf...)
        }
 
    }else{
 
       for id, value := range Cmap.cam{
            if id == tableid{
                fmt.Println(id)
                buf =value.Walk(Printest, teststring)
                break
            }
       }
    }
 
    fmt.Println()
    fmt.Println()
 
    firsttime := time.Now()
    fmt.Println(time.Since(firsttime))
    return  buf
}
 
func Printest(ci []byte, co string ) (float32){
 
   co_d, err := base64.StdEncoding.DecodeString(co)
    if err != nil {
        fmt.Println("co_d : error : ", err)
        return -1
    }
 
    sec := gosdk.FaceCompare(ci, co_d)
    return sec
}