zhangqian
2024-12-13 6c38b30be9ff127f200ffbfe75c0dc48612f37a6
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
package face
 
import (
    "fmt"
    "strconv"
    "unsafe"
)
 
func ByteSlice2float32Slice(src []byte) []float32 {
    if len(src) == 0 {
        return nil
    }
 
    l := len(src) / 4
    ptr := unsafe.Pointer(&src[0])
 
    return (*[1 << 26]float32)((*[1 << 26]float32)(ptr))[:l:l]
}
 
func DoSdkCompare(ci, co []float32) float32 {
    sec := DirectCompare(ci, co)
    //logger.Debug("比对得分为:", sec)
 
    sec = ParseScore(sec)
    return sec
}
 
func DirectCompare(feat1 []float32, feat2 []float32) float32 {
    if len(feat1) != len(feat2) {
        return 0
    }
 
    var score float32
    if len(feat1) != len(feat2) {
        return 0
    }
    l := len(feat1)
    if l == 0 {
        return 0
    }
    for i := 0; i < l; i++ {
        score += feat1[i] * feat2[i]
    }
    score += 0.05
    if score > 0.9999 {
        score = 0.9999
    }
    if score < 0.0001 {
        score = 0.0001
    }
 
    //fmt.Println("score:", score)
    return score
}
 
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)
}