| | |
| | | } |
| | | } |
| | | |
| | | // 对单帧图像的判断 是舍弃(或者说对于某些需求可以放ES数据库一份)还是返回 |
| | | // 对单帧图像的判断 thisSdkDatas 当前传入的这帧数据,cacheSdkData 定时器里缓存的一帧数据 没有就返回nil (thisSdkDatas SdkDatas, cacheSdkDatas SdkDatas) |
| | | func Judge(args *SdkDatas) { |
| | | if len(args.Sdkdata) > 0 { |
| | | // 拿到本摄像机的区域 |
| | |
| | | ipcId := sdk.IpcId |
| | | if ipcId == sdkData.IpcId { |
| | | for _, areaMap := range sdkData.AreaMapList { |
| | | duration(groupRule.Rules[j], &areaMap) |
| | | duration(groupRule.Rules[j], &areaMap, args) |
| | | } |
| | | } |
| | | } |
| | |
| | | if result.(bool) { |
| | | logger.Info("___________________________________________________________________联动任务报警") |
| | | args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, "", groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, []Rect{}}) |
| | | logger.Info("-------------------yolo结果标签", args.RuleResult["yolo"].([]Result)) |
| | | logger.Info("-------------------yolo结果标签有几个", len(args.RuleResult["yolo"].([]Result))) |
| | | if args.RuleResult["face"] != nil { |
| | | logger.Info("-------------------face结果标签", args.RuleResult["face"].([]Arg)) |
| | | logger.Info("-------------------face结果标签有几个", len(args.RuleResult["face"].([]Arg))) |
| | | } |
| | | //os.Exit(0) |
| | | } |
| | |
| | | logger.Info("这帧图像在任务下的一整条规则下(联动任务下就是跟本摄像机像相关的小规则)的判断结果为false") |
| | | // 所以也要去结果数组里放值或更新 |
| | | for _, va := range timeEle.RuleResults { |
| | | if args.CameraId != "" && va.CameraId == args.CameraId { // arg.CameraId 随便找一个数据 |
| | | if args.CameraId != "" && va.CameraId == args.CameraId { |
| | | va.Result = strconv.FormatBool(isOk) |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | // 都过滤完条件之后看看是否要创建一个定时器元素 创建定时器的条件:是否有靠右行,个体静止等自带定时器含义的算法以及是否有持续时间 |
| | | func duration(rule *protomsg.Rule, am *AreaMap) { |
| | | func duration(rule *protomsg.Rule, am *AreaMap, args *SdkDatas) { |
| | | if rule.PolygonId == am.areaId { // 首先规则所对应的区域id要跟区域数据的id对的上 配置的算法要对的上 |
| | | if rule.SdkArgAlias == "duration" { // |
| | | // 先看看定时器元素队列中是否有这个摄像机这个区域的定时器,如果有就不能再次创建了 |
| | |
| | | |
| | | if flag { |
| | | timeLength, _ := strconv.Atoi(rule.SdkArgValue) |
| | | timeEle := TimeElement{N: timeLength, InitN: timeLength} // 扔进去一个定时器元素 |
| | | timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false, CacheSdkData: *args} // 扔进去一个定时器元素 |
| | | //TimeEleList = make(map[string]timeElement) |
| | | TimeEleList[am.taskId+" "+am.sdkId+" "+am.areaId] = &timeEle // 定时器元素以摄像机id拼接区域id为键 |
| | | logger.Info("创建了计数器并且计数器集合为:", TimeEleList) |