panlei
2019-07-18 581ff7df72dcc1d70b27c80fbd1004d7fb139a94
完善人脸比对
5个文件已修改
82 ■■■■ 已修改文件
config/conf.yml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.mod 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.sum 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
insertdata/insertDataToEs.go 3 ●●●●● 补丁 | 查看 | 原始文档 | 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"
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
@@ -25,6 +25,9 @@
    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() {
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))
                            }