| | |
| | | if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" || rule.SdkArgAlias == "" { // 判断的是相似值,占比,尺寸等过滤条件,如果再有,还可以再加 |
| | | return filterRule(rule, am) |
| | | } else if rule.SdkArgAlias == "duration" { |
| | | return CompareAndSave(rule,am,lable,args,message) |
| | | |
| | | lr := CompareAndSave(rule,am,lable,args,message) |
| | | logger.Info("个体静止规则结果:",lr) |
| | | return lr |
| | | } else { |
| | | return structure.LittleRuleResult{} |
| | | } |
| | |
| | | } |
| | | // 判断一个区域内有没有静止的目标 |
| | | func CompareAndSave(rule *protomsg.Rule, am *structure.AreaMap,lable *structure.Others,args *structure.SdkDatas,message *protomsg.SdkMessage) structure.LittleRuleResult { |
| | | defer func() { |
| | | if err := recover(); err != nil { |
| | | logger.Error("个体静止规则有误", err) |
| | | } |
| | | }() |
| | | logger.Info("走了个体静止核心算法") |
| | | initN := 5 |
| | | if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a977" && rule.SdkArgAlias == "duration" { |
| | |
| | | initN = init |
| | | } |
| | | } |
| | | logger.Info("看一下静止区域内的目标:",am.AreaId) |
| | | for _, tar := range structure.StaticMap[am.AreaId].Targets { |
| | | logger.Info("具体目标:",tar.Location) |
| | | } |
| | | if len(structure.StaticMap[am.AreaId].Targets) == 0 { // 即第一帧数据(也不一定),还没有缓存 |
| | | if structure.StaticMap[am.AreaId] == nil || len(structure.StaticMap[am.AreaId].Targets) == 0 { // 即第一帧数据(也不一定),还没有缓存 |
| | | logger.Info("之前无缓存") |
| | | objs := []*structure.Obj{} |
| | | for _, tar := range am.FilterData { |
| | | obj := &structure.Obj{Id: tar.Id, Location: tar.Location, N: initN,InitN:initN} |
| | | obj := &structure.Obj{Id: tar.Id, Location: tar.Location, N: initN,InitN:initN,CacheSdkData:structure.ResultMsg{message, nil}} |
| | | objs = append(objs, obj) |
| | | } |
| | | structure.StaticMap[am.AreaId] = &structure.CameraArea{objs} |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} |
| | | } else { |
| | | logger.Info("之前有缓存") |
| | | flag := "false" |
| | | // 以之前静止的对象为主判断是否静止 |
| | | tars := []*structure.Arg{} |
| | | logger.Info("看一下静止区域内的目标:",am.AreaId) |
| | | for _, tar := range structure.StaticMap[am.AreaId].Targets { |
| | | logger.Info("具体目标:",tar.Location) |
| | | } |
| | | for _, tar := range structure.StaticMap[am.AreaId].Targets { |
| | | singleResult,arg := SingleStatic(tar,am,lable,90) |
| | | if singleResult { |
| | |
| | | } |
| | | } |
| | | if flag { // 当前检测对象保持静止(id相等并且重合度高于阈值) |
| | | flagTime := TimerAlarm(lable,person,flag,am.AreaId) |
| | | flagTime := TimerAlarm(o,person,flag,am.AreaId) |
| | | if flagTime == "10" || flagTime == "11" { |
| | | return flag,o |
| | | } else { |
| | | return false,o |
| | | } |
| | | } else { |
| | | TimerAlarm(lable,person,flag,am.AreaId) |
| | | TimerAlarm(o,person,flag,am.AreaId) |
| | | return flag,o |
| | | } |
| | | } |
| | | var rw sync.RWMutex |
| | | // 判断是否符合定时器条件 |
| | | func TimerAlarm(oth *structure.Others,person *structure.Obj, result bool,areaId string) (string) { |
| | | func TimerAlarm(o *structure.Arg,person *structure.Obj, result bool,areaId string) (string) { |
| | | var flagTime string // |
| | | logger.Info("目标的定时器:") |
| | | rw.Lock() |
| | |
| | | if tar.N == 0 && tar.AlarmFlag { |
| | | logger.Debug("-------------------------符合持续时间规则但并不是首次,不报警") |
| | | flagTime = "11" |
| | | oth.TimeLabel = flagTime |
| | | } |
| | | if tar.N == 0 && !tar.AlarmFlag { // 这组规则的定时器要全部等于0 暂且认为一组规则只有一个定时器 |
| | | logger.Debug("———————————-------------首次符合持续时间规则并报警") |
| | | flagTime = "10" |
| | | tar.AlarmFlag = true |
| | | oth.CacheData = []structure.ResultMsg{} |
| | | oth.CacheData = append(oth.CacheData,tar.CacheSdkData) |
| | | oth.TimeLabel = flagTime |
| | | o.CacheData = tar.CacheSdkData |
| | | } |
| | | if tar.N != 0 { |
| | | flagTime = "00" |
| | |
| | | if tar.BufferFlag == 0 { |
| | | logger.Debug("------------------------------杀死计数器,报警此帧状态改变的数据,此时的计数器的值为", tar.N) |
| | | flagTime = "12" |
| | | oth.TimeLabel = flagTime |
| | | structure.StaticMap[areaId].Targets = append(structure.StaticMap[areaId].Targets[:index],structure.StaticMap[areaId].Targets[index+1:]...) |
| | | } else { |
| | | if tar.BufferFlag > 0 { |