From 906880cce4eeb0d7b2548ed9298b1b9f3c5510c6 Mon Sep 17 00:00:00 2001
From: liuxiaolong <736321739@qq.com>
Date: 星期四, 07 十一月 2019 20:10:54 +0800
Subject: [PATCH] Merge branch 'module' of http://192.168.5.5:10010/r/ruleprocess into module
---
util/simpleCV.go | 160 +++++++++++++++++++++++++---------------------------
1 files changed, 77 insertions(+), 83 deletions(-)
diff --git a/util/simpleCV.go b/util/simpleCV.go
index 74a5f21..a3fb8f6 100644
--- a/util/simpleCV.go
+++ b/util/simpleCV.go
@@ -1,21 +1,18 @@
package util
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"
- "time"
-
- "gocv.io/x/gocv"
+ "ruleprocess/cache"
+ "basic.com/valib/logger.git"
+ "ruleprocess/ruleserver"
+ "ruleprocess/structure"
+ "strings"
)
func CvRTSP() {
@@ -158,84 +155,58 @@
}
}
}
+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)
- // 涓婁紶
- 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绫诲瀷")
+
+ 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,",")
+ for i := 0; i < len(polygonIds); i++ {
+ polygon := getPolygonById(polygonIds[i],cameraId)
+ if polygon.Polygon != "[]" && polygon.Polygon != ""{
+ DrawAPolygon(&rook,polygon.Polygon,yellow,scale)
}
- 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
}
+ // 鎶婄洰鏍囨鍑烘潵
+ 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)
+ }
+ }
+ //return nil,nil
+ maps,err0 = UploadFromMat(url,rook)
+ return
+}
+
+func DrawPolygonOnImageForFace(cameraId string, img protomsg.Image, results []structure.FaceResult,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
}
// 鎶婂浘鐗囪浆鎴愪簩杩涘埗娴�
@@ -260,3 +231,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