From 6622f4a2288429d2868ec47d9cd968bace55b37d Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期四, 11 七月 2019 16:47:35 +0800
Subject: [PATCH] 修正报警区域,拆分代码
---
util/upload.go | 59 +++++++++++
util/simpleCV.go | 112 +++++++---------------
insertdata/insertDataToEs.go | 6 -
ruleserver/ruleToformula.go | 67 ++++++------
4 files changed, 130 insertions(+), 114 deletions(-)
diff --git a/insertdata/insertDataToEs.go b/insertdata/insertDataToEs.go
index f67c8ed..2f6d7ca 100644
--- a/insertdata/insertDataToEs.go
+++ b/insertdata/insertDataToEs.go
@@ -101,7 +101,6 @@
func InsertToEs(msg ruleserver.ResultMsg) {
// 鐩存帴浠庤鍒欑殑鏍囩鏁版嵁閲屾嬁绗﹀悎瑙勫垯鐨勪汉鑴哥粨鏋�
- //logger.Info("------------------------------------浠庨厤缃枃浠惰鍙栫殑鍊硷細",weedfsUrl)
if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]ruleserver.Arg)) > 0 {
logger.Info("寰�ES鎻掍汉鑴告暟鎹�")
for _, face := range msg.RuleResult["face"].([]ruleserver.Arg) {
@@ -135,7 +134,6 @@
}
i := protomsg.Image{}
err = proto.Unmarshal(bdata, &i)
- logger.Info("-------------------------------------------鐪嬩笅瀹藉拰楂�", int(face.Location.X),int(face.Location.Y),int(face.Location.X+face.Location.Width),int(face.Location.Y+face.Location.Height))
bytes := util.SubImg(i, int(face.Location.X), int(face.Location.Y), int(face.Location.X+face.Location.Width), int(face.Location.Y+face.Location.Height))
resp, err := util.PostFormBufferData1(weedfsUrl, bytes, uuid.NewV4().String())
if err != nil {
@@ -268,9 +266,7 @@
}
err = EsReq("POST", "http://192.168.1.182:9200/videopersons/perVideoPicture", requstbody)
- logger.Info("璺熷簳搴撶殑鐩镐技鏁版嵁---------锛�", face.Liker)
-
- fmt.Println("------------------------------------------鍝堝搱鍝堝搱锛屽簳搴撴湁浜�")
+ logger.Info("------------------------------------------鍝堝搱鍝堝搱锛屽簳搴撴湁浜�")
}
}
diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index 02deb86..7b888b9 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -89,8 +89,8 @@
triggerLine string
directionLine string
targetNum int // 鍖哄煙鍐呯洰鏍囨暟閲�
- args []*Arg // 鍖哄煙鍐呯洰鏍囬泦鍚�
- filterData []*Arg // 杩囨护鍚庡尯鍩熷唴鐩爣闆嗗悎
+ args []*Arg // 鍖哄煙鍐呯洰鏍囬泦鍚�
+ filterData []*Arg // 杩囨护鍚庡尯鍩熷唴鐩爣闆嗗悎
time string // 褰撳墠鏃堕棿锛堢敤浠ュ尮閰嶆椂闂磋鍒欙級
keepRight bool // 鏄惁闈犲彸琛�
isStatic bool // 鏄惁闈欐
@@ -115,7 +115,7 @@
IsStatic bool // 鏄惁闈欐
ImageWidth int // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚瀹� 鍍忕礌
ImageHeight int // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚楂� 鍍忕礌
- AreaMapList []*AreaMap // 鏈瑂dk鎻愬彇鐨勬暟鎹寜鐓у尯鍩熷垝鍒嗗悗鐨勬暟鎹泦鍚�
+ AreaMapList []*AreaMap // 鏈瑂dk鎻愬彇鐨勬暟鎹寜鐓у尯鍩熷垝鍒嗗悗鐨勬暟鎹泦鍚�
}
// 浠庣畻娉曟ā鍧楀効鎷挎潵鐨勫涓�甯у浘鍍忓悇涓畻娉曟彁鍙栫殑鏁版嵁闆嗗悎
@@ -135,12 +135,13 @@
// 杩囪鍒欏簱鎵撲笂鐨勬爣绛�
type Result struct {
- TaskId string // 浠诲姟id
- SdkName string
- RuleGroupId string // 瑙勫垯缁刬d
- AlarmLevel int32 // 鎶ヨ绛夌骇
- RuleText string // 鏂囧瓧鐗堣鍒欑粍
- Location []Rect
+ TaskId string // 浠诲姟id
+ SdkName string
+ RuleGroupId string // 瑙勫垯缁刬d
+ AlarmLevel int32 // 鎶ヨ绛夌骇
+ RuleText string // 鏂囧瓧鐗堣鍒欑粍
+ Location []Rect // 鐩爣鐨勫潗鏍�
+ AlarmPolygon string // 瑙﹀彂鐨勬姤璀︽
}
type LittleRuleResult struct {
SdkName string // 璁板綍涓嬫缁撴灉鏄摢涓猻dk鐨勭粨鏋�
@@ -222,7 +223,9 @@
}
}
}
-func (arg *Arg) fillLiker(){
+
+// 缁欑洰鏍囧~鍏卨iker
+func (arg *Arg) fillLiker() {
bytes := bigCache.Getdbpersonmsg("", arg.Feature, true)
var m map[string]float32
err1 := json.Unmarshal(bytes, &m)
@@ -277,26 +280,13 @@
if compareFlag == 2 {
array := strings.Split(tableIds, ",")
for i := 0; i < len(array)-1; i++ {
- bytes := bigCache.Getdbpersonmsg(array[i], arg.Feature, true)
- var m map[string]float32
- err1 := json.Unmarshal(bytes, &m)
- if err1 != nil {
- logger.Error("getBaseInfo瑙e帇閿欒", err1)
- }
- for key, val := range m {
- baseinfo, err1 := esutil.Dbpersoninfosbyid(key)
- if err1 != nil {
- logger.Error("鏌ヨ搴曞簱浜哄憳淇℃伅鍑洪敊", err1)
- }
- baseinfo.CompareScore = val
- arg.Liker = append(arg.Liker, &baseinfo)
- }
+ arg.fillLiker()
}
}
logger.Info("-------------------鎴愬姛缁檒iker璧嬪��,闀垮害涓猴細", len(arg.Liker))
}
areaMap.filterData = areaMap.args
- logger.Info("=======绗竴娆$湅args锛�",areaMap.filterData)
+ //logger.Info("=======绗竴娆$湅args锛�",(areaMap.filterData))
}
}
}
@@ -314,6 +304,7 @@
Compare(args, groupRule)
resultSplice := []*LittleRuleResult{}
sdkNames := ""
+ polygonId := ""
// 鍏堣繃瀹屾潯浠惰鍒�
for j := 0; j < len(groupRule.Rules); j++ {
for _, sdkData := range args.Sdkdata {
@@ -324,16 +315,20 @@
}
ipcId := sdk.IpcId
sdkName := sdk.SdkName
- logger.Info("瑙勫垯鐨刬pcId涓巗dkData鐨処pcId:",ipcId,"===",sdkData.IpcId)
+ logger.Info("瑙勫垯鐨刬pcId涓巗dkData鐨処pcId:", ipcId, "===", sdkData.IpcId)
if ipcId == sdkData.IpcId {
logger.Info("褰撳墠璧扮殑瑙勫垯鐨勭畻娉曟槸--锛�", sdkName, "---")
for _, areaMap := range sdkData.AreaMapList {
ruleResult := filterRule(groupRule.Rules[j], areaMap)
if ruleResult.Result != "" {
logger.Info("鏉′欢瑙勫垯缁撴灉锛�", ruleResult.Result)
- // 濡傛灉姝ょ粨鏋滀负鐪熶笖褰撳墠杩囩殑鏄痽olo绠楁硶锛屽簲璁颁笅姝よ鍒欐墍瀵瑰簲鐨剆dkName,鍙﹀锛岃繕瑕佸幓閲�
- if ruleResult.Result == "true" && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
+ // 濡傛灉姝ょ粨鏋滀负鐪熶笖褰撳墠杩囩殑鏄痽olo绠楁硶锛屽簲璁颁笅姝よ鍒欐墍瀵瑰簲鐨剆dkName,鍙﹀锛岃繕瑕佸幓閲� (鍚庡姞锛氭妸姝ゆ潯瑙︾鐨勫尯鍩焛d涔熻褰曚笅鏉�)
+ if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
sdkNames = sdkName + ","
+ polygonId = groupRule.Rules[j].PolygonId + ","
+ }
+ if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(polygonId, groupRule.Rules[j].PolygonId) {
+ polygonId = groupRule.Rules[j].PolygonId + ","
}
resultSplice = append(resultSplice, &ruleResult)
}
@@ -357,8 +352,11 @@
ruleResult := transferParameters(groupRule.Rules[j], areaMap)
if ruleResult.Result != "" {
logger.Info("鏁伴噺瑙勫垯缁撴灉锛�", ruleResult.Result)
- if ruleResult.Result == "true" && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
+ if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
sdkNames = sdkName + ","
+ }
+ if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(polygonId, groupRule.Rules[j].PolygonId) {
+ polygonId = groupRule.Rules[j].PolygonId + ","
}
resultSplice = append(resultSplice, &ruleResult)
}
@@ -380,8 +378,11 @@
ruleResult := timeRuleResult(groupRule.Rules[j], areaMap)
if ruleResult.Result != "" {
logger.Info("鏃堕棿瑙勫垯缁撴灉锛�", ruleResult.Result)
- if ruleResult.Result == "true" && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
+ if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
sdkNames = sdkName + ","
+ }
+ if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(polygonId, groupRule.Rules[j].PolygonId) {
+ polygonId = groupRule.Rules[j].PolygonId + ","
}
resultSplice = append(resultSplice, &ruleResult)
}
@@ -485,7 +486,7 @@
}
}
if sdkNames != "" {
- args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkNames, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, locations})
+ args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkNames, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, locations,polygonId})
logger.Info("-------------------yolo缁撴灉鏍囩", args.RuleResult["yolo"].([]Result))
}
if args.RuleResult["face"] != nil {
@@ -500,7 +501,7 @@
return false
}
}
-func TimerAlarm(groupId string) (int){
+func TimerAlarm(groupId string) (int) {
var flagTime int = 0
for k, timeEle := range TimeEleList {
if strings.Contains(k, groupId) {
@@ -657,7 +658,7 @@
result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
if result.(bool) {
logger.Info("___________________________________________________________________鑱斿姩浠诲姟鎶ヨ")
- args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, "", groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, []Rect{}})
+ args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, "", groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, []Rect{},""})
logger.Info("-------------------yolo缁撴灉鏍囩鏈夊嚑涓�", len(args.RuleResult["yolo"].([]Result)))
if args.RuleResult["face"] != nil {
logger.Info("-------------------face缁撴灉鏍囩鏈夊嚑涓�", len(args.RuleResult["face"].([]Arg)))
diff --git a/util/simpleCV.go b/util/simpleCV.go
index 04c9340..7f07bff 100644
--- a/util/simpleCV.go
+++ b/util/simpleCV.go
@@ -3,21 +3,14 @@
import (
"basic.com/pubsub/protomsg.git"
"bufio"
- "bytes"
- "encoding/json"
- "errors"
"fmt"
"gocv.io/x/gocv"
"image"
"image/color"
- "io"
- "log"
- "mime/multipart"
- "net/http"
"os"
"ruleprocess/cache"
"ruleprocess/ruleserver"
- "time"
+ "strings"
)
func CvRTSP() {
@@ -168,83 +161,27 @@
defer rook.Close()
red := color.RGBA{255, 0, 0, 0}
- // 鏌ュ埌鎽勫儚鏈烘墍鏈夌殑鍖哄煙骞剁敾妗�
- var cameraPolygons []protomsg.CameraPolygon
- cameraPolygons = cache.GetPolygonsByCameraId(cameraId)
- for _, polygon := range cameraPolygons {
- points := ruleserver.Json2points(polygon.Polygon)
- for index := 0; index < len(points); index++ {
- if index == len(points)-1 { // 闂悎鍥惧舰
- gocv.Line(&rook, image.Pt(int(points[index].X), int(points[index].Y)), image.Pt(int(points[0].X), int(points[0].Y)), red, 2)
- } else {
- gocv.Line(&rook, image.Pt(int(points[index].X), int(points[index].Y)), image.Pt(int(points[index+1].X), int(points[index+1].Y)), red, 2)
- }
+ green := color.RGBA{0, 255, 0, 0}
+ // 鍒嗗壊鍖哄煙id闆嗗悎骞舵牴鎹甶d鏌ヨ鍖哄煙鐒跺悗鐢绘
+ for _,result := range results {
+ polygonIds := strings.Split(result.AlarmPolygon,"")
+ for i := 0; i < len(polygonIds)-1; i++ {
+ polygon := getPolygonById(polygonIds[i],cameraId)
+ if polygon.Polygon != "" {
+ DrawAPolygon(&rook,polygon.Polygon,red)
+ }
}
}
// 鎶婄洰鏍囨鍑烘潵
for _,result := range results {
for _,rect := range result.Location {
- gocv.Rectangle(&rook, image.Rect(int(rect.X), int(rect.Y), int(rect.X+rect.Width), int(rect.Y+rect.Height)), red, 1)
+ gocv.Rectangle(&rook, image.Rect(int(rect.X), int(rect.Y), int(rect.X+rect.Width), int(rect.Y+rect.Height)), green, 1)
}
}
//return nil,nil
- // 涓婁紶
- fdata, _ := gocv.IMEncode(".jpg", rook)
- body := &bytes.Buffer{}
- writer := multipart.NewWriter(body)
- _, err1 := writer.CreateFormFile("file", "fasjuierf")
- if err1 != nil {
- return nil, err1
- }
- boundary := writer.Boundary()
- //close_string := fmt.Sprintf("\r\n--%s--\r\n", boundary)
- close_buf := bytes.NewBufferString(fmt.Sprintf("\r\n--%s--\r\n", boundary))
- file := bytes.NewBuffer(fdata)
- request_reader := io.MultiReader(body, file, close_buf)
- //_, err = io.Copy(part, file)
- //writer.WriteField(key, val)
- request, err := http.NewRequest("POST", "http://192.168.1.182:6333/submit", request_reader)
- request.Header.Add("Content-Type", writer.FormDataContentType())
- timeout := time.Duration(5 * time.Second) //瓒呮椂鏃堕棿50ms
- client := &http.Client{Timeout: timeout}
- resp, err := client.Do(request)
- if err != nil {
- log.Fatal(err)
- return nil, err
- }
- defer func() {
- if r := recover(); r != nil {
- fmt.Printf("panic鐨勫唴瀹�%v\n", r)
- msg := "涓婁紶鍥剧墖鏈嶅姟鍣ㄥ紓甯�"
- if _, ok := r.(error); ok {
- msg = r.(error).Error()
- fmt.Println("panic--recover()寰楀埌鐨勬槸error绫诲瀷")
- }
- if _, ok := r.(string); ok {
- msg = r.(string)
- fmt.Println("panic--recover()寰楀埌鐨勬槸string绫诲瀷")
- }
- err0 = errors.New(msg)
- }
- }()
- defer resp.Body.Close()
- {
- body := &bytes.Buffer{}
- _, err := body.ReadFrom(resp.Body)
- if err != nil {
- log.Fatal(err)
- }
- fmt.Println(resp.StatusCode)
- //fmt.Println(resp.Header)
- fmt.Println(body)
- //decoder := json.NewDecoder(strings.NewReader(body.String()))
- decoder := make(map[string]interface{})
- if err := json.Unmarshal([]byte(body.String()), &decoder); err != nil {
- return nil, err
- }
- return decoder, nil
- }
+ maps,err0 = UploadFromMat(rook)
+ return
}
// 鎶婂浘鐗囪浆鎴愪簩杩涘埗娴�
@@ -269,3 +206,26 @@
return bytes, err
}
+// 鏍规嵁id鍘荤紦瀛橀噷鏌ヨ澶氳竟褰�
+func getPolygonById(polygonId string, cameraId string) (protomsg.CameraPolygon){
+ // 鏌ュ埌鎽勫儚鏈烘墍鏈夌殑鍖哄煙骞剁敾妗�
+ var cameraPolygons []protomsg.CameraPolygon
+ cameraPolygons = cache.GetPolygonsByCameraId(cameraId)
+ for _, polygon := range cameraPolygons {
+ if polygon.Id == polygonId {
+ return polygon
+ }
+ }
+ return protomsg.CameraPolygon{}
+}
+// 鍦ㄥ浘涓婄敾涓�涓
+func DrawAPolygon(rook *gocv.Mat,polygonString string, color color.RGBA) {
+ points := ruleserver.Json2points(polygonString)
+ for index := 0; index < len(points); index++ {
+ if index == len(points)-1 { // 闂悎鍥惧舰
+ gocv.Line(rook, image.Pt(int(points[index].X), int(points[index].Y)), image.Pt(int(points[0].X), int(points[0].Y)), color, 2)
+ } else {
+ gocv.Line(rook, image.Pt(int(points[index].X), int(points[index].Y)), image.Pt(int(points[index+1].X), int(points[index+1].Y)), color, 2)
+ }
+ }
+}
diff --git a/util/upload.go b/util/upload.go
index a5e4870..90e2d0d 100644
--- a/util/upload.go
+++ b/util/upload.go
@@ -135,4 +135,63 @@
}
return decoder, nil
}
+}
+
+func UploadFromMat(rook gocv.Mat)(maps map[string]interface{}, err0 error){
+ // 涓婁紶
+ fdata, _ := gocv.IMEncode(".jpg", rook)
+ body := &bytes.Buffer{}
+ writer := multipart.NewWriter(body)
+ _, err1 := writer.CreateFormFile("file", "fasjuierf")
+ if err1 != nil {
+ return nil, err1
+ }
+ boundary := writer.Boundary()
+ //close_string := fmt.Sprintf("\r\n--%s--\r\n", boundary)
+ close_buf := bytes.NewBufferString(fmt.Sprintf("\r\n--%s--\r\n", boundary))
+ file := bytes.NewBuffer(fdata)
+ request_reader := io.MultiReader(body, file, close_buf)
+ //_, err = io.Copy(part, file)
+ //writer.WriteField(key, val)
+ request, err := http.NewRequest("POST", "http://192.168.1.182:6333/submit", request_reader)
+ request.Header.Add("Content-Type", writer.FormDataContentType())
+ timeout := time.Duration(5 * time.Second) //瓒呮椂鏃堕棿50ms
+ client := &http.Client{Timeout: timeout}
+ resp, err := client.Do(request)
+ if err != nil {
+ log.Fatal(err)
+ return nil, err
+ }
+ defer func() {
+ if r := recover(); r != nil {
+ fmt.Printf("panic鐨勫唴瀹�%v\n", r)
+ msg := "涓婁紶鍥剧墖鏈嶅姟鍣ㄥ紓甯�"
+ if _, ok := r.(error); ok {
+ msg = r.(error).Error()
+ fmt.Println("panic--recover()寰楀埌鐨勬槸error绫诲瀷")
+ }
+ if _, ok := r.(string); ok {
+ msg = r.(string)
+ fmt.Println("panic--recover()寰楀埌鐨勬槸string绫诲瀷")
+ }
+ err0 = errors.New(msg)
+ }
+ }()
+ defer resp.Body.Close()
+ {
+ body := &bytes.Buffer{}
+ _, err := body.ReadFrom(resp.Body)
+ if err != nil {
+ log.Fatal(err)
+ }
+ fmt.Println(resp.StatusCode)
+ //fmt.Println(resp.Header)
+ fmt.Println(body)
+ //decoder := json.NewDecoder(strings.NewReader(body.String()))
+ decoder := make(map[string]interface{})
+ if err := json.Unmarshal([]byte(body.String()), &decoder); err != nil {
+ return nil, err
+ }
+ return decoder, nil
+ }
}
\ No newline at end of file
--
Gitblit v1.8.0