package compare import ( "fmt" "strconv" "sdkCompare/util" "basic.com/pubsub/protomsg.git" "basic.com/valib/logger.git" "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) case "keyPerson": response = keyPersonsCompere(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) }