| | |
| | | return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort} |
| | | } else { |
| | | flag := "false" |
| | | // 以之前静止的对象为主判断是否静止 |
| | | tars := []*structure.Arg{} |
| | | for _, tar := range structure.StaticMap[am.AreaId].Targets { |
| | | singleResult := SingleStatic(tar,am,lable,90) |
| | | singleResult,arg := SingleStatic(tar,am,lable,90) |
| | | if singleResult { |
| | | flag = "true" |
| | | tars = append(tars,arg) |
| | | } |
| | | } |
| | | // 把满足条件的目标放进areaMap中 |
| | | am.AlarmObj = tars |
| | | // 更新数据,把新来的数据写入缓存 |
| | | objs := []*structure.Obj{} |
| | | for _, tar := range am.FilterData { |
| | |
| | | } |
| | | |
| | | // 判断一个目标是否静止了指定时间 |
| | | func SingleStatic(person *structure.Obj, am *structure.AreaMap,lable *structure.Others, argValue float64) bool{ |
| | | func SingleStatic(person *structure.Obj, am *structure.AreaMap,lable *structure.Others, argValue float64) (bool,*structure.Arg){ |
| | | flag := false |
| | | var o *structure.Arg = nil |
| | | for _, obj := range am.FilterData { |
| | | if person.Id == obj.Id { |
| | | coincidenceDegree := PgsInterPercent(Rect2Point(person.Location), obj.Location, 1, 1) |
| | | o = obj |
| | | if coincidenceDegree >= argValue { |
| | | flag = true |
| | | } |
| | |
| | | if flag { // 有一个对象保持静止(id相等并且重合度高于阈值) |
| | | flagTime := TimerAlarm(lable,person,flag,am.AreaId) |
| | | if flagTime == "10" || flagTime == "11" { |
| | | return flag |
| | | return flag,o |
| | | } else { |
| | | return false |
| | | return false,o |
| | | } |
| | | } else { |
| | | TimerAlarm(lable,person,flag,am.AreaId) |
| | | return flag |
| | | return flag,o |
| | | } |
| | | } |
| | | var rw sync.RWMutex |