panlei
2019-07-09 777f3e442294132e15b15e49b3e95ba72695cc7c
补全比对规则
1个文件已修改
35 ■■■■ 已修改文件
ruleserver/ruleToformula.go 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruleserver/ruleToformula.go
@@ -233,19 +233,23 @@
    }
}
func Compare(args *SdkDatas, groupRule *protomsg.GroupRule) {
    compareFlag := false
    compareFlag := 0
    tableIds := ""
    // 看看是否有只配人脸比对算法但没有配对比库的规则,如果有,则比对对象为全部底库
    for j := 0; j < len(groupRule.Rules); j++ {
        if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" { // 配了人脸比对
            if groupRule.Rules[j].SdkArgAlias == "compareBase" { // 配了比对的底库
                compareFlag = true
            if groupRule.Rules[j].SdkArgAlias == "compareBase" && groupRule.Rules[j].SdkArgValue != "" { // 配了比对底库的参数但没有配全部底库
                compareFlag = 2
                tableIds = groupRule.Rules[j].SdkArgValue + "," // 最后会多一个tableId,切出来的数组取len-1就可以
            }
            if groupRule.Rules[j].SdkArgAlias == "compareBase" && groupRule.Rules[j].SdkArgValue == "" { // 配的参数是比对全部底库
                compareFlag = 1
            }
        }
    }
    if compareFlag {
        logger.Info("配置了对比底库参数")
    } else {
    if compareFlag == 0 {
        logger.Info("没有配置对比底库参数")
        return
    }
    for j := 0; j < len(groupRule.Rules); j++ {
        // 只有是人脸对比并且配置的参数是对比底库才走(若配的对比阈值则不走)
@@ -256,6 +260,7 @@
                        // 拿区域中每个人脸特征值去对比,填充其liker
                        if groupRule.Rules[j].PolygonId == areaMap.areaId {
                            for _, arg := range areaMap.args {
                                if compareFlag == 1 {
                                bytes := bigCache.Getdbpersonmsg("", arg.Feature, true)
                                var m map[string]float32
                                err1 := json.Unmarshal(bytes, &m)
@@ -268,6 +273,24 @@
                                    baseinfo.CompareScore = val
                                    arg.Liker = append(arg.Liker, &baseinfo)
                                }
                                }
                                if compareFlag == 2 {
                                    array := strings.Split(tableIds, ",")
                                    for i := 0; i < len(array)-1; i++ {
                                        bytes := bigCache.Getdbpersonmsg(array[i], arg.Feature, true)
                                        var m map[string]float32
                                        err1 := json.Unmarshal(bytes, &m)
                                        if err1 != nil {
                                            logger.Error("getBaseInfo解压错误", err1)
                                        }
                                        for key, val := range m {
                                            fmt.Println(key)
                                            baseinfo := protomsg.Baseinfo{}
                                            baseinfo.CompareScore = val
                                            arg.Liker = append(arg.Liker, &baseinfo)
                                        }
                                    }
                                }
                                logger.Info("-------------------成功给liker赋值:", arg.Liker)
                            }
                        }