| | |
| | | // 从算法模块儿拿来的对一帧图像各个算法提取的数据集合 |
| | | type SdkDatas struct { |
| | | CameraId string |
| | | Sdkdata []SdkData |
| | | Sdkdata []*SdkData |
| | | RuleResult map[string]interface{} // 过完规则后打的标签 face: []Arg yolo: []Result |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | // 把sdk从数据帧上提取的按照区域分类归置 |
| | | func SdkDataFormat(cameraId string, arg SdkData, cameraPolygons []protomsg.CameraPolygon) { |
| | | func SdkDataFormat(cameraId string, arg *SdkData, cameraPolygons []protomsg.CameraPolygon) { |
| | | for _, polygon := range cameraPolygons { |
| | | //log.Println("++++++在这儿看一下区域啊", polygon) |
| | | areaMap := AreaMap{cameraId: cameraId, areaId: polygon.Id, areaJson: polygon.Polygon, triggerLine: polygon.TriggerLine, directionLine: polygon.DirectionLine} |
| | |
| | | } |
| | | |
| | | // 对单帧图像的判断 是舍弃(或者说对于某些需求可以放ES数据库一份)还是返回 |
| | | func Judge(args SdkDatas) { |
| | | func Judge(args *SdkDatas) { |
| | | if len(args.Sdkdata) > 0 { |
| | | // 拿到本摄像机的区域 |
| | | cameraPolygons := GetPolygons(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 (a *AreaMap) CountAreaObjs(arg SdkData) { |
| | | func (a *AreaMap) CountAreaObjs(arg *SdkData) { |
| | | |
| | | a.targetNum = 0 |
| | | threshold := 0.0 // 相似度 |
| | |
| | | } |
| | | |
| | | // 联动任务的处理 |
| | | 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} |