| | |
| | | // 从算法模块儿拿来的对一帧图像各个算法提取的数据集合 |
| | | type SdkDatas struct { |
| | | CameraId string |
| | | Sdkdata []SdkData |
| | | Sdkdata []*SdkData |
| | | RuleResult map[string]interface{} // 过完规则后打的标签 face: []Arg yolo: []Result |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | // 对单帧图像的判断 是舍弃(或者说对于某些需求可以放ES数据库一份)还是返回 |
| | | func Judge(args SdkDatas) { |
| | | func Judge(args *SdkDatas) { |
| | | if len(args.Sdkdata) > 0 { |
| | | // 拿到本摄像机的区域 |
| | | cameraPolygons := GetPolygons(args.CameraId) |
| | | // 把所有的sdk提取的数据都按所属摄像机的区域归置 |
| | | for _, arg := range args.Sdkdata { |
| | | SdkDataFormat(args.CameraId, &arg, cameraPolygons) |
| | | SdkDataFormat(args.CameraId, arg, cameraPolygons) |
| | | } |
| | | // 跑本摄像机的所有规则组 一组一组跑 |
| | | taskRuleList := GetRuleGroup(args.CameraId) // 本摄像机下所有任务组 |
| | |
| | | } |
| | | } |
| | | } |
| | | func RunRule(args SdkDatas, groupRule *protomsg.GroupRule, taskId string) bool { |
| | | func RunRule(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string) bool { |
| | | resultSplice := []*LittleRuleResult{} |
| | | // 先过完条件规则 |
| | | for j := 0; j < len(groupRule.Rules); j++ { |
| | |
| | | } |
| | | } |
| | | if flag { |
| | | fmt.Println("本帧数据符合规则") |
| | | fmt.Println("----------------------------终于走完万里长征") |
| | | // 如果成功了我应该找到规则中涉及到的sdk,记录下他们的sdkname |
| | | sdkName := "" |
| | | for j := 0; j < len(groupRule.Rules); j++ { |
| | |
| | | } |
| | | // 过完规则后打个标签,告诉调用者本帧数据针对哪个任务哪组规则报警了 后加:可能还不够,还需要区分触发报警的对象,后面往es数据库插数据时要用 |
| | | args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText}) |
| | | log.Println("-------------------结果标签",args.RuleResult["yolo"].([]Result)) |
| | | return true |
| | | } else { |
| | | return false |
| | |
| | | } |
| | | |
| | | // 联动任务的处理 |
| | | func linkTask(args SdkDatas, groupRule *protomsg.GroupRule, taskId string) { |
| | | func linkTask(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string) { |
| | | // new一个定时器,如果以此groupId为标志的定时器不存在的话 |
| | | var flag bool = true |
| | | var timeEle = TimeElement{N: 3, InitN: 3, GroupId: groupRule.GroupId} |