From a6d98e51a7a4972501673900097d76aaf8751547 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期六, 06 七月 2019 18:10:52 +0800
Subject: [PATCH] 底库比对挂在规则库中,人脸三剑客只剩下一个人脸检测,给人脸赋特征值

---
 go.sum                       |    4 
 insertdata/insertDataToEs.go |    2 
 go.mod                       |    2 
 ruleserver/ruleToformula.go  |   54 +++++++++++++++--
 main.go                      |  100 ++++++++++++++++----------------
 5 files changed, 101 insertions(+), 61 deletions(-)

diff --git a/go.mod b/go.mod
index f7c144f..69d2be1 100644
--- a/go.mod
+++ b/go.mod
@@ -5,7 +5,7 @@
 require (
 	basic.com/dbapi.git v0.0.0-20190701055817-73bca225181f
 	basic.com/pubsub/cache.git v0.0.0-20190625115705-58cdde93bbe0
-	basic.com/pubsub/protomsg.git v0.0.0-20190705101637-65381a182a3c
+	basic.com/pubsub/protomsg.git v0.0.0-20190706093248-8cd3a0511c78
 	basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051
 	basic.com/valib/gopherdiscovery.git v0.0.0-20190605034340-15d89d8b4e28
 	github.com/Microsoft/go-winio v0.4.12 // indirect
diff --git a/go.sum b/go.sum
index 1349913..d793ff3 100644
--- a/go.sum
+++ b/go.sum
@@ -2,8 +2,8 @@
 basic.com/dbapi.git v0.0.0-20190701055817-73bca225181f/go.mod h1:eDXPnxaz6jZPDvBSk7ya7oSASWPCuUEgRTJCjsfKt/Q=
 basic.com/pubsub/cache.git v0.0.0-20190625115705-58cdde93bbe0 h1:gbAslJB/3DATBlr4b95cs8sMFNSqRxL7KUwXYnyvp14=
 basic.com/pubsub/cache.git v0.0.0-20190625115705-58cdde93bbe0/go.mod h1:gHLJZz2ee1cGL0X0ae69fs56bAxkDgEQwDhhXZJNUcY=
-basic.com/pubsub/protomsg.git v0.0.0-20190705101637-65381a182a3c h1:gVWzsRxEiQ7oqx0xHDHKbk1LF1hj32Xjp9n65K5Q3mI=
-basic.com/pubsub/protomsg.git v0.0.0-20190705101637-65381a182a3c/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
+basic.com/pubsub/protomsg.git v0.0.0-20190706093248-8cd3a0511c78 h1:rjF01FTFUvFc5zj3PQ1MN17z+FVYZZQInhtzn+vhMSk=
+basic.com/pubsub/protomsg.git v0.0.0-20190706093248-8cd3a0511c78/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
 basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051 h1:9flC2o3kasaM2Y6I+mY+mxmve/pyAY/UzGQZLT3lFHM=
 basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051/go.mod h1:bkYiTUGzckyNOjAgn9rB/DOjFzwoSHJlruuWQ6hu6IY=
 basic.com/valib/gopherdiscovery.git v0.0.0-20190605034340-15d89d8b4e28 h1:3hejanzPEBvZSSvjIqayB83/6/6SLLrX9oNZAdiYELg=
diff --git a/insertdata/insertDataToEs.go b/insertdata/insertDataToEs.go
index 39335bd..0fae6ec 100644
--- a/insertdata/insertDataToEs.go
+++ b/insertdata/insertDataToEs.go
@@ -150,7 +150,7 @@
 					race,
 					face.ThftRes.Smile,
 					face.ThftRes.Beauty,
-					"",
+					string(face.Feature),
 					[]string{strings.Split(resp["fileUrl"].(string), "/")[1]},
 					"鏆傛棤闆嗙兢",
 					localConfig.ServerId,
diff --git a/main.go b/main.go
index 69e09cf..a76ab0d 100644
--- a/main.go
+++ b/main.go
@@ -187,7 +187,7 @@
 				}
 				logger.Info("------褰撳墠绠楁硶name",sdkinfo.SdkName,"--------------鐪嬬湅浜鸿劯妫�娴嬩腑鏈夊嚑涓洰鏍囷細",len(faceParam.Faces))
 				for _, info := range faceParam.Faces {
-					photoMap := ruleserver.PhotoMap{Rects: rectFormat(info.Pos.RcFace), Score: float64(info.Pos.Quality)*100, IsYolo:false,ThftRes:*(info.Result)}
+					photoMap := ruleserver.PhotoMap{Rects: rectFormat(info.Pos.RcFace), Score: float64(info.Pos.Quality)*100, IsYolo:false,ThftRes:*(info.Result),Feature:info.Feats}
 					arg.Photo = append(arg.Photo, photoMap)
 				}
 				args.Sdkdata = append(args.Sdkdata,&arg)
