| | |
| | | if err != nil { |
| | | log.Println("es can not execute right.") |
| | | } |
| | | }else { |
| | | log.Println("跟底库的相似数据---------:",face.Liker) |
| | | } |
| | | } |
| | | } |
| | |
| | | continue |
| | | } |
| | | } |
| | | //if sdkinfo.Sdktype == "FaceExtract" { // 人脸提取 |
| | | |
| | | //} |
| | | if sdkinfo.Sdktype == "FaceExtract" { // 人脸提取 |
| | | arg := ruleserver.SdkData{} |
| | | arg.TaskId = m.Tasklab.Taskid |
| | | arg.SdkId = sdkinfo.Sdkid |
| | | arg.SdkName = sdkinfo.SdkName |
| | | arg.IsYolo = false |
| | | bdata, err := util.UnCompress(m.Data) |
| | | if err != nil { |
| | | panic("解压缩图片时出现错误") |
| | | } |
| | | i := protomsg.Image{} |
| | | err = proto.Unmarshal(bdata, &i) |
| | | arg.ImageWidth = int(i.Width) |
| | | arg.ImageHeight = int(i.Height) |
| | | // 暂时写死,sdk还没有这俩算法 |
| | | arg.KeepRight = false |
| | | arg.IsStatic = false |
| | | if len(sdkinfo.Sdkdata) > 1 { |
| | | fmt.Println("----------------------------------------------------",m.Caddr) |
| | | faceParam := protomsg.ParamFaceFeature{} |
| | | err = proto.Unmarshal(sdkinfo.Sdkdata, &faceParam) |
| | | if err != nil { |
| | | fmt.Println("解析FACE sdk数据时出现错误", err) |
| | | continue |
| | | } |
| | | for _, extComp := range faceParam.ExtComp { |
| | | baseinfos := protomsg.Binfos{} |
| | | err1 := proto.Unmarshal(extComp.Comp, &baseinfos) |
| | | if err1 != nil { |
| | | fmt.Println("解析FACE sdk数据时出现错误", err) |
| | | continue |
| | | } |
| | | photoMap := ruleserver.PhotoMap{Rects: rectFormat(extComp.Pos.Pos.RcFace), Score: float64(extComp.Pos.Pos.Quality)*100, IsYolo:false,ThftRes:*(extComp.Pos.Result),Liker:baseinfos.Infos} |
| | | arg.Photo = append(arg.Photo, photoMap) |
| | | } |
| | | args.Sdkdata = append(args.Sdkdata,&arg) |
| | | } else { |
| | | continue |
| | | } |
| | | } |
| | | |
| | | } |
| | | return m |
| | |
| | | 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就行 |
| | | } |
| | | |
| | | // 每个算法对于当前帧画面自己提取的数据 |
| | |
| | | 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 |
| | |
| | | defer atom.Close() |
| | | |
| | | rook := gocv.NewMatWithSize(w, w, gocv.MatTypeCV8UC3) |
| | | gocv.NewMatW |
| | | defer rook.Close() |
| | | |
| | | black := color.RGBA{0, 0, 0, 0} |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | func DrawPolygon(){ |
| | | // draw the rook |
| | | points := [][]image.Point{ |
| | | { |
| | | image.Pt(w/4., 7*w/8.), |
| | | image.Pt(3*w/4., 7*w/8.), |
| | | image.Pt(3*w/4., 13*w/16.), |
| | | image.Pt(11*w/16., 13*w/16.), |
| | | image.Pt(19*w/32., 3*w/8.), |
| | | image.Pt(3*w/4., 3*w/8.), |
| | | image.Pt(3*w/4., w/8.), |
| | | image.Pt(26*w/40., w/8.), |
| | | image.Pt(26*w/40., w/4.), |
| | | image.Pt(22*w/40., w/4.), |
| | | image.Pt(22*w/40., w/8.), |
| | | image.Pt(18*w/40., w/8.), |
| | | image.Pt(18*w/40., w/4.), |
| | | image.Pt(14*w/40., w/4.), |
| | | image.Pt(14*w/40., w/8.), |
| | | image.Pt(w/4., w/8.), |
| | | image.Pt(w/4., 3*w/8.), |
| | | image.Pt(13*w/32., 3*w/8.), |
| | | image.Pt(5*w/16., 13*w/16.), |
| | | image.Pt(w/4., 13*w/16.), |
| | | }, |
| | | } |
| | | gocv.FillPoly(&rook, points, white) |
| | | } |