panlei
2019-07-08 c09d942e31a0a855a8690a69cc157b3ed7b5efc8
根据id去查具体信息再拼装
4个文件已修改
62 ■■■■ 已修改文件
go.mod 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.sum 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
insertdata/insertDataToEs_test.go 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruleserver/ruleToformula.go 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.mod
@@ -4,7 +4,7 @@
require (
    basic.com/dbapi.git v0.0.0-20190701055817-73bca225181f
    basic.com/pubsub/cache.git v0.0.0-20190705102856-7ce9cb1cceda
    basic.com/pubsub/cache.git v0.0.0-20190708022451-9403e8b0eaa6
    basic.com/pubsub/protomsg.git v0.0.0-20190706093248-8cd3a0511c78
    basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051
    basic.com/valib/gopherdiscovery.git v0.0.0-20190605034340-15d89d8b4e28
go.sum
@@ -1,7 +1,7 @@
basic.com/dbapi.git v0.0.0-20190701055817-73bca225181f h1:CVB4pmUXTPPFN7w/DQfU1YWg2Tp2gG93TTr1M5W86sE=
basic.com/dbapi.git v0.0.0-20190701055817-73bca225181f/go.mod h1:eDXPnxaz6jZPDvBSk7ya7oSASWPCuUEgRTJCjsfKt/Q=
basic.com/pubsub/cache.git v0.0.0-20190705102856-7ce9cb1cceda h1:lWBg00n+UPFVLXo5Wx0ZADNAj6CRMquDxN3KfrDuQ9E=
basic.com/pubsub/cache.git v0.0.0-20190705102856-7ce9cb1cceda/go.mod h1:gHLJZz2ee1cGL0X0ae69fs56bAxkDgEQwDhhXZJNUcY=
basic.com/pubsub/cache.git v0.0.0-20190708022451-9403e8b0eaa6 h1:SisFlsnazb3r72Ao7GejllAlx2SXNXnxigm7rfvso4w=
basic.com/pubsub/cache.git v0.0.0-20190708022451-9403e8b0eaa6/go.mod h1:gHLJZz2ee1cGL0X0ae69fs56bAxkDgEQwDhhXZJNUcY=
basic.com/pubsub/protomsg.git v0.0.0-20190706093248-8cd3a0511c78 h1:rjF01FTFUvFc5zj3PQ1MN17z+FVYZZQInhtzn+vhMSk=
basic.com/pubsub/protomsg.git v0.0.0-20190706093248-8cd3a0511c78/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051 h1:9flC2o3kasaM2Y6I+mY+mxmve/pyAY/UzGQZLT3lFHM=
insertdata/insertDataToEs_test.go
@@ -3,5 +3,5 @@
import "testing"
func TestInsertToEs(t *testing.T){
    InsertToEs()
    //InsertToEs()
}
ruleserver/ruleToformula.go
@@ -2,7 +2,7 @@
import (
    "encoding/json"
    "github.com/gogo/protobuf/proto"
    "fmt"
    "ruleprocess/cache"
    "ruleprocess/logger"
    "sort"
@@ -10,7 +10,7 @@
    "strings"
    "time"
     bigCache "basic.com/pubsub/cache.git"
    bigCache "basic.com/pubsub/cache.git"
    "basic.com/pubsub/protomsg.git"
    "github.com/knetic/govaluate"
)
@@ -64,7 +64,7 @@
    IsYolo     bool    // 是否是yolo数据
    Location   Rect    // 记下每个目标的位置参数,最后给结果装配人脸数据的时候用的到
    SdkName    string
    Feature       []byte
    Feature    []byte
    ThftRes    protomsg.ThftResult
    Liker      []*protomsg.Baseinfo
}
@@ -234,30 +234,36 @@
    compareFlag := false
    // 看看是否有只配人脸比对算法但没有配对比库的规则,如果有,则比对对象为全部底库
    for j := 0; j < len(groupRule.Rules); j++ {
        if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972"{
            if groupRule.Rules[j].SdkArgAlias == "对比底库" {
        if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" {
            if groupRule.Rules[j].SdkArgAlias == "compareBase" {
                compareFlag = true
            }
        }
    }
    if compareFlag {
        logger.Info("配置了对比底库参数")
    }else {
    } else {
        logger.Info("没有配置对比底库参数")
    }
    for j := 0; j < len(groupRule.Rules); j++ {
        if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && groupRule.Rules[j].SdkArgAlias == "对比底库"{
        // 只有是人脸对比并且配置的参数是对比底库才走(若配的对比阈值则不走)
        if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && groupRule.Rules[j].SdkArgAlias == "compareBase" {
            for _, sdkData := range args.Sdkdata {
                if sdkData.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" { // 搜索到人脸检测的sdkdata 现在关于人脸的只有他一个sdk,全找他
                    for _, areaMap := range sdkData.AreaMapList {
                        // 拿区域中每个人脸特征值去对比,填充其liker
                        if groupRule.Rules[j].PolygonId == areaMap.areaId {
                            for _,arg := range areaMap.args {
                                bytes := bigCache.Getdbpersonmsg(string(arg.Feature),true)
                                binfos := protomsg.Binfos{}
                                proto.Unmarshal(bytes,&binfos)
                                arg.Liker = binfos.Infos
                                logger.Info("-------------------成功给liker赋值:",arg.Liker)
                            for _, arg := range areaMap.args {
                                bytes := bigCache.Getdbpersonmsg("", arg.Feature, true)
                                var m map[string]float32
                                json.Unmarshal(bytes, &m)
                                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)
                            }
                        }
                    }
@@ -273,7 +279,7 @@
        }
    }()
    logger.Info("+++++++++++规则开始运行+++++++++++++++++当前规则--:", *groupRule)
    Compare(args,groupRule)
    Compare(args, groupRule)
    resultSplice := []*LittleRuleResult{}
    // 先过完条件规则
    for j := 0; j < len(groupRule.Rules); j++ {
@@ -330,12 +336,12 @@
    if strings.HasPrefix(completeFormula, "&&") || strings.HasPrefix(completeFormula, "||") || strings.HasPrefix(completeFormula, ">=") || strings.HasPrefix(completeFormula, "<=") || strings.HasPrefix(completeFormula, "==") || strings.HasPrefix(completeFormula, "!=") || strings.HasPrefix(completeFormula, ">") || strings.HasPrefix(completeFormula, "<") {
        // 以这些开头的基本是联动任务
        if strings.HasPrefix(completeFormula, "&&") || strings.HasPrefix(completeFormula, "||") || strings.HasPrefix(completeFormula, ">=") || strings.HasPrefix(completeFormula, "<=") || strings.HasPrefix(completeFormula, "==") || strings.HasPrefix(completeFormula, "!=") {
            completeFormula = completeFormula[2 :]
            completeFormula = completeFormula[2:]
        }
        if strings.HasPrefix(completeFormula, ">") || strings.HasPrefix(completeFormula, "<") {
            completeFormula = completeFormula[1 :]
            completeFormula = completeFormula[1:]
        }
        logger.Info("-------------------看看拔毛后的表达式:",completeFormula)
        logger.Info("-------------------看看拔毛后的表达式:", completeFormula)
        expression, _ := govaluate.NewEvaluableExpression(completeFormula)
        result, _ := expression.Evaluate(nil) // 得到数学公式的结果
        return result.(bool)
@@ -418,7 +424,7 @@
                    //if flag11 {
                    //    args.RuleResult["face"] = faces
                    //}
                    args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText,locations})
                    args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, locations})
                    logger.Info("-------------------yolo结果标签", args.RuleResult["yolo"].([]Result))
                }
                if args.RuleResult["face"] != nil {
@@ -482,7 +488,7 @@
        if threshold <= obj.Score && size <= float64(obj.Rects.Width*obj.Rects.Height) && intersectionper <= PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale) {
            // 这步要备齐表达式里所需要的所有参数
            a.targetNum++
            arg1 := Arg{obj.Score, PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), obj.IsYolo, obj.Rects, obj.SdkName, obj.Feature,obj.ThftRes,[]*protomsg.Baseinfo{}}
            arg1 := Arg{obj.Score, PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), obj.IsYolo, obj.Rects, obj.SdkName, obj.Feature, obj.ThftRes, []*protomsg.Baseinfo{}}
            //logger.Println("放进去的arg:-------", arg1)
            a.args = append(a.args, arg1)
            a.filterData = append(a.filterData, arg1)
