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) }