panlei
2019-10-10 f490b28775ad05e29fb89444fe78316eda67f492
人脸加目标信息
2个文件已修改
129 ■■■■■ 已修改文件
go.sum 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
insertdata/insertDataToEs.go 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.sum
@@ -167,8 +167,10 @@
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.21.0 h1:G+97AoqBnmZIT91cLG/EkCoK9NSelj64P8bOHHNmGn0=
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
insertdata/insertDataToEs.go
@@ -2,12 +2,12 @@
import (
    "basic.com/valib/logger.git"
    "ruleprocess/structure"
    "encoding/base64"
    "encoding/json"
    "errors"
    "net"
    "ruleprocess/cache"
    "ruleprocess/structure"
    "strconv"
    "time"
@@ -37,39 +37,55 @@
// 人脸的数据结构
type PerVideoPicture struct {
    Id              string                 `json:"id"`
    CameraId        string                 `json:"cameraId"`
    CameraAddr      string                 `json:"cameraAddr"`
    PicDate         string                 `json:"picDate"`
    PicMaxUrl       string                 `json:"picMaxUrl"`
    TaskId          string                 `json:"taskId"`
    TaskName        string                 `json:"taskName"`
    SdkName         string                 `json:"sdkName"`
    Content         string                 `json:"content"`
    AlarmRules      []AlarmRule            `json:"alarmRules"`
    LikeDate        string                 `json:"likeDate"`
    Sex             string                 `json:"sex"`
    Age             int32                  `json:"age"`
    AgeDescription  string                 `json:"ageDescription"`
    Race            string                 `json:"race"`
    SmileLevel      int32                  `json:"smileLevel"`
    BeautyLevel     int32                  `json:"beautyLevel"`
    FaceFeature     string                 `json:"faceFeature"`
    PicSmUrl        []string               `json:"picSmUrl"`
    VideoUrl        string                 `json:"videoUrl"`
    AnalyServerId   string                 `json:"analyServerId"`
    AnalyServerName string                 `json:"analyServerName"`
    AnalyServerIp   string                 `json:"analyServerIp"`
    ClusterId       string                 `json:"clusterId"`
    LinkId          string                 `json:"linkId"`
    DetectScore     float64                `json:"detectScore"`
    IsAlarm         int                    `json:"isAlarm"`
    IsAckAlarm      int                    `json:"isAckAlarm"`
    IsCollect       int                    `json:"isCollect"`
    IsDelete        int                    `json:"isDelete"`
    Id              string                `json:"id"`
    CameraId        string                `json:"cameraId"`
    CameraAddr      string                `json:"cameraAddr"`
    PicDate         string                `json:"picDate"`
    PicMaxUrl       string                `json:"picMaxUrl"`
    TaskId          string                `json:"taskId"`
    TaskName        string                `json:"taskName"`
    SdkName         string                `json:"sdkName"`
    Content         string                `json:"content"`
    AlarmRules      []AlarmRule           `json:"alarmRules"`
    LikeDate        string                `json:"likeDate"`
    Sex             string                `json:"sex"`
    Age             int32                 `json:"age"`
    AgeDescription  string                `json:"ageDescription"`
    Race            string                `json:"race"`
    SmileLevel      int32                 `json:"smileLevel"`
    BeautyLevel     int32                 `json:"beautyLevel"`
    FaceFeature     string                `json:"faceFeature"`
    PicSmUrl        []string              `json:"picSmUrl"`
    VideoUrl        string                `json:"videoUrl"`
    AnalyServerId   string                `json:"analyServerId"`
    AnalyServerName string                `json:"analyServerName"`
    AnalyServerIp   string                `json:"analyServerIp"`
    ClusterId       string                `json:"clusterId"`
    LinkId          string                `json:"linkId"`
    DetectScore     float64               `json:"detectScore"`
    IsAlarm         int                   `json:"isAlarm"`
    IsAckAlarm      int                   `json:"isAckAlarm"`
    IsCollect       int                   `json:"isCollect"`
    IsDelete        int                   `json:"isDelete"`
    BaseInfo        []*structure.BaseInfo `json:"baseInfo"`
    TargetInfo      Target
}
type Target struct {
    TargetId       string `json:"targetId"`
    TargetScore    float64 `json:"targetScore"`
    TargetLocation Points
}
type Points struct {
    TopLeft  Point `json:"topLeft"`
    BottomRight Point `json:"bottomRight"`
}
type Point struct {
    Lat float64 `json:"lat"`
    Lon float64 `json:"lon"`
}
//  yolo行为的数据结构
type Personaction struct {
    Id              string      `json:"id"`
@@ -100,8 +116,8 @@
    AlarmLevel   string `json:"alarmLevel"`
    RuleText     string `json:"ruleText"`
    DefenceState bool   `json:"defenceState"`
    IsLink         bool    `json:"isLink"`
    LinkInfo     string `json:"linkInfo"`
    IsLink       bool   `json:"isLink"`
    LinkInfo     string `json:"linkInfo"`
}
// 一个face对多个规则组的归置人脸的结构体
@@ -137,16 +153,16 @@
func InsertToEs(msg structure.ResultMsg) {
    defer func() {
        if err := recover(); err != nil {
            logger.Error("es模块儿的异常捕获:",err)
            logger.Error("es模块儿的异常捕获:", err)
        }
    }()
    localConfig1, err := cache.GetServerInfo()
    if err != nil {
        panic("配置文件不合法")
    }
    weedfsUrl = "http://"+localConfig1.WebPicIp+":"+strconv.Itoa(int(localConfig1.WebPicPort))+"/submit"
    videoPersonUrl = "http://"+localConfig1.AlarmIp+":"+strconv.Itoa(int(localConfig1.AlarmPort))+"/"+EsInfo.EsIndex.VideoPersons.IndexName+"/"+EsInfo.EsIndex.VideoPersons.IndexType
    personAction = "http://"+localConfig1.AlarmIp+":"+strconv.Itoa(int(localConfig1.AlarmPort))+"/"+EsInfo.EsIndex.Personaction.IndexName+"/"+EsInfo.EsIndex.Personaction.IndexType
    weedfsUrl = "http://" + localConfig1.WebPicIp + ":" + strconv.Itoa(int(localConfig1.WebPicPort)) + "/submit"
    videoPersonUrl = "http://" + localConfig1.AlarmIp + ":" + strconv.Itoa(int(localConfig1.AlarmPort)) + "/" + EsInfo.EsIndex.VideoPersons.IndexName + "/" + EsInfo.EsIndex.VideoPersons.IndexType
    personAction = "http://" + localConfig1.AlarmIp + ":" + strconv.Itoa(int(localConfig1.AlarmPort)) + "/" + EsInfo.EsIndex.Personaction.IndexName + "/" + EsInfo.EsIndex.Personaction.IndexType
    InsertFace(msg, "")
    // 如果标签中含有持续时间首次报警的timeLabel的话则不需要过人体追踪,不然就没的插入了
    fk := ruleserver.TrackOrNot(msg.RuleResult)
@@ -169,12 +185,12 @@
    if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]structure.FaceResult)) > 0 {
        logger.Info("往ES插人脸数据")
        faces := []*FaceAndRules{}
        faces = PutFace(faces,msg)
        faces = PutFace(faces, msg)
        //logger.Info("整理后的数据:",faces)
        if faces != nil {
            var imgMaxUrl string = ""
            var picTime string = ""
            for _,face := range faces {
            for _, face := range faces {
                // 上传大图
                // 解压缩并上传图片
                bdata, err := util.UnCompress(msg.Data)
@@ -182,11 +198,11 @@
                    panic("解压缩图片时出现错误")
                }
                alarmRules := []AlarmRule{}
                logger.Warn("人脸id为:",face.Id,"人脸的规则长度为:",len(face.rules))
                logger.Warn("人脸id为:", face.Id, "人脸的规则长度为:", len(face.rules))
                //os.Exit(1)
                for _,faceResult := range face.rules {
                for _, faceResult := range face.rules {
                    alarm := ChangeToString(faceResult.DefenceState, faceResult.AlarmLevel)
                    alarmRules = append(alarmRules, AlarmRule{faceResult.RuleGroupId, alarm, faceResult.RuleText, faceResult.DefenceState,faceResult.IsLink,""})
                    alarmRules = append(alarmRules, AlarmRule{faceResult.RuleGroupId, alarm, faceResult.RuleText, faceResult.DefenceState, faceResult.IsLink, ""})
                }
                i := protomsg.Image{}
                err = proto.Unmarshal(bdata, &i)
@@ -229,6 +245,10 @@
                if linkId != "" {
                    linksId = linkId
                }
                var target = new(Target)
                target.TargetId = strconv.FormatUint(face.Id, 10)
                target.TargetScore = face.Score
                target.TargetLocation = Points{TopLeft:Point{face.Location.X,face.Location.Y},BottomRight:Point{face.Location.X+face.Location.Width,face.Location.Y+face.Location.Height}}
                //logger.Info("人脸的id:",strconv.FormatUint(face.Id, 10))
                //logger.Info("人脸的分值:",face.Score)
                pervideo := PerVideoPicture{
@@ -243,7 +263,7 @@
                    "",
                    alarmRules,
                    time.Now().Format("2006-01-02 15:04:05"), // 只检测,没有比对时间
                    sex,            //暂改为人脸id strconv.FormatUint(face.Id, 10)
                    sex,                                      //暂改为人脸id strconv.FormatUint(face.Id, 10)
                    face.ThftRes.Age,
                    ageDescription, // 暂改为分值fmt.Sprintf("%.2f",face.Score)
                    race,
@@ -263,6 +283,7 @@
                    0,
                    0,
                    face.Liker,
                    *target,
                }
                requstbody, err := json.Marshal(pervideo)
@@ -284,7 +305,7 @@
}
// 归置人脸
func PutFace(faces []*FaceAndRules,msg structure.ResultMsg)[]*FaceAndRules{
func PutFace(faces []*FaceAndRules, msg structure.ResultMsg) []*FaceAndRules {
    if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]structure.FaceResult)) > 0 {
        for _, faceResult := range msg.RuleResult["face"].([]structure.FaceResult) {
            faces = hebingFace(faces, faceResult)
@@ -294,28 +315,28 @@
        return nil
    }
}
func hebingFace(faces []*FaceAndRules, faceResult structure.FaceResult) []*FaceAndRules{
func hebingFace(faces []*FaceAndRules, faceResult structure.FaceResult) []*FaceAndRules {
    for _, arg := range faceResult.Args {
        // 拿到每一张人脸
        logger.Info("归置人脸时相似者的数量:",len(arg.Liker))
        logger.Info("归置人脸时相似者的数量:", len(arg.Liker))
        flag := false
        for _, face := range faces {
            for _,lik := range face.Liker {
                logger.Warn("--------合并人脸时相似者:",lik.PersonId,lik.TableName)
            for _, lik := range face.Liker {
                logger.Warn("--------合并人脸时相似者:", lik.PersonId, lik.TableName)
            }
            if arg.Id == face.Id {
                flag = true
                face.rules = append(face.rules,faceResult.Result)
                face.rules = append(face.rules, faceResult.Result)
                // 相似者去重归并
                for _,liker := range arg.Liker {
                for _, liker := range arg.Liker {
                    flag1 := true
                    for _,liker1 := range face.Liker {
                    for _, liker1 := range face.Liker {
                        if liker.PersonId == liker1.PersonId {
                            flag1 = false
                        }
                    }
                    if flag1 {
                        face.Liker = append(face.Liker,liker)
                        face.Liker = append(face.Liker, liker)
                    }
                }
                //face.Liker = append(face.Liker,arg.Liker...)
@@ -354,7 +375,7 @@
                    if yoloResult.IsLink {
                        linkInfo = "联动任务"
                    }
                    alarmRules = append(alarmRules, AlarmRule{yoloResult.RuleGroupId, alarm, yoloResult.RuleText, yoloResult.DefenceState,yoloResult.IsLink,linkInfo})
                    alarmRules = append(alarmRules, AlarmRule{yoloResult.RuleGroupId, alarm, yoloResult.RuleText, yoloResult.DefenceState, yoloResult.IsLink, linkInfo})
                    // 上传缓存数据的图片拿到url
                    if yoloResult.Others.CacheData != nil {
                        //InsertYolo(msg.RuleResult["cacheData"].(ruleserver.ResultMsg))