@@ -604,7 +610,7 @@
                        }
                    }
                    if sdkName != "" {
                        args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText,[]Rect{}})
                        args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, []Rect{}})
                        logger.Info("-------------------yolo结果标签", args.RuleResult["yolo"].([]Result))
                    }
                    if args.RuleResult["face"] != nil {
@@ -632,10 +638,10 @@
func filterRule(rule *protomsg.Rule, am *AreaMap) LittleRuleResult {
    if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a972" {
        // 处理的是人脸算法 如果这条规则配置的是人脸算法,过滤完条件之后直接得出结果,因为肯定没有数量条件,自己拼接
        logger.Error("规则的算法id和区域的算法id:",rule.SdkId,"===",am.sdkId)
        logger.Error("规则的算法id和区域的算法id:", rule.SdkId, "===", am.sdkId)
        if rule.SdkId == am.sdkId && rule.PolygonId == am.areaId { // 算法和区域都得对的上
            if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && rule.SdkArgAlias != "time_rule"{
            if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && rule.SdkArgAlias != "time_rule" {
                // 只需要过滤阈值,过滤完后数组长度大于0即为报警,但要考虑如何对每一张都报警呢
                argValue, err := strconv.ParseFloat(rule.SdkArgValue, 64)
                if err != nil {
@@ -646,8 +652,8 @@
                for _, obj := range am.filterData {
                    for index := 0; index < len(obj.Liker); {
                        // 将达不到阈值的相似者从相似者数组中删除
                        logger.Warn("=======================相似值:",float64(obj.Liker[index].CompareScore * 100))
                        if float64(obj.Liker[index].CompareScore * 100) < argValue {
                        logger.Warn("=======================相似值:", float64(obj.Liker[index].CompareScore*100))
                        if float64(obj.Liker[index].CompareScore*100) < argValue {
                            // Go 语言中切片删除元素的本质是:以被删除元素为分界点,将前后两个部分的内存重新连接起来。不用怀疑,数组删除元素就这么坑爹
                            obj.Liker = append(obj.Liker[:index], obj.Liker[index+1:]...)
                        } else {