@@ -195,55 +195,55 @@
 				continue
 			}
 		}
-		if sdkinfo.Sdktype == "FaceExtract" { // 浜鸿劯鎻愬彇
-			arg := ruleserver.SdkData{}
-			arg.TaskId = m.Tasklab.Taskid
-			arg.SdkId = sdkinfo.Sdkid
-			arg.SdkName = sdkinfo.SdkName
-			arg.IsYolo = false
-			bdata, err := util.UnCompress(m.Data)
-			if err != nil {
-				panic("瑙e帇缂╁浘鐗囨椂鍑虹幇閿欒")
-			}
-			i := protomsg.Image{}
-			err = proto.Unmarshal(bdata, &i)
-			arg.ImageWidth = int(i.Width)
-			arg.ImageHeight = int(i.Height)
-			// 鏆傛椂鍐欐锛宻dk杩樻病鏈夎繖淇╃畻娉�
-			arg.KeepRight = false
-			arg.IsStatic = false
-			if len(sdkinfo.Sdkdata) > 1 {
-				faceParam := protomsg.ParamFaceFeature{}
-				err = proto.Unmarshal(sdkinfo.Sdkdata, &faceParam)
-				if err != nil {
-					logger.Info("瑙f瀽FACE sdk鏁版嵁鏃跺嚭鐜伴敊璇�", err)
-					continue
-				}
-				for _,faceExtCom := range faceParam.ExtComp  {
-					binfos := protomsg.Binfos{}
-					err := proto.Unmarshal(faceExtCom.Comp, &binfos)
-					if err != nil {
-						logger.Info("瑙f瀽浜鸿劯姣斿鏁版嵁鏃跺嚭鐜伴敊璇�", err)
-						continue
-					}
-					logger.Info("_________________________________________________________________瑙f瀽鍑虹殑浜鸿劯鐨勭浉浼肩殑搴曞簱鏁版嵁",binfos.Infos[0].CompareScore)
-				}
-				logger.Info("------褰撳墠绠楁硶name",sdkinfo.SdkName,"--------------鐪嬬湅浜鸿劯鎻愬彇涓湁鍑犱釜鐩爣锛�",len(faceParam.ExtComp))
-				for _, extComp := range faceParam.ExtComp {
-					baseinfos := protomsg.Binfos{}
-					err1 := proto.Unmarshal(extComp.Comp, &baseinfos)
-					if err1 != nil {
-						logger.Info("瑙f瀽FACE sdk鏁版嵁鏃跺嚭鐜伴敊璇�", err)
-						continue
-					}
-					photoMap := ruleserver.PhotoMap{Rects: rectFormat(extComp.Pos.Pos.RcFace), Score: float64(extComp.Pos.Pos.Quality)*100, IsYolo:false,ThftRes:*(extComp.Pos.Result),Liker:baseinfos.Infos}
-					arg.Photo = append(arg.Photo, photoMap)
-				}
-				args.Sdkdata = append(args.Sdkdata,&arg)
-			} else {
-				continue
-			}
-		}
+		//if sdkinfo.Sdktype == "FaceExtract" { // 浜鸿劯鎻愬彇
+		//	arg := ruleserver.SdkData{}
+		//	arg.TaskId = m.Tasklab.Taskid
+		//	arg.SdkId = sdkinfo.Sdkid
+		//	arg.SdkName = sdkinfo.SdkName
+		//	arg.IsYolo = false
+		//	bdata, err := util.UnCompress(m.Data)
+		//	if err != nil {
+		//		panic("瑙e帇缂╁浘鐗囨椂鍑虹幇閿欒")
+		//	}
+		//	i := protomsg.Image{}
+		//	err = proto.Unmarshal(bdata, &i)
+		//	arg.ImageWidth = int(i.Width)
+		//	arg.ImageHeight = int(i.Height)
+		//	// 鏆傛椂鍐欐锛宻dk杩樻病鏈夎繖淇╃畻娉�
+		//	arg.KeepRight = false
+		//	arg.IsStatic = false
+		//	if len(sdkinfo.Sdkdata) > 1 {
+		//		faceParam := protomsg.ParamFaceFeature{}
+		//		err = proto.Unmarshal(sdkinfo.Sdkdata, &faceParam)
+		//		if err != nil {
+		//			logger.Info("瑙f瀽FACE sdk鏁版嵁鏃跺嚭鐜伴敊璇�", err)
+		//			continue
+		//		}
+		//		for _,faceExtCom := range faceParam.ExtComp  {
+		//			binfos := protomsg.Binfos{}
+		//			err := proto.Unmarshal(faceExtCom.Comp, &binfos)
+		//			if err != nil {
+		//				logger.Info("瑙f瀽浜鸿劯姣斿鏁版嵁鏃跺嚭鐜伴敊璇�", err)
+		//				continue
+		//			}
+		//			logger.Info("_________________________________________________________________瑙f瀽鍑虹殑浜鸿劯鐨勭浉浼肩殑搴曞簱鏁版嵁",binfos.Infos[0].CompareScore)
+		//		}
+		//		logger.Info("------褰撳墠绠楁硶name",sdkinfo.SdkName,"--------------鐪嬬湅浜鸿劯鎻愬彇涓湁鍑犱釜鐩爣锛�",len(faceParam.ExtComp))
+		//		for _, extComp := range faceParam.ExtComp {
+		//			baseinfos := protomsg.Binfos{}
+		//			err1 := proto.Unmarshal(extComp.Comp, &baseinfos)
+		//			if err1 != nil {
+		//				logger.Info("瑙f瀽FACE sdk鏁版嵁鏃跺嚭鐜伴敊璇�", err)
+		//				continue
+		//			}
+		//			photoMap := ruleserver.PhotoMap{Rects: rectFormat(extComp.Pos.Pos.RcFace), Score: float64(extComp.Pos.Pos.Quality)*100, IsYolo:false,ThftRes:*(extComp.Pos.Result),Liker:baseinfos.Infos}
+		//			arg.Photo = append(arg.Photo, photoMap)
+		//		}
+		//		args.Sdkdata = append(args.Sdkdata,&arg)
+		//	} else {
+		//		continue
+		//	}
+		//}
 
 	}
 	return m
diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index a2ae4f2..bb22dc5 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -2,6 +2,7 @@
 
 import (
 	"encoding/json"
+	"github.com/gogo/protobuf/proto"
 	"ruleprocess/cache"
 	"ruleprocess/logger"
 	"sort"
@@ -9,6 +10,7 @@
 	"strings"
 	"time"
 
+	 bigCache "basic.com/pubsub/cache.git"
 	"basic.com/pubsub/protomsg.git"
 	"github.com/knetic/govaluate"
 )
@@ -62,6 +64,7 @@
 	IsYolo     bool    // 鏄惁鏄痽olo鏁版嵁
 	Location   Rect    // 璁颁笅姣忎釜鐩爣鐨勪綅缃弬鏁帮紝鏈�鍚庣粰缁撴灉瑁呴厤浜鸿劯鏁版嵁鐨勬椂鍊欑敤鐨勫埌
 	SdkName    string
+	Feature	   []byte
 	ThftRes    protomsg.ThftResult
 	Liker      []*protomsg.Baseinfo
 }
@@ -97,7 +100,7 @@
 	IsYolo  bool    // 鏄惁鏄痽olo鏁版嵁
 	SdkName string
 	ThftRes protomsg.ThftResult
-	Liker   []*protomsg.Baseinfo // 濡傛灉鏄汉鑴哥殑璇濆挨鍏舵槸姣斿锛屽簲瀛樹笅浠栬窡搴曞簱鐨勪汉鍛樼殑鐩镐技鎯呭喌 yolo鐨勮瘽缁檔il灏辫
+	Feature []byte
 }
 
 // 姣忎釜绠楁硶瀵逛簬褰撳墠甯х敾闈㈣嚜宸辨彁鍙栫殑鏁版嵁
