zhangzengfei
2024-11-07 c06ac05c6e52dd5bf818c9add39db5eed557ccac
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
package compare
 
import (
    "fmt"
    "strconv"
 
    "sdkCompare/util"
 
    "github.com/golang/protobuf/proto"
)
 
const thresholdLimit = float32(30)
 
func Walk(args protomsg.CompareArgs) []byte {
    if args.FaceFeature == nil {
        return nil
    }
 
    fFeature := util.ByteSlice2float32Slice(args.FaceFeature)
 
    //指定最低分
    baseScore := thresholdLimit
    if args.CompareThreshold > thresholdLimit {
        baseScore = args.CompareThreshold
    }
 
    if args.IsCompareAll {
        baseScore = 0
    }
 
    logger.Debugf("Compare args treeNodes %+v, is all %v, target %s, feature len %d", args.TreeNodes, args.IsCompareAll, args.CompareTarget, len(fFeature))
 
    var response protomsg.SdkCompareResult
 
    // 抓拍库比对
    switch args.CompareTarget {
    case "realName":
        response = realNamePersonsCompere(args, fFeature, baseScore)
    default:
        response = capturePersonsCompere(args, fFeature, baseScore)
    }
 
    logger.Debugf("Compare target %s result len %d", args.CompareTarget, len(response.CompareResult))
 
    if len(response.CompareResult) > 0 {
        logger.Debugf("Compare result %+v", response.CompareResult)
    }
 
    buf, err := proto.Marshal(&response)
    if err != nil {
        logger.Error("response Marshal error!", err)
        return nil
    }
 
    return buf
}
 
func DoSdkCompare(ci, co []float32) float32 {
    sec := DirectCompare(ci, co)
    //logger.Debug("比对得分为:", sec)
 
    sec = ParseScore(sec)
    return sec
}
 
func ParseScore(compareScore float32) float32 {
    if compareScore <= 1 {
        compareScore = compareScore * 100
    }
    if compareScore == 100 {
        return 100
    }
    f, _ := strconv.ParseFloat(fmt.Sprintf("%2.2f", compareScore), 32)
 
    return float32(f)
}