| | |
| | | } |
| | | // 判断一个区域内有没有静止的目标 |
| | | func CompareAndSave(rule *protomsg.Rule, am *structure.AreaMap,lable *structure.Others,args *structure.SdkDatas,message *protomsg.SdkMessage) structure.LittleRuleResult { |
| | | logger.Info("走了个体静止核心算法") |
| | | initN := 5 |
| | | if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a977" && rule.SdkArgAlias == "duration" { |
| | | if init,err := strconv.Atoi(rule.SdkArgValue); err != nil { |
| | |
| | | |
| | | // 判断一个目标是否静止了指定时间 |
| | | func SingleStatic(person *structure.Obj, am *structure.AreaMap,lable *structure.Others, argValue float64) (bool,*structure.Arg){ |
| | | logger.Info("单个目标的判断:") |
| | | 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) |
| | | logger.Info("判断目标的重合度",coincidenceDegree) |
| | | o = obj |
| | | if coincidenceDegree >= argValue { |
| | | flag = true |
| | | } |
| | | } |
| | | } |
| | | if flag { // 有一个对象保持静止(id相等并且重合度高于阈值) |
| | | if flag { // 当前检测对象保持静止(id相等并且重合度高于阈值) |
| | | flagTime := TimerAlarm(lable,person,flag,am.AreaId) |
| | | if flagTime == "10" || flagTime == "11" { |
| | | return flag,o |
| | |
| | | // 判断是否符合定时器条件 |
| | | func TimerAlarm(oth *structure.Others,person *structure.Obj, result bool,areaId string) (string) { |
| | | var flagTime string // |
| | | |
| | | logger.Info("目标的定时器:") |
| | | rw.Lock() |
| | | |
| | | if result { // 结果为真 |