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