panlei
2019-07-17 bcebdcfdc1a41422bf1b6a35c5bfacfb22e5b420
加入人脸追踪[C
1个文件已添加
4个文件已修改
122 ■■■■■ 已修改文件
go.mod 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.sum 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.go 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruleserver/personTrack.go 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruleserver/readyDataForRule.go 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.mod
@@ -5,7 +5,7 @@
require (
    basic.com/dbapi.git v0.0.0-20190701055817-73bca225181f
    basic.com/pubsub/cache.git v0.0.0-20190712095028-e73efb4afc3b
    basic.com/pubsub/protomsg.git v0.0.0-20190712081201-5a482419c227
    basic.com/pubsub/protomsg.git v0.0.0-20190717072554-576620e5ba07
    basic.com/pubsub/sdkcompare.git v0.0.0-20190715013640-f536a4647d00
    basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051
    basic.com/valib/gopherdiscovery.git v0.0.0-20190605034340-15d89d8b4e28
go.sum
@@ -6,6 +6,8 @@
basic.com/pubsub/protomsg.git v0.0.0-20190709070734-b34c868adcc2/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
basic.com/pubsub/protomsg.git v0.0.0-20190712081201-5a482419c227 h1:1jprxyxmeQ8X4/S7cFnhRf4ByVqD0xLZNvx8/0xTk2k=
basic.com/pubsub/protomsg.git v0.0.0-20190712081201-5a482419c227/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
basic.com/pubsub/protomsg.git v0.0.0-20190717072554-576620e5ba07 h1:ZeiaQTNSB6K5ASpcwYtk0bWabMQX0r2JX/5agzTznRs=
basic.com/pubsub/protomsg.git v0.0.0-20190717072554-576620e5ba07/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
basic.com/pubsub/sdkcompare.git v0.0.0-20190715013640-f536a4647d00 h1:sK+Tx7rvM9J2WnNIwrzMDjZSylWiKNfQO0prUBfKsDk=
basic.com/pubsub/sdkcompare.git v0.0.0-20190715013640-f536a4647d00/go.mod h1:8by33F9E1w17Pw/rDgJGJXAo122w0wDENG14hiMS+RE=
basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051 h1:9flC2o3kasaM2Y6I+mY+mxmve/pyAY/UzGQZLT3lFHM=
main.go
@@ -105,6 +105,8 @@
    if err != nil {
        panic("解析msg时出现错误")
    }
    // 先进行一下追踪
    ruleserver.IsSame(&m)
    args.CameraId = m.Cid
    args.TaskId = m.Tasklab.Taskid
    // 把图片的二进制解压缩进行画框在压缩回去
@@ -140,7 +142,7 @@
                    logger.Info("解析YOLO sdk数据时出现错误", err)
                    continue
                }
                //logger.Info("--------------看看yolo中有几个目标:",len(yoloParam.Infos))
                logger.Info("--------------追踪之后yolo的个数:",len(yoloParam.Infos))
                for _, info := range yoloParam.Infos {
                    if info.Typ == 0 {
                        //logger.Debug("-------------yolo的坐标有几个",info.RcObj)
@@ -177,9 +179,9 @@
                    logger.Info("解析FACE sdk数据时出现错误", err)
                    continue
                }
                logger.Info("--------------看看人脸检测中有几个目标:",len(faceParam.Faces))
                logger.Info("--------------追踪之后yolo的个数:",len(faceParam.Faces))
                for _, info := range faceParam.Faces {
                    logger.Info("_______________________________________________第一次看相似值:",info.Pos.FAngle.Confidence*100)
                    //logger.Info("_______________________________________________第一次看相似值:",info.Pos.FAngle.Confidence*100)
                    photoMap := ruleserver.PhotoMap{Rects: rectFormat(info.Pos.RcFace), Score: float64(info.Pos.FAngle.Confidence*100), IsYolo:false,ThftRes:*(info.Result),Feature:info.Feats}
                    arg.Photo = append(arg.Photo, photoMap)
                }
ruleserver/personTrack.go
New file
@@ -0,0 +1,94 @@
package ruleserver
import (
    "basic.com/pubsub/protomsg.git"
    "github.com/golang/protobuf/proto"
    "ruleprocess/logger"
)
var TrackPond = make(map[string]*PersonTrack)
type PersonTrack struct {
    Face int // 人脸的id数组  改为数量
    Yolo int // yolo对象的id数组 改为数量
}
func (pt *PersonTrack) Set(msg protomsg.SdkMessage) {
}
// 检查是否前后两次的数据id是否完全相同(人脸和yolo)
func IsSame(msg *protomsg.SdkMessage) {
    logger.Debug("++++++++++++++++++++++++++++追踪开始++++++++++++++++++++++++")
    for _, sdkinfo := range msg.Tasklab.Sdkinfos { // 遍历各算法的sdkData
        if sdkinfo.Sdktype == "FaceDetect" { // 人脸检测
            if len(sdkinfo.Sdkdata) > 1 {
                faceParam := protomsg.ParamFacePos{}
                err := proto.Unmarshal(sdkinfo.Sdkdata, &faceParam)
                if err != nil {
                    logger.Info("解析face sdk数据时出现错误", err)
                    continue
                }
                logger.Info("================追踪之前人脸的个数:",len(faceParam.Faces))
                if len(faceParam.Faces) == TrackPond[msg.Cid].Yolo { // yolo的如果数量相同则视为不变、把yolo的sdkData清空
                    faceParam.Faces = (faceParam.Faces)[0:0]
                } else {
                    TrackPond[msg.Cid].Face = len(faceParam.Faces)
                }
                //for i := 0;  i < len(faceParam.Faces); {
                //    if flag := IsInPond(msg.Cid,faceParam.Faces[i]);flag { // 已经存在,从msg的人脸数组中删除这个元素,不必传到下一个环节
                //        faceParam.Faces = append(faceParam.Faces[:i], faceParam.Faces[i+1:]...)
                //    } else {
                //        i++
                //    }
                //}
            } else {
                continue
            }
        }
        if sdkinfo.Sdktype == "Yolo" {
            if len(sdkinfo.Sdkdata) > 1 {
                yoloParam := protomsg.ParamYoloObj{}
                err := proto.Unmarshal(sdkinfo.Sdkdata, &yoloParam)
                if err != nil {
                    logger.Info("解析yolo数据时出现错误", err)
                    continue
                }
                logger.Info("================追踪之前yolo的个数:",len(yoloParam.Infos))
                if len(yoloParam.Infos) == TrackPond[msg.Cid].Yolo { // yolo的如果数量相同则视为不变、把yolo的sdkData清空
                    yoloParam.Infos = (yoloParam.Infos)[0:0]
                } else {
                    TrackPond[msg.Cid].Yolo = len(yoloParam.Infos)
                }
            } else {
                continue
            }
        }
    }
    logger.Debug("---------------------------------------追踪结束--------------------------------------")
}
//// 判断一个人脸id在不在追踪池中
//func FaceIsInPond(cameraId string,face *protomsg.ResultFaceDetect) bool{
//    if TrackPond[cameraId].Face > 0 {
//        for key,val := range TrackPond  {
//            if key == cameraId {
//                faceFlag := false
//                for faceId := range val.Face  {
//                    if face.Pos.FaceID == uint64(faceId) { // 此人脸已在池子中,不需要它到下一个环节了
//                        faceFlag = true
//                        return true
//                    }
//                }
//                if !faceFlag { // 此人脸不在池子中
//                    val.Face = append(val.Face,face.Pos.FaceID)
//                    return false
//                }
//            }else {
//                return false
//            }
//        }
//    } else {
//        return false
//    }
//    return false
//}
ruleserver/readyDataForRule.go
@@ -132,13 +132,15 @@
    }
    logger.Info("------------------------------------------------------------------------------------------------------------------------")
    logger.Info("=====================人员id的集合为:",ids)
    baseinfos, err1 := esutil.Dbpersoninfosbyid(ids)
    if err1 != nil {
        logger.Error("查询底库人员信息出错", err1)
    }
    logger.Debug("----------------++++++++++++++++++++底库人员信息:",baseinfos)
    for _,baseinfo := range baseinfos  {
        logger.Info("---------看看每个底库人员的信息:",baseinfo)
    if len(ids) > 0 {
        baseinfos, err1 := esutil.Dbpersoninfosbyid(ids)
        if err1 != nil {
            logger.Error("查询底库人员信息出错", err1)
        }
        logger.Debug("----------------++++++++++++++++++++底库人员信息:",baseinfos)
        for _,baseinfo := range baseinfos  {
            logger.Info("---------看看每个底库人员的信息:",baseinfo)
        }
    }
    //baseinfo.CompareScore = Retain(val)
    //arg.Liker = append(arg.Liker, &baseinfo)