zhangzengfei
2024-08-28 311f41bc841346935c95f58965c8d515f10584fc
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
package compare
 
import (
    "fmt"
    "sdkCompare/cache"
 
    "basic.com/pubsub/protomsg.git"
)
 
func capturePersonsCompere(args protomsg.CompareArgs, fFeature []float32, baseScore float32) protomsg.SdkCompareResult {
    var scr protomsg.SdkCompareResult
    var walkedArea = make(map[string]struct{}, 0)
 
    // 比对传入的小区id
    if args.TreeNodes != nil && len(args.TreeNodes) > 0 {
        for _, id := range args.TreeNodes {
            if _, ok := cache.CaptureDbMap.Area[id]; !ok {
                continue
            }
 
            targets := cache.CaptureDbMap.Area[id].Walk(DoSdkCompare, fFeature, baseScore)
            if len(targets) > 0 {
                // 比对结果去重, 同一个人到访过多个小区, 缓存数据内会有多条记录
                for idx, t := range targets {
                    var isRepeat bool
                    for _, r := range scr.CompareResult {
                        if t.Id == r.Id {
                            isRepeat = true
                            break
                        }
                    }
                    if !isRepeat {
                        scr.CompareResult = append(scr.CompareResult, targets[idx])
                    }
                }
            }
 
            walkedArea[id] = struct{}{}
        }
 
        if len(scr.CompareResult) > 0 || !args.IsCompareAll {
            return scr
        }
    }
 
    // 比对全部小区
    if !args.IsCompareAll && len(args.TreeNodes) > 0 {
        baseScore += 20
    }
 
    for key, val := range cache.CaptureDbMap.Area {
        if _, ok := walkedArea[key]; ok {
            continue
        }
 
        fmt.Printf("Walk area %s, cache len %d\n", key, val.GetLen())
        targets := val.Walk(DoSdkCompare, fFeature, baseScore)
        if len(targets) > 0 {
            // 比对结果去重, 同一个人到访过多个小区, 缓存数据内会有多条记录
            for idx, t := range targets {
                var isRepeat bool
                for _, r := range scr.CompareResult {
                    if t.Id == r.Id {
                        isRepeat = true
                        break
                    }
                }
                if !isRepeat {
                    scr.CompareResult = append(scr.CompareResult, targets[idx])
                }
            }
        }
        // todo 添加小区外的关联关系, 下次优先比对
    }
 
    return scr
}