zhangzengfei
2024-03-26 345b16523c34672e6283a6928d857c406cc6fec3
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
package face
 
import (
    "unsafe"
)
 
func DecCompare(feat1 []byte, feat2 []byte) float32 {
    ffeat1 := byteSlice2float32Slice(feat1)
    ffeat2 := byteSlice2float32Slice(feat2)
    if len(ffeat1) != len(ffeat2) {
        return 0
    }
    // normalize
    var score float32
    for i := 0; i < len(ffeat1); i++ {
        score += ffeat1[i] * ffeat2[i]
    }
    score += 0.05
    if score > 0.9999 {
        score = 0.9999
    }
    if score < 0.0001 {
        score = 0.0001
    }
    return score
}
 
func byteSlice2float32Slice(src []byte) []float32 {
    if len(src) == 0 {
        return nil
    }
 
    l := len(src) / 4
    ptr := unsafe.Pointer(&src[0])
 
    return (*[1 << 26]float32)(ptr)[:l:l]
}