panlei
2019-07-29 c0324c6499ffb591ed78aaaa3639b57ddd4ea15f
调整人体追踪
3个文件已修改
107 ■■■■ 已修改文件
insertdata/insertDataToEs.go 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.go 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruleserver/personTrack.go 102 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
insertdata/insertDataToEs.go
@@ -120,12 +120,12 @@
    logger.Debug("插入数据前看看报警标志位:", timeLabel)
    if timeLabel == "01" { // 无定时器状态要插入的报警数据
        InsertFace(msg)
        ruleserver.BodyIsSame(msg.SdkMessage)
        InsertYolo(msg)
    }
    if timeLabel == "10" { // 定时器状态要插入的首帧报警数据。连带着定时器开启时的那帧
        InsertFace(msg)
        InsertYolo(msg)
    }
    //if timeLabel == "12" { // 并非报警数据,只是状态改变的数据
    //    //ChangeStatusFace(msg)
main.go
@@ -74,7 +74,6 @@
                // 把arg里的打的标签拿出来给m再封装一层
                resultMag := ruleserver.ResultMsg{SdkMessage: &m, RuleResult: arg.RuleResult}
                //logger.Info("打完标签后的结果:",resultMag)
                // 将打完标签的数据插入到ES
                insertdata.InsertToEs(resultMag)
            }
@@ -108,7 +107,7 @@
        panic("解析msg时出现错误")
    }
    // 先进行一下追踪
    ruleserver.IsSame(&m)
    ruleserver.FaceIsSame(&m)
    args.CameraId = m.Cid
    args.TaskId = m.Tasklab.Taskid
    // 把图片的二进制解压缩进行画框在压缩回去
ruleserver/personTrack.go
@@ -18,8 +18,8 @@
}
var num int = 5
// 检查是否前后两次的数据id是否完全相同(人脸和yolo)     改为直接检查数量是否一致
func IsSame(msg *protomsg.SdkMessage) {
// 检查是否前后两次的数据id是否完全相同(人脸)
func FaceIsSame(msg *protomsg.SdkMessage) {
    logger.Debug("+++++++++++++++++++++追踪开始+++++++++++++++摄像机id为:", msg.Cid, "---缓存池为:", TrackPond)
    for _, sdkinfo := range msg.Tasklab.Sdkinfos { // 遍历各算法的sdkData
        if sdkinfo.Sdktype == "FaceDetect" { // 人脸检测
@@ -44,51 +44,59 @@
                }
            }
        }
        //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
        //                }
        //                var yoloNum int = 0
        //                for i := 0; i < len(yoloParam.Infos); i++ {
        //                    if yoloParam.Infos[i].Typ == 0 {
        //                        yoloNum++
        //                    }
        //                }
        //                if TrackPond[msg.Cid] != nil {
        //                    logger.Info("================追踪之前yolo的个数:", yoloNum, "现在缓存池中记录的个数:", TrackPond[msg.Cid].Yolo)
        //                } else {
        //                    logger.Info("================追踪之前yolo的个数:", yoloNum, "还没有这个摄像机的缓存")
        //                }
        //                if yoloParam.Infos != nil && TrackPond[msg.Cid] != nil && yoloNum == TrackPond[msg.Cid].Yolo { // yolo的如果数量相同则视为不变、把yolo的sdkData清空
        //                    yoloParam.Infos = (yoloParam.Infos)[0:0]
        //                    sdkinfo.Sdkdata, err = proto.Marshal(&yoloParam)
        //                    if err != nil {
        //                        logger.Error("yolo序列化错误", err)
        //                    }
        //                    logger.Info("跟之前相同,清空yolo数据")
        //                } else {
        //                    if TrackPond[msg.Cid] != nil {
        //                        logger.Info("更新当前摄像机缓存池中的yolo个数:", yoloNum)
        //                        TrackPond[msg.Cid].Yolo = yoloNum
        //                    } else {
        //                        logger.Info("新建当前摄像机缓存池中的yolo个数:", yoloNum)
        //                        TrackPond[msg.Cid] = &PersonTrack{Yolo: yoloNum}
        //                    }
        //                }
        //            } else {
        //                if TrackPond[msg.Cid] != nil {
        //                    TrackPond[msg.Cid].Yolo = 0
        //                } else {
        //                    TrackPond[msg.Cid] = &PersonTrack{Yolo: 0}
        //                }
        //                logger.Info("摄像机:" + msg.Cid + "-没有yolo,被重置为0")
        //                continue
        //    }
        //}
    }
    logger.Debug("---------------------------------------人脸追踪结束--------------------------------------")
}
//  追踪人体,检查数量是否一致
func BodyIsSame(msg *protomsg.SdkMessage) {
    logger.Debug("+++++++++++++++++++++追踪开始+++++++++++++++摄像机id为:", msg.Cid, "---缓存池为:", TrackPond)
    for _, sdkinfo := range msg.Tasklab.Sdkinfos { // 遍历各算法的sdkData
        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
                        }
                        var yoloNum int = 0
                        for i := 0; i < len(yoloParam.Infos); i++ {
                            if yoloParam.Infos[i].Typ == 0 {
                                yoloNum++
                            }
                        }
                        if TrackPond[msg.Cid] != nil {
                            logger.Info("================追踪之前yolo的个数:", yoloNum, "现在缓存池中记录的个数:", TrackPond[msg.Cid].Yolo)
                        } else {
                            logger.Info("================追踪之前yolo的个数:", yoloNum, "还没有这个摄像机的缓存")
                        }
                        if yoloParam.Infos != nil && TrackPond[msg.Cid] != nil && yoloNum == TrackPond[msg.Cid].Yolo { // yolo的如果数量相同则视为不变、把yolo的sdkData清空
                            yoloParam.Infos = (yoloParam.Infos)[0:0]
                            sdkinfo.Sdkdata, err = proto.Marshal(&yoloParam)
                            if err != nil {
                                logger.Error("yolo序列化错误", err)
                            }
                            logger.Info("跟之前相同,清空yolo数据")
                        } else {
                            if TrackPond[msg.Cid] != nil {
                                logger.Info("更新当前摄像机缓存池中的yolo个数:", yoloNum)
                                TrackPond[msg.Cid].Yolo = yoloNum
                            } else {
                                logger.Info("新建当前摄像机缓存池中的yolo个数:", yoloNum)
                                TrackPond[msg.Cid] = &PersonTrack{Yolo: yoloNum}
                            }
                        }
                    } else {
                        if TrackPond[msg.Cid] != nil {
                            TrackPond[msg.Cid].Yolo = 0
                        } else {
                            TrackPond[msg.Cid] = &PersonTrack{Yolo: 0}
                        }
                        logger.Info("摄像机:" + msg.Cid + "-没有yolo,被重置为0")
                        continue
            }
        }
    }
    logger.Debug("---------------------------------------追踪结束--------------------------------------")
}