From b5687ecf98b999ad535e242c5d25cc5be328af77 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期五, 13 九月 2024 11:17:00 +0800
Subject: [PATCH] add rlock in shardmap walk
---
compare/compare.go | 68 +++++++++++-----------------------
1 files changed, 22 insertions(+), 46 deletions(-)
diff --git a/compare/compare.go b/compare/compare.go
index 5b86ce6..e4af573 100644
--- a/compare/compare.go
+++ b/compare/compare.go
@@ -1,11 +1,10 @@
package compare
import (
- "encoding/base64"
"fmt"
"strconv"
- "sdkCompare/cache"
+ "sdkCompare/util"
"basic.com/pubsub/protomsg.git"
"basic.com/valib/logger.git"
@@ -14,10 +13,12 @@
const thresholdLimit = float32(30)
-func GetComparePersonBaseInfo(args protomsg.CompareArgs) []byte {
+func Walk(args protomsg.CompareArgs) []byte {
if args.FaceFeature == nil {
return nil
}
+
+ fFeature := util.ByteSlice2float32Slice(args.FaceFeature)
//鎸囧畾鏈�浣庡垎
baseScore := thresholdLimit
@@ -29,62 +30,37 @@
baseScore = 0
}
- var scResult protomsg.SdkCompareResult
+ logger.Debugf("Compare args treeNodes %+v, is all %v, target %s, feature len %d", args.TreeNodes, args.IsCompareAll, args.CompareTarget, len(fFeature))
- var walkedArea = make(map[string]struct{}, 0)
- // 浼樺厛姣斿浼犲叆鐨勫皬鍖篿d
- if args.TreeNodes != nil && len(args.TreeNodes) > 0 {
- for _, id := range args.TreeNodes {
- if _, ok := cache.CacheMap.Area[id]; ok {
- targets := cache.CacheMap.Area[id].Walk(DoSdkCompare, args.FaceFeature, baseScore)
- if len(targets) > 0 {
- scResult.CompareResult = append(scResult.CompareResult, targets...)
- }
+ var response protomsg.SdkCompareResult
- walkedArea[id] = struct{}{}
- }
- }
-
- if len(scResult.CompareResult) > 0 {
- goto done
- }
+ // 鎶撴媿搴撴瘮瀵�
+ switch args.CompareTarget {
+ case "realName":
+ response = realNamePersonsCompere(args, fFeature, baseScore)
+ case "keyPerson":
+ response = keyPersonsCompere(args, fFeature, baseScore)
+ default:
+ response = capturePersonsCompere(args, fFeature, baseScore)
}
- // 姣斿浠ュ鐨勫皬鍖�
- if !args.IsCompareAll && len(args.TreeNodes) > 0 {
- baseScore += 20
+ 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)
}
- for key, val := range cache.CacheMap.Area {
- if _, ok := walkedArea[key]; ok {
- continue
- }
-
- targets := val.Walk(DoSdkCompare, args.FaceFeature, baseScore)
- if len(targets) > 0 {
- scResult.CompareResult = append(scResult.CompareResult, targets...)
- // todo 娣诲姞灏忓尯澶栫殑鍏宠仈鍏崇郴, 涓嬫浼樺厛姣斿
- }
- }
-
-done:
- logger.Debugf("姣斿缁撴灉 %d鏉�", len(scResult.CompareResult))
- buf, err := proto.Marshal(&scResult)
+ buf, err := proto.Marshal(&response)
if err != nil {
- logger.Error("scResult Marshal error!", err)
+ logger.Error("response Marshal error!", err)
return nil
}
return buf
}
-func DoSdkCompare(ci []byte, co string) float32 {
- co_d, err := base64.StdEncoding.DecodeString(co)
- if err != nil {
- logger.Error("DoSdkCompare err:", err)
- return -1
- }
- sec := DecCompare(ci, co_d)
+func DoSdkCompare(ci, co []float32) float32 {
+ sec := DirectCompare(ci, co)
//logger.Debug("姣斿寰楀垎涓猴細", sec)
sec = ParseScore(sec)
--
Gitblit v1.8.0