@@ -227,6 +230,42 @@
 		}
 	}
 }
+func Compare(args *SdkDatas, groupRule *protomsg.GroupRule) {
+	compareFlag := false
+	// 鐪嬬湅鏄惁鏈夊彧閰嶄汉鑴告瘮瀵圭畻娉曚絾娌℃湁閰嶅姣斿簱鐨勮鍒欙紝濡傛灉鏈夛紝鍒欐瘮瀵瑰璞′负鍏ㄩ儴搴曞簱
+	for j := 0; j < len(groupRule.Rules); j++ {
+		if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972"{
+			if groupRule.Rules[j].SdkArgAlias == "瀵规瘮搴曞簱" {
+				compareFlag = true
+			}
+		}
+	}
+	if compareFlag {
+		logger.Info("閰嶇疆浜嗗姣斿簳搴撳弬鏁�")
+	}else {
+		logger.Info("娌℃湁閰嶇疆瀵规瘮搴曞簱鍙傛暟")
+	}
+	for j := 0; j < len(groupRule.Rules); j++ {
+		if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && groupRule.Rules[j].SdkArgAlias == "瀵规瘮搴曞簱"{
+			for _, sdkData := range args.Sdkdata {
+				if sdkData.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" { // 鎼滅储鍒颁汉鑴告娴嬬殑sdkdata 鐜板湪鍏充簬浜鸿劯鐨勫彧鏈変粬涓�涓猻dk锛屽叏鎵句粬
+					for _, areaMap := range sdkData.AreaMapList {
+						// 鎷垮尯鍩熶腑姣忎釜浜鸿劯鐗瑰緛鍊煎幓瀵规瘮锛屽~鍏呭叾liker
+						if groupRule.Rules[j].PolygonId == areaMap.areaId {
+							for _,arg := range areaMap.args {
+								bytes := bigCache.Getdbpersonmsg(string(arg.Feature),true)
+								binfos := protomsg.Binfos{}
+								proto.Unmarshal(bytes,&binfos)
+								arg.Liker = binfos.Infos
+								logger.Info("-------------------鎴愬姛缁檒iker璧嬪�硷細",arg.Liker)
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+}
 func RunRule(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string) bool {
 	defer func() {
 		if err := recover(); err != nil {
@@ -234,6 +273,7 @@
 		}
 	}()
 	logger.Info("+++++++++++瑙勫垯寮�濮嬭繍琛�+++++++++++++++++褰撳墠瑙勫垯--锛�", *groupRule)
+	Compare(args,groupRule)
 	resultSplice := []*LittleRuleResult{}
 	// 鍏堣繃瀹屾潯浠惰鍒�
 	for j := 0; j < len(groupRule.Rules); j++ {
@@ -330,7 +370,7 @@
 			// 閰嶄簡浜鸿劯鐨勭畻娉曟墠鎶婁汉鑴哥殑鏁版嵁鐢╁嚭鏉ユ墦鏍囩
 			flag11 := false
 			for j := 0; j < len(groupRule.Rules); j++ {
-				if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a971" {
+				if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" {
 					flag11 = true
 				}
 			}
@@ -396,7 +436,7 @@
 
 func putFaceToResult(rule *protomsg.Rule, am *AreaMap) []Arg {
 	faces := []Arg{}
-	if rule.SdkId == am.sdkId && rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a971" {
+	if rule.SdkId == am.sdkId && rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a972" {
 		if len(am.filterData) > 0 {
 			for _, data := range am.filterData {
 				faces = append(faces, data)
@@ -409,7 +449,7 @@
 
 func putYolosToResult(rule *protomsg.Rule, am *AreaMap) []Rect {
 	locations := []Rect{}
-	if rule.SdkId == am.sdkId && rule.SdkId != "812b674b-2375-4589-919a-5c1c3278a97e" && rule.SdkId != "812b674b-2375-4589-919a-5c1c3278a971" {
+	if rule.SdkId == am.sdkId && rule.SdkId != "812b674b-2375-4589-919a-5c1c3278a97e" && rule.SdkId != "812b674b-2375-4589-919a-5c1c3278a972" {
 		if len(am.filterData) > 0 {
 			for _, data := range am.filterData {
 				locations = append(locations, data.Location)
@@ -442,7 +482,7 @@
 		if threshold <= obj.Score && size <= float64(obj.Rects.Width*obj.Rects.Height) && intersectionper <= PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale) {
 			// 杩欐瑕佸榻愯〃杈惧紡閲屾墍闇�瑕佺殑鎵�鏈夊弬鏁�
 			a.targetNum++
-			arg1 := Arg{obj.Score, PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), obj.IsYolo, obj.Rects, obj.SdkName, obj.ThftRes, obj.Liker}
+			arg1 := Arg{obj.Score, PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), obj.IsYolo, obj.Rects, obj.SdkName, obj.Feature,obj.ThftRes,[]*protomsg.Baseinfo{}}
 			//logger.Println("鏀捐繘鍘荤殑arg锛�-------", arg1)
 			a.args = append(a.args, arg1)
 			a.filterData = append(a.filterData, arg1)
@@ -592,14 +632,14 @@
 func filterRule(rule *protomsg.Rule, am *AreaMap) LittleRuleResult {
 	if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a972" {
 		// 澶勭悊鐨勬槸浜鸿劯绠楁硶 濡傛灉杩欐潯瑙勫垯閰嶇疆鐨勬槸浜鸿劯绠楁硶锛岃繃婊ゅ畬鏉′欢涔嬪悗鐩存帴寰楀嚭缁撴灉锛屽洜涓鸿偗瀹氭病鏈夋暟閲忔潯浠讹紝鑷繁鎷兼帴
-		logger.Info("瑙勫垯鐨勭畻娉昳d鍜屽尯鍩熺殑绠楁硶id锛�",rule.SdkId,"===",am.sdkId)
+		logger.Error("瑙勫垯鐨勭畻娉昳d鍜屽尯鍩熺殑绠楁硶id锛�",rule.SdkId,"===",am.sdkId)
 		if rule.SdkId == am.sdkId && rule.PolygonId == am.areaId { // 绠楁硶鍜屽尯鍩熼兘寰楀鐨勪笂
 
 			if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && rule.SdkArgAlias != "time_rule"{
 				// 鍙渶瑕佽繃婊ら槇鍊硷紝杩囨护瀹屽悗鏁扮粍闀垮害澶т簬0鍗充负鎶ヨ锛屼絾瑕佽�冭檻濡備綍瀵规瘡涓�寮犻兘鎶ヨ鍛�
 				argValue, err := strconv.ParseFloat(rule.SdkArgValue, 64)
 				if err != nil {
-					logger.Info("瑙勫垯閰嶇疆鐨勯槇鍊奸潪娉�")
+					logger.Error("瑙勫垯閰嶇疆鐨勯槇鍊奸潪娉�")
 					return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "false", rule.Sort}
 				}
 				flag := "false"

--
Gitblit v1.8.0