panlei
2019-06-29 1dc1fc91bb8188c57a9fdbc3138be7833ea1f112
ruleserver/ruleToformula.go
@@ -118,7 +118,7 @@
// 从算法模块儿拿来的对一帧图像各个算法提取的数据集合
type SdkDatas struct {
   CameraId   string
   Sdkdata    []SdkData
   Sdkdata    []*SdkData
   RuleResult map[string]interface{} // 过完规则后打的标签 face: []Arg  yolo: []Result
}
@@ -177,7 +177,7 @@
}
// 把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}
@@ -190,7 +190,7 @@
}
// 对单帧图像的判断 是舍弃(或者说对于某些需求可以放ES数据库一份)还是返回
func Judge(args SdkDatas) {
func Judge(args *SdkDatas) {
   if len(args.Sdkdata) > 0 {
      // 拿到本摄像机的区域
      cameraPolygons := GetPolygons(args.CameraId)
@@ -226,7 +226,7 @@
      }
   }
}
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++ {
@@ -315,7 +315,7 @@
            }
         }
         if flag {
            fmt.Println("本帧数据符合规则")
            fmt.Println("----------------------------终于走完万里长征")
            // 如果成功了我应该找到规则中涉及到的sdk,记录下他们的sdkname
            sdkName := ""
            for j := 0; j < len(groupRule.Rules); j++ {
@@ -327,6 +327,7 @@
            }
            // 过完规则后打个标签,告诉调用者本帧数据针对哪个任务哪组规则报警了     后加:可能还不够,还需要区分触发报警的对象,后面往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
@@ -348,7 +349,7 @@
}
// 计算区域内的目标数量以及将相似度、占比、尺寸等打包
func (a *AreaMap) CountAreaObjs(arg SdkData) {
func (a *AreaMap) CountAreaObjs(arg *SdkData) {
   a.targetNum = 0
   threshold := 0.0       // 相似度
@@ -417,7 +418,7 @@
}
// 联动任务的处理
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}