panlei
2019-07-18 581ff7df72dcc1d70b27c80fbd1004d7fb139a94
完善人脸比对
5个文件已修改
154 ■■■■■ 已修改文件
config/conf.yml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.mod 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.sum 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
insertdata/insertDataToEs.go 73 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruleserver/readyDataForRule.go 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
config/conf.yml
@@ -1,3 +1,6 @@
photoUrl: "http://192.168.1.203:6333/submit"
videopersons: "http://192.168.1.182:9200/videopersons/perVideoPicture"
personaction: "http://192.168.1.182:9200/personaction/perVideoAction"
personaction: "http://192.168.1.182:9200/personaction/perVideoAction"
serverip: "192.168.1.182"
serverport: "9200"
dbtablepersons: "dbtablepersons"
go.mod
@@ -4,7 +4,7 @@
require (
    basic.com/dbapi.git v0.0.0-20190701055817-73bca225181f
    basic.com/pubsub/cache.git v0.0.0-20190712095028-e73efb4afc3b
    basic.com/pubsub/cache.git v0.0.0-20190718024458-be52360c4814
    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
go.sum
@@ -2,6 +2,8 @@
basic.com/dbapi.git v0.0.0-20190701055817-73bca225181f/go.mod h1:eDXPnxaz6jZPDvBSk7ya7oSASWPCuUEgRTJCjsfKt/Q=
basic.com/pubsub/cache.git v0.0.0-20190712095028-e73efb4afc3b h1:UAasACFqEYUBCuZkkdxYVc1QmSyB7McvNHS36QxDJp4=
basic.com/pubsub/cache.git v0.0.0-20190712095028-e73efb4afc3b/go.mod h1:gHLJZz2ee1cGL0X0ae69fs56bAxkDgEQwDhhXZJNUcY=
basic.com/pubsub/cache.git v0.0.0-20190718024458-be52360c4814 h1:KoSik/aiJNDt3d+qRKExLW4pNHZ7vU1wXHhWXxZi4qo=
basic.com/pubsub/cache.git v0.0.0-20190718024458-be52360c4814/go.mod h1:gHLJZz2ee1cGL0X0ae69fs56bAxkDgEQwDhhXZJNUcY=
basic.com/pubsub/protomsg.git v0.0.0-20190709070734-b34c868adcc2 h1:ygh9CQPS48KmXv+PNUrOcrMqIiDZOs11apnQdu9oGEY=
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=
insertdata/insertDataToEs.go
@@ -19,12 +19,15 @@
    "ruleprocess/util"
)
var weedfsUrl,videoPersonUrl,personAction string
var weedfsUrl, videoPersonUrl, personAction string
type conf struct {
    PhotoUrl     string `yaml:"photoUrl"`
    Videopersons string `yaml:"videopersons"`
    Personaction string `yaml:"personaction"`
    PhotoUrl       string `yaml:"photoUrl"`
    Videopersons   string `yaml:"videopersons"`
    Personaction   string `yaml:"personaction"`
    Serverip       string `yaml:"serverIp"`
    Serverport     string `yaml:"serverPort"`
    Dbtablepersons string `yaml:"dbTablePersons"`
}
func init() {
@@ -43,35 +46,35 @@
// 人脸的数据结构
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"`
    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"`
    DetectScore     float64              `json:"detectScore"`
    IsAlarm         int                  `json:"isAlarm"`
    IsAckAlarm      int                  `json:"isAckAlarm"`
    IsCollect       int                  `json:"isCollect"`
    IsDelete        int                  `json:"isDelete"`
    BaseInfo        []*ruleserver.BaseInfo`json:"baseInfo"`
    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"`
    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"`
    DetectScore     float64                `json:"detectScore"`
    IsAlarm         int                    `json:"isAlarm"`
    IsAckAlarm      int                    `json:"isAckAlarm"`
    IsCollect       int                    `json:"isCollect"`
    IsDelete        int                    `json:"isDelete"`
    BaseInfo        []*ruleserver.BaseInfo `json:"baseInfo"`
}
//  yolo行为的数据结构
@@ -307,7 +310,7 @@
        if len(alarmRules) > 0 {
            isAlarm = 1
            //resp, err = util.PostFormBufferData(weedfsUrl, i, uuid.NewV4().String())
            resp, err = util.DrawPolygonOnImage(msg.Cid, i, msg.RuleResult["yolo"].([]ruleserver.Result),weedfsUrl)
            resp, err = util.DrawPolygonOnImage(msg.Cid, i, msg.RuleResult["yolo"].([]ruleserver.Result), weedfsUrl)
            if err != nil {
                logger.Error("画框或上传图片服务器出错", err)
            } else {
@@ -382,7 +385,7 @@
    i := protomsg.Image{}
    err = proto.Unmarshal(bdata, &i)
    //resp, err = util.PostFormBufferData(weedfsUrl, i, uuid.NewV4().String())
    resp, err := util.DrawPolygonOnImage(msg.Cid, i, msg.RuleResult["yolo"].([]ruleserver.Result),weedfsUrl)
    resp, err := util.DrawPolygonOnImage(msg.Cid, i, msg.RuleResult["yolo"].([]ruleserver.Result), weedfsUrl)
    if err != nil {
        logger.Error("画框或上传图片服务器出错", err)
    } else {
ruleserver/readyDataForRule.go
@@ -4,16 +4,42 @@
    "basic.com/pubsub/cache.git/esutil"
    bigCache "basic.com/pubsub/cache.git"
    "basic.com/pubsub/protomsg.git"
    "basic.com/pubsub/sdkcompare.git"
    "encoding/json"
    "fmt"
    "github.com/go-yaml/yaml"
    "io/ioutil"
    "ruleprocess/cache"
    "ruleprocess/logger"
    "strconv"
    "strings"
    "time"
)
var serverIp,serverPort,dbTablePersons string
type conf struct {
    PhotoUrl       string `yaml:"photoUrl"`
    Videopersons   string `yaml:"videopersons"`
    Personaction   string `yaml:"personaction"`
    Serverip       string `yaml:"serverIp"`
    Serverport     string `yaml:"serverPort"`
    Dbtablepersons string `yaml:"dbTablePersons"`
}
func init() {
    bigCache.Init()
    data, err := ioutil.ReadFile("./config/conf.yml")
    if err != nil {
        fmt.Println("读取配置文件出错--", err)
        logger.Error("读取配置文件出错--", err)
    }
    c := conf{}
    //把yaml形式的字符串解析成struct类型
    yaml.Unmarshal(data, &c)
    serverIp = c.Serverip
    serverPort = c.Serverport
    dbTablePersons = c.Dbtablepersons
    localConfig, err := cache.GetServerInfo()
    if err != nil {
        logger.Error("查询本机信息失败!")
    }
    logger.Debug("本机信息:",localConfig)
    bigCache.Init(dbTablePersons,serverIp,serverPort,localConfig.ServerId)
}
type BaseInfo struct {
@@ -118,8 +144,8 @@
}
// 给目标填充liker
func (arg *Arg) fillLiker() {
    bytes := sdkcompare.GetComparePersonBaseInfo(nil, arg.Feature, 40)
func (arg *Arg) fillLiker(tableId []string,compareThreshold float32) {
    bytes := bigCache.GetComparePersonBaseInfo(tableId,arg.Feature,compareThreshold)
    var m map[string]float32
    err1 := json.Unmarshal(bytes, &m)
    if err1 != nil {
@@ -133,32 +159,46 @@
    logger.Info("------------------------------------------------------------------------------------------------------------------------")
    logger.Info("=====================人员id的集合为:",ids)
    if len(ids) > 0 {
        baseinfos, err1 := esutil.Dbpersoninfosbyid(ids)
        baseinfos, err1 := esutil.Dbpersoninfosbyid(ids,dbTablePersons,serverIp,serverPort)
        if err1 != nil {
            logger.Error("查询底库人员信息出错", err1)
        }
        logger.Debug("----------------++++++++++++++++++++底库人员信息:",baseinfos)
        for _,baseinfo := range baseinfos  {
            logger.Info("---------看看每个底库人员的信息:",baseinfo)
            // 根据tableId查询底库信息给liker赋值
            logger.Info("---------看看每个底库人员的信息:",baseinfo.Id,baseinfo.PersonName)
            var tableIds []string
            tableIds = append(tableIds,baseinfo.TableId) // 虽然是传入数组返回数组的接口,但我按单个的使用了
            table,err := esutil.Dbtablefosbyid(tableIds,dbTablePersons,serverIp,serverPort)
            if err != nil {
                logger.Error("根据id查询底库信息出错!")
            }
            base := BaseInfo{TableId:baseinfo.TableId,TableName:table[0].TableName,BwType:table[0].BwType,CompareScore:float64(m[baseinfo.Id]),PersonId:baseinfo.Id,PersonName:baseinfo.PersonName,PersonPicUrl:baseinfo.PersonPicUrl,PhoneNum:baseinfo.PhoneNum,Sex:baseinfo.Sex,MonitorLevel:baseinfo.MonitorLevel,Content:""}
            arg.Liker = append(arg.Liker, &base)
        }
    }
    //baseinfo.CompareScore = Retain(val)
    //arg.Liker = append(arg.Liker, &baseinfo)
    //logger.Info("------------------第一次看args:",*arg)
}
// 人脸比对
func Compare(args *SdkDatas, groupRule *protomsg.GroupRule) {
    compareFlag := 0
    tableIds := ""
    var tableIds []string
    var threshold float32
    // 看看是否有只配人脸比对算法但没有配对比库的规则,如果有,则比对对象为全部底库
    for j := 0; j < len(groupRule.Rules); j++ {
        if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" { // 配了人脸比对
            if groupRule.Rules[j].SdkArgAlias == "compareBase" && groupRule.Rules[j].SdkArgValue != "" { // 配了比对底库的参数但没有配全部底库
                compareFlag = 2
                tableIds = groupRule.Rules[j].SdkArgValue + "," // 最后会多一个tableId,切出来的数组取len-1就可以
                tableIds = append(tableIds,groupRule.Rules[j].SdkArgValue)// 最后会多一个tableId,切出来的数组取len-1就可以
            }
            if groupRule.Rules[j].SdkArgAlias == "compareBase" && groupRule.Rules[j].SdkArgValue == "" { // 配的参数是比对全部底库
                compareFlag = 1
            }
            if groupRule.Rules[j].SdkArgAlias == "threshold" {
                v2, err := strconv.ParseFloat(groupRule.Rules[j].SdkArgValue, 32)
                if err != nil {
                    logger.Error("string转float32失败!")
                }
                threshold = float32(v2)
            }
        }
    }
@@ -180,14 +220,10 @@
                            logger.Info("--------------看看compareFlag的值:",compareFlag)
                            for _, arg := range areaMap.args {
                                if compareFlag == 1 {
                                    arg.fillLiker()
                                    arg.fillLiker(nil,threshold)
                                }
                                if compareFlag == 2 {
                                    array := strings.Split(tableIds, ",")
                                    logger.Info("--------------------------看看对比底库的值;",array)
                                    for i := 0; i < len(array)-1; i++ {
                                        arg.fillLiker()
                                    }
                                    arg.fillLiker(tableIds,threshold)
                                }
                                logger.Info("-------------------成功给liker赋值,长度为:", len(arg.Liker))
                            }