main.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruleserver/ruleToformula.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruleserver/timeTicker.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
main.go
@@ -44,11 +44,6 @@ go ruleserver.TimeTicker() nReciever("ipc:///tmp/sdk-2-rules-process.ipc", deliver.PushPull, 1) wg.Wait() //resp,err := DrawPolygonOnImage() //if err != nil { // logger.Println("画框或者上传有问题") //} //logger.Println(resp["fileUrl"].(string)) } func nReciever(url string, m deliver.Mode, count int) { c := deliver.NewServer(m, url) ruleserver/ruleToformula.go
@@ -197,7 +197,7 @@ } } // 对单帧图像的判断 是舍弃(或者说对于某些需求可以放ES数据库一份)还是返回 // 对单帧图像的判断 thisSdkDatas 当前传入的这帧数据,cacheSdkData 定时器里缓存的一帧数据 没有就返回nil (thisSdkDatas SdkDatas, cacheSdkDatas SdkDatas) func Judge(args *SdkDatas) { if len(args.Sdkdata) > 0 { // 拿到本摄像机的区域 @@ -404,7 +404,7 @@ ipcId := sdk.IpcId if ipcId == sdkData.IpcId { for _, areaMap := range sdkData.AreaMapList { duration(groupRule.Rules[j], &areaMap) duration(groupRule.Rules[j], &areaMap, args) } } } @@ -661,9 +661,9 @@ 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) } @@ -675,7 +675,7 @@ 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) } } @@ -824,7 +824,7 @@ } // 都过滤完条件之后看看是否要创建一个定时器元素 创建定时器的条件:是否有靠右行,个体静止等自带定时器含义的算法以及是否有持续时间 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" { // // 先看看定时器元素队列中是否有这个摄像机这个区域的定时器,如果有就不能再次创建了 @@ -838,7 +838,7 @@ 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) ruleserver/timeTicker.go
@@ -13,13 +13,15 @@ // 定时器元素 type TimeElement struct { N int // 按时间依次递减的当前值 InitN int // 赋值后就不变的初始值 Data AreaMap // GroupId string // 联动规则需要记录下此时的规则组id RuleResults []*RuleResult N int // 按时间依次递减的当前值 InitN int // 赋值后就不变的初始值 AlarmFlag bool // 报警标志位 定时器开启后第一次报警时会被置为true 往后再来报警也不会插进ES CacheSdkData SdkDatas // 定时器的缓存数据 持续时间类的开启定时器时要缓存一帧 GroupId string // 联动规则需要记录下此时的规则组id RuleResults []*RuleResult } type RuleResult struct { // 每个摄像机一个结构体 type RuleResult struct { // 每个摄像机一个结构体 CameraId string // 摄像机id Sort int32 // 摄像机在规则组中序号 Result string // 摄像机过滤数据得出的结果 @@ -35,13 +37,17 @@ for { select { case <-ticker.C: logger.Info("定时器执行单元",time.Now().Unix()) fmt.Println("定时器执行单元",time.Now().Unix()) logger.Info("定时器执行单元", time.Now().Unix()) fmt.Println("定时器执行单元", time.Now().Unix()) // 每秒钟计数器池子里所有的计数器元素都减一,减到0的是该报警的 for _, timeEle := range TimeEleList { for k, timeEle := range TimeEleList { if timeEle.N > 0 { timeEle.N = timeEle.N - 1 logger.Info("-------------------------------------打印定时器元素当前值-----------------------------------------:",timeEle.N) logger.Info("-------------------------------------打印定时器元素当前值-----------------------------------------:", timeEle.N) } if timeEle.GroupId != "" && timeEle.N == 0{ // 说明是联动任务的时间窗口 到点儿了该销毁了,再来了再开启 delete(TimeEleList,k) } } case stop := <-stopChan: @@ -102,4 +108,3 @@ func (p resultList) Swap(i, j int) { p[i], p[j] = p[j], p[i] } func (p resultList) Len() int { return len(p) } func (p resultList) Less(i, j int) bool { return p[i].Sort < p[j].Sort }