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