From f88705a2c1adaa093d61d4575c4705f3b05f684c Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期二, 17 十二月 2019 11:01:40 +0800
Subject: [PATCH] ---
---
util/simpleCV.go | 192 +++++++++++++++++++++++++++--------------------
1 files changed, 110 insertions(+), 82 deletions(-)
diff --git a/util/simpleCV.go b/util/simpleCV.go
index 1d617dd..32bcdef 100644
--- a/util/simpleCV.go
+++ b/util/simpleCV.go
@@ -1,13 +1,18 @@
package util
import (
+ "basic.com/pubsub/protomsg.git"
"bufio"
- "bytes"
"fmt"
"gocv.io/x/gocv"
"image"
"image/color"
"os"
+ "ruleprocess/cache"
+ "basic.com/valib/logger.git"
+ "ruleprocess/ruleserver"
+ "ruleprocess/structure"
+ "strings"
)
func CvRTSP() {
@@ -150,90 +155,90 @@
}
}
}
+func DrawPolygonOnImageForYolo(cameraId string, img protomsg.Image, results []structure.Result,url string) (maps map[string]interface{}, err0 error) {
-func DrawPolygonOnImage()(maps map[string]interface{}, err0 error){
- // draw the rook
- //rook := gocv.NewMatWithSize(w, w, gocv.MatTypeCV8UC3)
- //imgs := gocv.NewMat()
- ddd, err := RetrieveROM("/home/user/workspace/ruleprocess/util/105.jpg")
- if err != nil {
- fmt.Println("瑙g爜鏈夎",err)
- }
- bbb := bytes.NewBuffer(ddd) // 蹇呴』鍔犱竴涓猙uffer 涓嶇劧娌℃湁read鏂规硶灏变細鎶ラ敊
-
-
-
-
- rook, _ := gocv.NewMatFromBytes(500, 500, gocv.MatTypeCV8UC3, bbb.Bytes())
+ rook, _ := gocv.NewMatFromBytes(int(img.Height), int(img.Width), gocv.MatTypeCV8UC3, img.Data)
+ //rook := gocv.IMRead("/home/user/workspace/ruleprocess/util/105.jpg",gocv.IMReadColor)
defer rook.Close()
- green := color.RGBA{0, 255, 0, 0}
- points := [][]image.Point{
- {
- image.Pt(100., 100),
- image.Pt(100., 400),
- image.Pt(400, 400),
- image.Pt(400, 100),
- },
- }
- gocv.FillPoly(&rook, points, green)
- 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
- //}
+ yellow := color.RGBA{255, 255, 0, 0}
+ red := color.RGBA{255, 0, 0, 0}
+ scale := float64(img.Width) / 960 // 鐢诲浘姣斾緥
+ logger.Info("width:",img.Width,"--鐢诲浘姣斾緥锛�",scale)
+ // 鍒嗗壊鍖哄煙id闆嗗悎骞舵牴鎹甶d鏌ヨ鍖哄煙鐒跺悗鐢绘
+ for _,result := range results {
+ polygonIds := strings.Split(result.AlarmPolygon,",")
+ logger.Info("鍖哄煙ID锛�",result.AlarmPolygon,polygonIds)
+ for i := 0; i < len(polygonIds); i++ {
+ polygon := getPolygonById(polygonIds[i],cameraId)
+ if polygon.Polygon != "[]" && polygon.Polygon != ""{
+ DrawAPolygon(&rook,polygon.Polygon,yellow,scale)
+ }
+ }
+ }
+ // 鎶婄洰鏍囨鍑烘潵
+ for _,result := range results {
+ for _,rect := range result.AlarmObj {
+ gocv.Rectangle(&rook, image.Rect(int(rect.Location.X), int(rect.Location.Y), int(rect.Location.X+rect.Location.Width), int(rect.Location.Y+rect.Location.Height)), red, 1)
+ }
+ }
+ //return nil,nil
+ maps,err0 = UploadFromMat(url,rook)
+ return
+}
+
+func DrawPolygonOnImageForTarget(cameraId string, img protomsg.Image, results []structure.Result,url string) (maps map[string]interface{}, err0 error) {
+
+ rook, _ := gocv.NewMatFromBytes(int(img.Height), int(img.Width), gocv.MatTypeCV8UC3, img.Data)
+ //rook := gocv.IMRead("/home/user/workspace/ruleprocess/util/105.jpg",gocv.IMReadColor)
+ defer rook.Close()
+
+ yellow := color.RGBA{255, 255, 0, 0}
+ red := color.RGBA{255, 0, 0, 0}
+ scale := float64(img.Width) / 960 // 鐢诲浘姣斾緥
+ logger.Info("width:",img.Width,"--鐢诲浘姣斾緥锛�",scale)
+ // 鍒嗗壊鍖哄煙id闆嗗悎骞舵牴鎹甶d鏌ヨ鍖哄煙鐒跺悗鐢绘
+ for _,result := range results {
+ polygonIds := strings.Split(result.AlarmPolygon,",")
+ logger.Info("鍖哄煙ID锛�",result.AlarmPolygon,polygonIds)
+ for i := 0; i < len(polygonIds); i++ {
+ polygon := getPolygonById(polygonIds[i],cameraId)
+ if polygon.Polygon != "[]" && polygon.Polygon != ""{
+ DrawAPolygon(&rook,polygon.Polygon,yellow,scale)
+ }
+ }
+ }
+ // 鎶婄洰鏍囨鍑烘潵
+ for _,result := range results {
+ for _,rect := range result.AlarmObj {
+ gocv.Rectangle(&rook, image.Rect(int(rect.Location.X), int(rect.Location.Y), int(rect.Location.X+rect.Location.Width), int(rect.Location.Y+rect.Location.Height)), red, 1)
+ }
+ }
+ //return nil,nil
+ maps,err0 = UploadFromMat(url,rook)
+ return
+}
+func DrawPolygonOnImageForFace(cameraId string, img protomsg.Image, results []structure.Result,url string) (maps map[string]interface{}, err0 error) {
+
+ rook, _ := gocv.NewMatFromBytes(int(img.Height), int(img.Width), gocv.MatTypeCV8UC3, img.Data)
+ //rook := gocv.IMRead("/home/user/workspace/ruleprocess/util/105.jpg",gocv.IMReadColor)
+ defer rook.Close()
+
+ yellow := color.RGBA{255, 255, 0, 0}
+ scale := float64(img.Width) / 960 // 鐢诲浘姣斾緥
+ // 鍒嗗壊鍖哄煙id闆嗗悎骞舵牴鎹甶d鏌ヨ鍖哄煙鐒跺悗鐢绘
+ for _,result := range results {
+ polygonIds := strings.Split(result.AlarmPolygon,",")
+ for i := 0; i < len(polygonIds); i++ {
+ polygon := getPolygonById(polygonIds[i],cameraId)
+ if polygon.Polygon != "[]" && polygon.Polygon != ""{
+ DrawAPolygon(&rook,polygon.Polygon,yellow,scale)
+ }
+ }
+ }
+ //return nil,nil
+ maps,err0 = UploadFromMat(url,rook)
+ return
}
// 鎶婂浘鐗囪浆鎴愪簩杩涘埗娴�
@@ -258,3 +263,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 strings.Contains(polygonId,polygon.Id) {
+ return polygon
+ }
+ }
+ return protomsg.CameraPolygon{}
+}
+// 鍦ㄥ浘涓婄敾涓�涓
+func DrawAPolygon(rook *gocv.Mat,polygonString string, color color.RGBA,scale float64) {
+ 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 * scale), int(points[index].Y * scale)), image.Pt(int(points[0].X * scale), int(points[0].Y * scale)), color, 2)
+ } else {
+ gocv.Line(rook, image.Pt(int(points[index].X * scale), int(points[index].Y * scale)), image.Pt(int(points[index+1].X * scale), int(points[index+1].Y * scale)), color, 2)
+ }
+ }
+}
--
Gitblit v1.8.0