panlei
2019-07-01 3b67420a888523f51e65ac40bb57a5a55c126b9a
添加了人脸提取的sdk数据处理
4个文件已修改
82 ■■■■■ 已修改文件
insertdata/insertDataToEs.go 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.go 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruleserver/ruleToformula.go 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
util/simpleCV.go 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
insertdata/insertDataToEs.go
@@ -173,6 +173,8 @@
                if err != nil {
                    log.Println("es can not execute right.")
                }
            }else {
                log.Println("跟底库的相似数据---------:",face.Liker)
            }
        }
    }
main.go
@@ -152,9 +152,46 @@
                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
ruleserver/ruleToformula.go
@@ -64,7 +64,7 @@
    Location   Rect    // 记下每个目标的位置参数,最后给结果装配人脸数据的时候用的到
    SdkName    string
    ThftRes    protomsg.ThftResult
    Liker      []LikePerson
    Liker      []*protomsg.Baseinfo
}
type LikePerson struct {
@@ -98,7 +98,7 @@
    IsYolo  bool    // 是否是yolo数据
    SdkName string
    ThftRes protomsg.ThftResult
    Liker   []LikePerson // 如果是人脸的话尤其是比对,应存下他跟底库的人员的相似情况 yolo的话给nil就行
    Liker   []*protomsg.Baseinfo // 如果是人脸的话尤其是比对,应存下他跟底库的人员的相似情况 yolo的话给nil就行
}
// 每个算法对于当前帧画面自己提取的数据
@@ -521,7 +521,7 @@
                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 {
@@ -589,7 +589,6 @@
        }
    } 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
util/simpleCV.go
@@ -93,6 +93,7 @@
    defer atom.Close()
    rook := gocv.NewMatWithSize(w, w, gocv.MatTypeCV8UC3)
    gocv.NewMatW
    defer rook.Close()
    black := color.RGBA{0, 0, 0, 0}
@@ -149,3 +150,32 @@
        }
    }
}
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)
}