| | |
| | | Location Rect // 记下每个目标的位置参数,最后给结果装配人脸数据的时候用的到 |
| | | SdkName string |
| | | ThftRes protomsg.ThftResult |
| | | Liker []LikePerson |
| | | Liker []*protomsg.Baseinfo |
| | | } |
| | | |
| | | type LikePerson struct { |
| | |
| | | IsYolo bool // 是否是yolo数据 |
| | | SdkName string |
| | | ThftRes protomsg.ThftResult |
| | | Liker []LikePerson // 如果是人脸的话尤其是比对,应存下他跟底库的人员的相似情况 yolo的话给nil就行 |
| | | Liker []*protomsg.Baseinfo // 如果是人脸的话尤其是比对,应存下他跟底库的人员的相似情况 yolo的话给nil就行 |
| | | } |
| | | |
| | | // 每个算法对于当前帧画面自己提取的数据 |
| | |
| | | } |
| | | |
| | | // 对单帧图像的判断 是舍弃(或者说对于某些需求可以放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++ { |
| | |
| | | } |
| | | |
| | | // 联动任务的处理 |
| | | 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} |
| | |
| | | for _, obj := range am.filterData { |
| | | for index := 0; index < len(obj.Liker); { |
| | | // 将达不到阈值的相似者从相似者数组中删除 |
| | | if obj.Liker[index].Score < argValue { |
| | | if float64(obj.Liker[index].CompareScore) < argValue { |
| | | // Go 语言中切片删除元素的本质是:以被删除元素为分界点,将前后两个部分的内存重新连接起来。不用怀疑,数组删除元素就这么坑爹 |
| | | obj.Liker = append(obj.Liker[:index], obj.Liker[index+1:]...) |
| | | } else { |
| | |
| | | } |
| | | } else { |
| | | // 处理的都是yolo数据 |
| | | log.Println("规则中的sdkId为:", rule.SdkId, "--区域数据集合中的sdkId为:", am.sdkId, "--规则中的区域Id为:", rule.PolygonId, "--区域数据集合中的区域Id为:", am.areaId, ) |
| | | if rule.SdkId == am.sdkId && rule.PolygonId == am.areaId { // 首先这条规则得是这个算法的规则,其次规则所对应的区域id要跟区域数据的id对的上 |
| | | if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 判断的是相似值,占比,尺寸等过滤条件,如果再有,还可以再加 |
| | | var args []Arg |